aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/v/tests/defer_test.v
diff options
context:
space:
mode:
authorIndrajith K L2022-12-03 17:00:20 +0530
committerIndrajith K L2022-12-03 17:00:20 +0530
commitf5c4671bfbad96bf346bd7e9a21fc4317b4959df (patch)
tree2764fc62da58f2ba8da7ed341643fc359873142f /v_windows/v/old/vlib/v/tests/defer_test.v
downloadcli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.gz
cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.bz2
cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.zip
Adds most of the toolsHEADmaster
Diffstat (limited to 'v_windows/v/old/vlib/v/tests/defer_test.v')
-rw-r--r--v_windows/v/old/vlib/v/tests/defer_test.v156
1 files changed, 156 insertions, 0 deletions
diff --git a/v_windows/v/old/vlib/v/tests/defer_test.v b/v_windows/v/old/vlib/v/tests/defer_test.v
new file mode 100644
index 0000000..7bebf11
--- /dev/null
+++ b/v_windows/v/old/vlib/v/tests/defer_test.v
@@ -0,0 +1,156 @@
+fn foo() string {
+ println('foo()')
+ return 'foo'
+}
+
+fn foo2() string {
+ println('start')
+ defer {
+ println('defer')
+ }
+ defer {
+ println('defer2')
+ }
+ println('end')
+ return foo()
+}
+
+fn test_defer() {
+ assert foo2() == 'foo'
+}
+
+fn set_num(i int, mut n Num) {
+ defer {
+ println('exiting')
+ n.val++
+ }
+ println('Hi')
+ if i < 5 {
+ return
+ } else {
+ n.val++
+ }
+}
+
+fn set_num_opt(mut n Num) ?int {
+ defer {
+ n.val = 1
+ }
+ return 99
+}
+
+struct Num {
+mut:
+ val int
+}
+
+fn (n Num) add(i int) int {
+ return n.val + i
+}
+
+fn test_defer_early_exit() {
+ mut sum := Num{0}
+ for i in 0 .. 10 {
+ set_num(i, mut sum)
+ }
+ println('sum: $sum.val')
+ assert sum.val == 15
+}
+
+fn test_defer_option() {
+ mut ok := Num{0}
+ set_num_opt(mut ok) or {}
+ assert ok.val == 1
+}
+
+fn test_defer_with_anon_fn() {
+ mut f := &Num{
+ val: 110
+ }
+ defer {
+ assert f.add(1) == 111
+ }
+
+ go fn () {
+ defer {
+ println('deferred 1')
+ }
+ }()
+ x := fn () {
+ defer {
+ println('defered 2')
+ }
+ return
+ }
+ x()
+ return
+}
+
+fn set_num_if(mut n Num, v int, cond bool) {
+ if cond {
+ defer {
+ n.val = v
+ }
+ }
+}
+
+fn test_defer_with_if() {
+ mut n := Num{0}
+ set_num_if(mut n, 10, true)
+ assert n.val == 10
+ set_num_if(mut n, 20, false)
+ assert n.val == 10
+}
+
+fn test_defer_order() {
+ mut i := 0
+ defer {
+ i++
+ assert i == 3
+ }
+ defer {
+ i++
+ assert i == 2
+ }
+ defer {
+ i++
+ assert i == 1
+ }
+}
+
+fn test_defer_access() {
+ if true {
+ mut i := 0
+ defer {
+ i++
+ assert i == 1
+ }
+ }
+}
+
+fn test_defer_arrays() {
+ mut ia := []int{}
+ defer {
+ ia << 1
+ }
+}
+
+fn test_defer_str_interpol() {
+ mut t := []string{}
+ defer {
+ t << 'test'
+ t << '${t[0]}'
+ }
+}
+
+fn test_defer_not_change_return_values() {
+ assert num() == 10
+}
+
+fn num() int {
+ mut ret := 10
+ defer {
+ ret = 20
+ }
+ return ret
+}