mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: refactor array sort generation (#11067)
This commit is contained in:
@ -808,25 +808,17 @@ fn test_fixed_array_literal_eq() {
|
||||
fn test_sort() {
|
||||
mut a := ['hi', '1', '5', '3']
|
||||
a.sort()
|
||||
assert a[0] == '1'
|
||||
assert a[1] == '3'
|
||||
assert a[2] == '5'
|
||||
assert a[3] == 'hi'
|
||||
assert a == ['1', '3', '5', 'hi']
|
||||
|
||||
mut nums := [67, -3, 108, 42, 7]
|
||||
nums.sort()
|
||||
assert nums[0] == -3
|
||||
assert nums[1] == 7
|
||||
assert nums[2] == 42
|
||||
assert nums[3] == 67
|
||||
assert nums[4] == 108
|
||||
assert nums == [-3, 7, 42, 67, 108]
|
||||
|
||||
nums.sort(a < b)
|
||||
assert nums[0] == -3
|
||||
assert nums[1] == 7
|
||||
assert nums[2] == 42
|
||||
assert nums[3] == 67
|
||||
assert nums[4] == 108
|
||||
assert nums == [-3, 7, 42, 67, 108]
|
||||
|
||||
nums.sort(b < a)
|
||||
assert nums == [108, 67, 42, 7, -3]
|
||||
|
||||
mut users := [User{22, 'Peter'}, User{20, 'Bob'}, User{25, 'Alice'}]
|
||||
users.sort(a.age < b.age)
|
||||
@ -842,23 +834,30 @@ fn test_sort() {
|
||||
assert users[1].age == 22
|
||||
assert users[2].age == 20
|
||||
|
||||
users.sort(a.name < b.name) // Test sorting by string fields
|
||||
// assert users.map(it.name).join(' ') == 'Alice Bob Peter'
|
||||
users.sort(b.age > a.age)
|
||||
assert users[0].age == 20
|
||||
assert users[1].age == 22
|
||||
assert users[2].age == 25
|
||||
|
||||
users.sort(a.name < b.name)
|
||||
assert users[0].name == 'Alice'
|
||||
assert users[1].name == 'Bob'
|
||||
assert users[2].name == 'Peter'
|
||||
}
|
||||
|
||||
fn test_rune_sort() {
|
||||
mut bs := [`f`, `e`, `d`, `b`, `c`, `a`]
|
||||
bs.sort()
|
||||
println(bs)
|
||||
assert '$bs' == '[`a`, `b`, `c`, `d`, `e`, `f`]'
|
||||
assert bs == [`a`, `b`, `c`, `d`, `e`, `f`]
|
||||
|
||||
bs.sort(a > b)
|
||||
println(bs)
|
||||
assert '$bs' == '[`f`, `e`, `d`, `c`, `b`, `a`]'
|
||||
assert bs == [`f`, `e`, `d`, `c`, `b`, `a`]
|
||||
|
||||
bs.sort(a < b)
|
||||
println(bs)
|
||||
assert '$bs' == '[`a`, `b`, `c`, `d`, `e`, `f`]'
|
||||
assert bs == [`a`, `b`, `c`, `d`, `e`, `f`]
|
||||
}
|
||||
|
||||
fn test_sort_by_different_order_of_a_b() {
|
||||
@ -876,9 +875,19 @@ fn test_sort_by_different_order_of_a_b() {
|
||||
fn test_f32_sort() {
|
||||
mut f := [f32(50.0), 15, 1, 79, 38, 0, 27]
|
||||
f.sort()
|
||||
assert f[0] == 0.0
|
||||
assert f[1] == 1.0
|
||||
assert f[6] == 79.0
|
||||
assert f == [f32(0.0), 1, 15, 27, 38, 50, 79]
|
||||
|
||||
f.sort(a < b)
|
||||
assert f == [f32(0.0), 1, 15, 27, 38, 50, 79]
|
||||
|
||||
f.sort(b > a)
|
||||
assert f == [f32(0.0), 1, 15, 27, 38, 50, 79]
|
||||
|
||||
f.sort(b < a)
|
||||
assert f == [f32(79.0), 50, 38, 27, 15, 1, 0]
|
||||
|
||||
f.sort(a > b)
|
||||
assert f == [f32(79.0), 50, 38, 27, 15, 1, 0]
|
||||
}
|
||||
|
||||
fn test_f64_sort() {
|
||||
@ -897,6 +906,17 @@ fn test_i64_sort() {
|
||||
assert f[6] == 79
|
||||
}
|
||||
|
||||
fn test_sort_index_expr() {
|
||||
mut f := [[i64(50), 48], [i64(15)], [i64(1)], [i64(79)], [i64(38)],
|
||||
[i64(0)], [i64(27)]]
|
||||
// TODO This currently gives "indexing pointer" error without unsafe
|
||||
unsafe {
|
||||
f.sort(a[0] < b[0])
|
||||
}
|
||||
assert f == [[i64(0)], [i64(1)], [i64(15)], [i64(27)], [i64(38)],
|
||||
[i64(50), 48], [i64(79)]]
|
||||
}
|
||||
|
||||
fn test_a_b_paras_sort() {
|
||||
mut arr_i := [1, 3, 2]
|
||||
arr_i.sort(a < b)
|
||||
|
Reference in New Issue
Block a user