mirror of
https://github.com/dlang/phobos.git
synced 2025-04-30 15:10:46 +03:00
Issue 11252 - In operator requested for std.range.iota
This commit is contained in:
parent
41d0771c98
commit
80d1e84453
1 changed files with 41 additions and 0 deletions
|
@ -5367,6 +5367,14 @@ if ((isIntegral!(CommonType!(B, E)) || isPointer!(CommonType!(B, E)))
|
||||||
// consistent with calling popFront() n times.
|
// consistent with calling popFront() n times.
|
||||||
return cast(inout Value) (current + step * n);
|
return cast(inout Value) (current + step * n);
|
||||||
}
|
}
|
||||||
|
auto opBinaryRight(string op)(Value val) const
|
||||||
|
if (op == "in")
|
||||||
|
{
|
||||||
|
if (empty) return false;
|
||||||
|
//cast to avoid becoming unsigned
|
||||||
|
auto supposedIndex = cast(StepType)(val - current) / step;
|
||||||
|
return supposedIndex < length && supposedIndex * step + current == val;
|
||||||
|
}
|
||||||
inout(Result) opSlice() inout { return this; }
|
inout(Result) opSlice() inout { return this; }
|
||||||
inout(Result) opSlice(ulong lower, ulong upper) inout
|
inout(Result) opSlice(ulong lower, ulong upper) inout
|
||||||
{
|
{
|
||||||
|
@ -5444,6 +5452,11 @@ if (isIntegral!(CommonType!(B, E)) || isPointer!(CommonType!(B, E)))
|
||||||
// consistent with calling popFront() n times.
|
// consistent with calling popFront() n times.
|
||||||
return cast(inout Value) (current + n);
|
return cast(inout Value) (current + n);
|
||||||
}
|
}
|
||||||
|
auto opBinaryRight(string op)(Value val) const
|
||||||
|
if (op == "in")
|
||||||
|
{
|
||||||
|
return current <= val && val < pastLast;
|
||||||
|
}
|
||||||
inout(Result) opSlice() inout { return this; }
|
inout(Result) opSlice() inout { return this; }
|
||||||
inout(Result) opSlice(ulong lower, ulong upper) inout
|
inout(Result) opSlice(ulong lower, ulong upper) inout
|
||||||
{
|
{
|
||||||
|
@ -5566,9 +5579,14 @@ body
|
||||||
|
|
||||||
auto r = iota(0, 10, 1);
|
auto r = iota(0, 10, 1);
|
||||||
assert(equal(r, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
|
assert(equal(r, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
|
||||||
|
assert(equal(r, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
|
||||||
|
assert(3 in r);
|
||||||
|
assert(!(10 in r));
|
||||||
|
assert(!(-8 in r));
|
||||||
r = iota(0, 11, 3);
|
r = iota(0, 11, 3);
|
||||||
assert(equal(r, [0, 3, 6, 9]));
|
assert(equal(r, [0, 3, 6, 9]));
|
||||||
assert(r[2] == 6);
|
assert(r[2] == 6);
|
||||||
|
assert(!(2 in r));
|
||||||
auto rf = iota(0.0, 0.5, 0.1);
|
auto rf = iota(0.0, 0.5, 0.1);
|
||||||
assert(approxEqual(rf, [0.0, 0.1, 0.2, 0.3, 0.4]));
|
assert(approxEqual(rf, [0.0, 0.1, 0.2, 0.3, 0.4]));
|
||||||
}
|
}
|
||||||
|
@ -5600,6 +5618,7 @@ debug @system unittest
|
||||||
auto r1 = iota(a.ptr, a.ptr + a.length, 1);
|
auto r1 = iota(a.ptr, a.ptr + a.length, 1);
|
||||||
assert(r1.front == a.ptr);
|
assert(r1.front == a.ptr);
|
||||||
assert(r1.back == a.ptr + a.length - 1);
|
assert(r1.back == a.ptr + a.length - 1);
|
||||||
|
assert(&a[4] in r1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@safe unittest
|
@safe unittest
|
||||||
|
@ -5639,6 +5658,8 @@ debug @system unittest
|
||||||
|
|
||||||
rSlice = r[0 .. 4];
|
rSlice = r[0 .. 4];
|
||||||
assert(equal(rSlice, [0, 1, 2, 3]));
|
assert(equal(rSlice, [0, 1, 2, 3]));
|
||||||
|
assert(3 in rSlice);
|
||||||
|
assert(!(4 in rSlice));
|
||||||
|
|
||||||
auto rr = iota(10);
|
auto rr = iota(10);
|
||||||
assert(equal(rr, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9][]));
|
assert(equal(rr, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9][]));
|
||||||
|
@ -5655,8 +5676,15 @@ debug @system unittest
|
||||||
|
|
||||||
r = iota(0, -7, -3);
|
r = iota(0, -7, -3);
|
||||||
assert(equal(r, [0, -3, -6][]));
|
assert(equal(r, [0, -3, -6][]));
|
||||||
|
assert(0 in r);
|
||||||
|
assert(-6 in r);
|
||||||
rSlice = r[1 .. 3];
|
rSlice = r[1 .. 3];
|
||||||
assert(equal(rSlice, [-3, -6]));
|
assert(equal(rSlice, [-3, -6]));
|
||||||
|
assert(!(0 in rSlice));
|
||||||
|
assert(!(-2 in rSlice));
|
||||||
|
assert(!(-5 in rSlice));
|
||||||
|
assert(!(3 in rSlice));
|
||||||
|
assert(!(-9 in rSlice));
|
||||||
|
|
||||||
r = iota(0, 11, 3);
|
r = iota(0, 11, 3);
|
||||||
assert(equal(r, [0, 3, 6, 9][]));
|
assert(equal(r, [0, 3, 6, 9][]));
|
||||||
|
@ -5706,6 +5734,10 @@ debug @system unittest
|
||||||
// iota of longs
|
// iota of longs
|
||||||
auto rl = iota(5_000_000L);
|
auto rl = iota(5_000_000L);
|
||||||
assert(rl.length == 5_000_000L);
|
assert(rl.length == 5_000_000L);
|
||||||
|
assert(0 in rl);
|
||||||
|
assert(4_000_000L in rl);
|
||||||
|
assert(!(-4_000_000L in rl));
|
||||||
|
assert(!(5_000_000L in rl));
|
||||||
|
|
||||||
// iota of longs with steps
|
// iota of longs with steps
|
||||||
auto iota_of_longs_with_steps = iota(50L, 101L, 10);
|
auto iota_of_longs_with_steps = iota(50L, 101L, 10);
|
||||||
|
@ -5726,6 +5758,15 @@ debug @system unittest
|
||||||
assert(iota(uint.max, uint.max-10, -2).length == 5);
|
assert(iota(uint.max, uint.max-10, -2).length == 5);
|
||||||
assert(iota(uint.max, 0u, -1).length == uint.max);
|
assert(iota(uint.max, 0u, -1).length == uint.max);
|
||||||
|
|
||||||
|
assert(20 in iota(20u, 10u, -2));
|
||||||
|
assert(16 in iota(20u, 10u, -2));
|
||||||
|
assert(!(15 in iota(20u, 10u, -2)));
|
||||||
|
assert(!(10 in iota(20u, 10u, -2)));
|
||||||
|
assert(!(uint.max in iota(20u, 10u, -1)));
|
||||||
|
assert(!(int.min in iota(20u, 10u, -1)));
|
||||||
|
assert(!(int.max in iota(20u, 10u, -1)));
|
||||||
|
|
||||||
|
|
||||||
// Issue 8920
|
// Issue 8920
|
||||||
foreach (Type; AliasSeq!(byte, ubyte, short, ushort,
|
foreach (Type; AliasSeq!(byte, ubyte, short, ushort,
|
||||||
int, uint, long, ulong))
|
int, uint, long, ulong))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue