diff options
author | Indrajith K L | 2022-12-03 17:00:20 +0530 |
---|---|---|
committer | Indrajith K L | 2022-12-03 17:00:20 +0530 |
commit | f5c4671bfbad96bf346bd7e9a21fc4317b4959df (patch) | |
tree | 2764fc62da58f2ba8da7ed341643fc359873142f /v_windows/v/old/vlib/v/tests/defer_test.v | |
download | cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.gz cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.tar.bz2 cli-tools-windows-f5c4671bfbad96bf346bd7e9a21fc4317b4959df.zip |
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.v | 156 |
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 +} |