From 6f554399303bd0cc41755c8c523f472bbbbcf8a8 Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 11 Nov 2021 20:45:55 +0800 Subject: [PATCH] tests: supplement tests for different types of generic parameters (#12432) --- vlib/v/tests/generic_arrays_sum_test.v | 10 ++-- vlib/v/tests/generic_fn_infer_modifier_test.v | 35 ++++++++++-- vlib/v/tests/generics_array_append_test.v | 2 + vlib/v/tests/generics_array_delete_test.v | 53 ++++++++++++++++--- .../generics_method_on_receiver_types_test.v | 18 +++++-- .../tests/generics_method_str_overload_test.v | 18 +++++-- .../tests/generics_nested_struct_init_test.v | 41 +++++++++++--- 7 files changed, 150 insertions(+), 27 deletions(-) diff --git a/vlib/v/tests/generic_arrays_sum_test.v b/vlib/v/tests/generic_arrays_sum_test.v index cbdf35127f..f167e3261e 100644 --- a/vlib/v/tests/generic_arrays_sum_test.v +++ b/vlib/v/tests/generic_arrays_sum_test.v @@ -14,10 +14,14 @@ fn (p1 Point) + (p2 Point) Point { } fn test_generic_arrays_sum() { - ret := arrays.sum([Point{ x: 1, y: 1 }, Point{ + ret1 := arrays.sum([Point{ x: 1, y: 1 }, Point{ x: 2 y: 2 }]) or { Point{} } - println(ret) - assert ret == Point{3, 3} + println(ret1) + assert ret1 == Point{3, 3} + + ret2 := arrays.sum([1, 2, 3, 4]) or { 0 } + println(ret2) + assert ret2 == 10 } diff --git a/vlib/v/tests/generic_fn_infer_modifier_test.v b/vlib/v/tests/generic_fn_infer_modifier_test.v index f0eb9422ae..0901aa3476 100644 --- a/vlib/v/tests/generic_fn_infer_modifier_test.v +++ b/vlib/v/tests/generic_fn_infer_modifier_test.v @@ -7,10 +7,35 @@ fn g_array(mut a []T) { } fn test_array() { - mut a := [7, 8] - r := f_array(a) - assert r == 7 + // []int + mut a1 := [7, 8] + r1 := f_array(a1) + assert r1 == 7 - g_array(mut a) - assert a[0] == 8 + g_array(mut a1) + assert a1[0] == 8 + + // []f64 + mut a2 := [1.1, 2.2] + r2 := f_array(a2) + assert r2 == 1.1 + + g_array(mut a2) + assert a2[0] == 2.2 + + // []string + mut a3 := ['aa', 'bb'] + r3 := f_array(a3) + assert r3 == 'aa' + + g_array(mut a3) + assert a3[0] == 'bb' + + // []bool + mut a4 := [true, false] + r4 := f_array(a4) + assert r4 == true + + g_array(mut a4) + assert a4[0] == false } diff --git a/vlib/v/tests/generics_array_append_test.v b/vlib/v/tests/generics_array_append_test.v index 8a6954dc68..e54ccf98f6 100644 --- a/vlib/v/tests/generics_array_append_test.v +++ b/vlib/v/tests/generics_array_append_test.v @@ -6,4 +6,6 @@ fn g(arr []T) { fn test_generic_array_append() { g([1, 2, 3]) + g([1.1, 2.2, 3.3]) + g(['aa', 'bb', 'cc']) } diff --git a/vlib/v/tests/generics_array_delete_test.v b/vlib/v/tests/generics_array_delete_test.v index 75fb511c0b..be89c5a5bf 100644 --- a/vlib/v/tests/generics_array_delete_test.v +++ b/vlib/v/tests/generics_array_delete_test.v @@ -27,22 +27,63 @@ fn (mut s Set) remove(value T) bool { } fn test_generics_array_delete() { - mut set := Set{} + // int + mut set1 := Set{} - mut added := set.add(4) + mut added := set1.add(4) println(added) assert added - added = set.add(3) + added = set1.add(3) println(added) assert added - added = set.add(3) + added = set1.add(3) println(added) assert !added - println(set) - mut removed := set.remove(4) + println(set1) + mut removed := set1.remove(4) + println(removed) + assert removed + + // f64 + mut set2 := Set{} + + added = set2.add(4.4) + println(added) + assert added + + added = set2.add(3.3) + println(added) + assert added + + added = set2.add(3.3) + println(added) + assert !added + + println(set2) + removed = set2.remove(4.4) + println(removed) + assert removed + + // string + mut set3 := Set{} + + added = set3.add('aaa') + println(added) + assert added + + added = set3.add('bbb') + println(added) + assert added + + added = set3.add('bbb') + println(added) + assert !added + + println(set3) + removed = set3.remove('aaa') println(removed) assert removed } diff --git a/vlib/v/tests/generics_method_on_receiver_types_test.v b/vlib/v/tests/generics_method_on_receiver_types_test.v index da0a1c17ec..61e0e7723b 100644 --- a/vlib/v/tests/generics_method_on_receiver_types_test.v +++ b/vlib/v/tests/generics_method_on_receiver_types_test.v @@ -7,7 +7,19 @@ fn (s Abc) get_value() T { } fn test_generics_method_on_receiver_types() { - s := Abc{'hello'} - println(s.get_value()) - assert s.get_value() == 'hello' + s1 := Abc{'hello'} + println(s1.get_value()) + assert s1.get_value() == 'hello' + + s2 := Abc{22} + println(s2.get_value()) + assert s2.get_value() == 22 + + s3 := Abc{1.1} + println(s3.get_value()) + assert s3.get_value() == 1.1 + + s4 := Abc{true} + println(s4.get_value()) + assert s4.get_value() == true } diff --git a/vlib/v/tests/generics_method_str_overload_test.v b/vlib/v/tests/generics_method_str_overload_test.v index 7ca5835bc1..c625955c5c 100644 --- a/vlib/v/tests/generics_method_str_overload_test.v +++ b/vlib/v/tests/generics_method_str_overload_test.v @@ -9,7 +9,19 @@ fn (g Gen) str() string { } fn test_generics_method_str_overload() { - mut g := Gen{'Gen', 0, 10} - println(g) - assert '$g' == 'Gen 0, Gen, 10.' + mut g1 := Gen{'aaa', 0, 10} + println(g1) + assert '$g1' == 'Gen 0, aaa, 10.' + + mut g2 := Gen{22, 0, 10} + println(g2) + assert '$g2' == 'Gen 0, 22, 10.' + + mut g3 := Gen{2.22, 0, 10} + println(g3) + assert '$g3' == 'Gen 0, 2.22, 10.' + + mut g4 := Gen{true, 0, 10} + println(g4) + assert '$g4' == 'Gen 0, true, 10.' } diff --git a/vlib/v/tests/generics_nested_struct_init_test.v b/vlib/v/tests/generics_nested_struct_init_test.v index d69d7bfc71..33bd404268 100644 --- a/vlib/v/tests/generics_nested_struct_init_test.v +++ b/vlib/v/tests/generics_nested_struct_init_test.v @@ -14,12 +14,39 @@ fn (mut b Bar) add(v T) { } fn test_nested_generics_struct_init() { - mut bar := Bar{} - bar.add('bar') - println(bar) + mut bar1 := Bar{} + bar1.add('bar') + println(bar1) - result := '$bar' - assert result.contains('Bar{') - assert result.contains('foos: [Foo{') - assert result.contains("foo: 'bar'") + result1 := '$bar1' + assert result1.contains('Bar{') + assert result1.contains('foos: [Foo{') + assert result1.contains("foo: 'bar'") + + mut bar2 := Bar{} + bar2.add(22) + println(bar2) + + result2 := '$bar2' + assert result2.contains('Bar{') + assert result2.contains('foos: [Foo{') + assert result2.contains('foo: 22') + + mut bar3 := Bar{} + bar3.add(2.2) + println(bar3) + + result3 := '$bar3' + assert result3.contains('Bar{') + assert result3.contains('foos: [Foo{') + assert result3.contains('foo: 2.2') + + mut bar4 := Bar{} + bar4.add(true) + println(bar4) + + result4 := '$bar4' + assert result4.contains('Bar{') + assert result4.contains('foos: [Foo{') + assert result4.contains('foo: true') }