diff --git a/lib/std/collections/range.c3 b/lib/std/collections/range.c3 index 20d0590f7..ce57066cb 100644 --- a/lib/std/collections/range.c3 +++ b/lib/std/collections/range.c3 @@ -16,6 +16,11 @@ fn usz Range.len(&self) @operator(len) return (usz)(self.end - self.start + (Type)1); } +fn bool Range.has(&self, Type value) @inline +{ + return value >= self.start && value <= self.end; +} + /** * @require index < self.len() : "Can't index into an empty range" **/ @@ -46,6 +51,11 @@ fn usz ExclusiveRange.len(&self) @operator(len) return (usz)(self.end - self.start); } +fn bool ExclusiveRange.has(&self, Type value) @inline +{ + return value >= self.start && value < self.end; +} + fn void! ExclusiveRange.to_format(&self, Formatter* formatter) @dynamic { formatter.printf("[%s..<%s]", self.start, self.end)!; diff --git a/test/unit/stdlib/collections/range.c3 b/test/unit/stdlib/collections/range.c3 index a88d89ebb..0314be0a5 100644 --- a/test/unit/stdlib/collections/range.c3 +++ b/test/unit/stdlib/collections/range.c3 @@ -4,18 +4,6 @@ import std::collections::range; def IntRange = Range(); def IntExRange = ExclusiveRange(); -fn void! test_exrange() -{ - IntExRange range = { -4, 2 }; - int sum = 0; - foreach (int z : range) - { - assert(z >= -4 && z < 2); - sum += z * z; - } - assert(sum == 31); -} - fn void! test_range() { IntRange range = { -4, 2 }; @@ -26,5 +14,23 @@ fn void! test_range() sum += z * z; } assert(sum == 35); + assert(range.has(-4)); + assert(range.has(2)); + assert(!range.has(3)); +} + +fn void! test_exrange() +{ + IntExRange range = { -4, 2 }; + int sum = 0; + foreach (int z : range) + { + assert(z >= -4 && z < 2); + sum += z * z; + } + assert(sum == 31); + assert(range.has(-4)); + assert(range.has(1)); + assert(!range.has(2)); }