aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/v/tests/array_methods_test.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/v/tests/array_methods_test.v')
-rw-r--r--v_windows/v/vlib/v/tests/array_methods_test.v32
1 files changed, 32 insertions, 0 deletions
diff --git a/v_windows/v/vlib/v/tests/array_methods_test.v b/v_windows/v/vlib/v/tests/array_methods_test.v
new file mode 100644
index 0000000..f6dce7c
--- /dev/null
+++ b/v_windows/v/vlib/v/tests/array_methods_test.v
@@ -0,0 +1,32 @@
+struct Counter {
+mut:
+ val int
+}
+
+// if this is called more than once, the test'll fail
+fn (mut c Counter) new_arr(msg string) []int {
+ if c.val > 0 {
+ panic(msg)
+ }
+ c.val++
+ return [1, 3, 2]
+}
+
+fn test_array_eval_count() {
+ // `new_arr()` should only be evaluated once, not on every iteration
+ mut a1 := Counter{}
+ assert a1.new_arr('map() failed').map(it * 2) == [2, 6, 4]
+
+ mut a2 := Counter{}
+ assert a2.new_arr('filter() failed').filter(it < 3) == [1, 2]
+
+ mut a3 := Counter{}
+ assert a3.new_arr('any() failed').any(it == 2) == true
+ a3 = Counter{}
+ assert a3.new_arr('any() failed').any(it < 0) == false
+
+ mut a4 := Counter{}
+ assert a4.new_arr('all() failed').all(it > 0) == true
+ a4 = Counter{}
+ assert a4.new_arr('all() failed').all(it == 2) == false
+}