From 639c6ac65a1bd44b2ba0725fe7016a4920bf0950 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Mon, 19 Jan 2026 12:53:47 +0000 Subject: Iterables and iterators :D --- tests/features/test_iterator.zc | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/features/test_iterator.zc (limited to 'tests/features/test_iterator.zc') diff --git a/tests/features/test_iterator.zc b/tests/features/test_iterator.zc new file mode 100644 index 0000000..1340a00 --- /dev/null +++ b/tests/features/test_iterator.zc @@ -0,0 +1,45 @@ +import "../../std/iter.zc" +import "../../std/option.zc" + +struct RangeIter { + current: int; + stop: int; +} + +impl RangeIter { + fn next(self) -> Option { + if (self.current < self.stop) { + var v = self.current; + self.current += 1; + return Option::Some(v); + } + return Option::None(); + } +} + +struct MyRange { + start: int; + end: int; +} + +impl MyRange { + fn iterator(self) -> RangeIter { + return RangeIter { + current: self.start, + stop: self.end + }; + } +} + +test "iterator_desugaring" { + var range = MyRange { start: 0, end: 5 }; + var sum = 0; + + // This loop should be desugared by the compiler + for i in range { + println "Got: {i}"; // Verification print + sum += i; + } + + assert(sum == 10); // 0+1+2+3+4 = 10 +} -- cgit v1.2.3