diff --git a/std/algorithm/setops.d b/std/algorithm/setops.d index b970e21ecca..48341c40de9 100644 --- a/std/algorithm/setops.d +++ b/std/algorithm/setops.d @@ -554,6 +554,40 @@ pure @safe nothrow @nogc unittest foreach (pair; cartesianProduct(seq, seq)) {} } +unittest +{ + import std.algorithm.comparison : equal; + import std.typecons : tuple; + + static struct SystemRange + { + int[] data; + + int front() @system @property + { + return data[0]; + } + + bool empty() @system @property + { + return data.length == 0; + } + + void popFront() @system + { + data = data[1 .. $]; + } + + SystemRange save() @system + { + return this; + } + } + + assert(SystemRange([1, 2]).cartesianProduct(SystemRange([3, 4])) + .equal([tuple(1, 3), tuple(1, 4), tuple(2, 3), tuple(2, 4)])); +} + // largestPartialIntersection /** Given a range of sorted $(REF_ALTTEXT forward ranges, isForwardRange, std,range,primitives)