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) { let 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" { let range = MyRange { start: 0, end: 5 }; let 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 }