diff options
| author | SAJJA EASWAR <eshwarsajja20@gmail.com> | 2026-01-25 22:59:36 +0530 |
|---|---|---|
| committer | SAJJA EASWAR <eshwarsajja20@gmail.com> | 2026-01-25 22:59:36 +0530 |
| commit | ebc8b94baa6bc694cb4829e2eb2934a1f17fa6a1 (patch) | |
| tree | 71b952ad455bf17d5bdea01472f0e2297f25eabe /tests/memory/test_move_semantics.zc | |
| parent | 863118c95caac0d69a35f6ae4d2e83844734a8a1 (diff) | |
| parent | 489336b2101bf16edeec7bfc4379408eb19b936e (diff) | |
Merge branch 'main' into pr-109
Diffstat (limited to 'tests/memory/test_move_semantics.zc')
| -rw-r--r-- | tests/memory/test_move_semantics.zc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/memory/test_move_semantics.zc b/tests/memory/test_move_semantics.zc new file mode 100644 index 0000000..0ccd822 --- /dev/null +++ b/tests/memory/test_move_semantics.zc @@ -0,0 +1,55 @@ + +struct Point { + x: int; +} + +struct Mover { + val: int; +} + +test "basic_move" { + let p1 = Mover { val: 10 }; + let p2 = p1; // p1 moved to p2 + + // Valid usage of p2 + assert(p2.val == 10, "p2 should be valid"); + + // Invalid usage of p1 (Uncomment to test compiler error) + // let p3 = p1; +} + +test "primitive_copy" { + let i = 10; + let j = i; // Copy + let k = i; // Copy again - should be valid + assert(k == 10, "Primitive copy failed"); +} + +test "reassignment" { + let m1 = Mover { val: 1 }; + let m2 = m1; // m1 moved + + m1 = Mover { val: 2 }; // Resurrect m1 + let m3 = m1; // Valid now + assert(m3.val == 2, "Resurrection failed"); +} + +fn consume(m: Mover) { + assert(m.val == 10, "Func arg failed"); +} + +test "func_arg" { + let m = Mover { val: 10 }; + consume(m); // m moved + + // 2. Use after move (Call - Negative Test) + // consume(m); // Should fail: Use of moved value 'm' +} + +/* +// 3. Use after return (Negative Test) +fn fail_return(m: Mover) -> Mover { + let m2 = m; + return m; // Should fail: Use of moved value 'm' +} +*/ |
