Skip to content

Commit

Permalink
Merge pull request #109 from skids/master
Browse files Browse the repository at this point in the history
Start to rehabilitate Range Iterator test file post-GLR
  • Loading branch information
skids committed Mar 17, 2016
2 parents 863fcc4 + d386ad8 commit 4647043
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 121 deletions.
27 changes: 17 additions & 10 deletions S02-types/range.t
Expand Up @@ -2,7 +2,7 @@ use v6;

use Test;

plan 179;
plan 183;

# basic Range
# L<S02/Immutable types/A pair of Ordered endpoints>
Expand Down Expand Up @@ -98,6 +98,22 @@ is(+Range, 0, 'type numification');
;
}

throws-like { $r.min = 2 }, X::Assignment::RO, "range.min ro";
throws-like { $r.max = 4 }, X::Assignment::RO, "range.max ro";
throws-like { $r.excludes-min = True }, X::Assignment::RO,
"range.excludes-min ro";
throws-like { $r.excludes-max = True }, X::Assignment::RO,
"range.excludes-max ro";

# RT #125791
{
for 0,1 -> $i {
throws-like { (^10).bounds[$i] = 1 }, X::Assignment::RO,
typename => / ^ 'Int' | 'value' $ /,
"is Range.bounds[$i] ro";
}
}

my $s = 1..5;
is $r, $s, 'range has not changed';
}
Expand Down Expand Up @@ -308,15 +324,6 @@ lives-ok({"\0".."~"}, "low ascii range completes");
is ($r / 2).gist, '0.5^..^5.0', "can scale a ^..^ range down";
}

# RT #125791
{
for 0,1 -> $i {
throws-like { (^10).bounds[$i] = 1 }, X::Assignment::RO,
typename => / ^ 'Int' | 'value' $ /,
"is Range.bounds[$i] ro";
}
}

{
sub test($range,$min,$max,$minbound,$maxbound) {
subtest {
Expand Down
231 changes: 120 additions & 111 deletions S07-iterators/range-iterator.t
@@ -1,151 +1,160 @@
use v6;
use Test;

plan 96;
plan 105;

{
my $r = RangeIter.new(1..5);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, 1, '$r.get == 1';
is $r.get, 2, '$r.get == 2';
is $r.get, 3, '$r.get == 3';
is $r.get, 4, '$r.get == 4';
is $r.get, 5, '$r.get == 5';
is $r.get, EMPTY, '$r.get is done';
is $r.get, EMPTY, '$r.get is still done';
my $r = (1..5).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.count-only, 5, '$r.count-only works';
is $r.pull-one, 1, '$r.pull-one == 1 and Range Iterator kept place';
is $r.pull-one, 2, '$r.pull-one == 2';
is $r.pull-one, 3, '$r.pull-one == 3';
is $r.pull-one, 4, '$r.pull-one == 4';
is $r.pull-one, 5, '$r.pull-one == 5';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is done';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is still done';
}

{
my $r = RangeIter.new(-1.5.Num..^3);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -1.5, '$r.get == -1.5';
is $r.get, -.5, '$r.get == -0.5';
is $r.get, .5, '$r.get == .5';
is $r.get, 1.5, '$r.get == 1.5';
is $r.get, 2.5, '$r.get == 2.5';
is $r.get, EMPTY, '$r.get is done';
is $r.get, EMPTY, '$r.get is still done';
my $r = (-1.5.Num..^3).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.count-only, 5, '$r.count-only works';
is $r.pull-one, -1.5, '$r.pull-one == -1.5 and Range Iterator kept place';
is $r.pull-one, -.5, '$r.pull-one == -0.5';
is $r.pull-one, .5, '$r.pull-one == .5';
is $r.pull-one, 1.5, '$r.pull-one == 1.5';
is $r.pull-one, 2.5, '$r.pull-one == 2.5';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is done';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is still done';
}

{
my $r = RangeIter.new(-1.5..^3);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -1.5, '$r.get == -1.5';
is $r.get, -.5, '$r.get == -0.5';
is $r.get, .5, '$r.get == .5';
is $r.get, 1.5, '$r.get == 1.5';
is $r.get, 2.5, '$r.get == 2.5';
is $r.get, EMPTY, '$r.get is done';
is $r.get, EMPTY, '$r.get is still done';
my $r = (-1.5..^3).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.count-only, 5, '$r.count-only works';
is $r.pull-one, -1.5, '$r.pull-one == -1.5 and Range Iterator kept place';
is $r.pull-one, -.5, '$r.pull-one == -0.5';
is $r.pull-one, .5, '$r.pull-one == .5';
is $r.pull-one, 1.5, '$r.pull-one == 1.5';
is $r.pull-one, 2.5, '$r.pull-one == 2.5';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is done';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is still done';
}

{
my $r = RangeIter.new(-1.5.Num^..3);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -.5, '$r.get == -0.5';
is $r.get, .5, '$r.get == .5';
is $r.get, 1.5, '$r.get == 1.5';
is $r.get, 2.5, '$r.get == 2.5';
is $r.get, EMPTY, '$r.get is done';
is $r.get, EMPTY, '$r.get is still done';
my $r = (-1.5.Num^..3).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.count-only, 4, '$r.count-only works';
is $r.pull-one, -.5, '$r.pull-one == -0.5 and Range Iterator kept place';
is $r.pull-one, .5, '$r.pull-one == .5';
is $r.pull-one, 1.5, '$r.pull-one == 1.5';
is $r.pull-one, 2.5, '$r.pull-one == 2.5';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is done';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is still done';
}

{
my $r = RangeIter.new(-1..*);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -1, '$r.get == -1';
is $r.get, 0, '$r.get == 0';
is $r.get, 1, '$r.get == 1';
is $r.get, 2, '$r.get == 2';
is $r.get, 3, '$r.get == 3';
is $r.get, 4, '$r.get == 4';
is $r.get, 5, '$r.get == 5';
my $r = (-1..*).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
ok $r.is-lazy, '$r.is-lazy works';
is $r.pull-one, -1, '$r.pull-one == -1 and Range Iterator kept place';
is $r.pull-one, 0, '$r.pull-one == 0';
is $r.pull-one, 1, '$r.pull-one == 1';
is $r.pull-one, 2, '$r.pull-one == 2';
is $r.pull-one, 3, '$r.pull-one == 3';
is $r.pull-one, 4, '$r.pull-one == 4';
is $r.pull-one, 5, '$r.pull-one == 5';
loop (my $i = 0; $i < 100; $i++) {
$r.get; # 6 through 105
$r.pull-one; # 6 through 105
}
is $r.get, 106, '$r.get == 106';
is $r.pull-one, 106, '$r.pull-one == 106';
}

{
my $r = RangeIter.new(-1.5.Num..*);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -1.5, '$r.get == -1.5';
is $r.get, -.5, '$r.get == -0.5';
is $r.get, .5, '$r.get == .5';
is $r.get, 1.5, '$r.get == 1.5';
is $r.get, 2.5, '$r.get == 2.5';
is $r.get, 3.5, '$r.get == 3.5';
is $r.get, 4.5, '$r.get == 4.5';
my $r = (-1.5.Num..*).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
ok $r.is-lazy, '$r.is-lazy works';
is $r.pull-one, -1.5, '$r.pull-one == -1.5 and Range Iterator kept place';
is $r.pull-one, -.5, '$r.pull-one == -0.5';
is $r.pull-one, .5, '$r.pull-one == .5';
is $r.pull-one, 1.5, '$r.pull-one == 1.5';
is $r.pull-one, 2.5, '$r.pull-one == 2.5';
is $r.pull-one, 3.5, '$r.pull-one == 3.5';
is $r.pull-one, 4.5, '$r.pull-one == 4.5';
}

{
my $r = RangeIter.new(-1.5..*);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, -1.5, '$r.get == -1.5';
is $r.get, -.5, '$r.get == -0.5';
is $r.get, .5, '$r.get == .5';
is $r.get, 1.5, '$r.get == 1.5';
is $r.get, 2.5, '$r.get == 2.5';
is $r.get, 3.5, '$r.get == 3.5';
is $r.get, 4.5, '$r.get == 4.5';
my $r = (-1.5..*).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
ok $r.is-lazy, '$r.is-lazy works';
is $r.pull-one, -1.5, '$r.pull-one == -1.5 and Range Iterator kept place';
is $r.pull-one, -.5, '$r.pull-one == -0.5';
is $r.pull-one, .5, '$r.pull-one == .5';
is $r.pull-one, 1.5, '$r.pull-one == 1.5';
is $r.pull-one, 2.5, '$r.pull-one == 2.5';
is $r.pull-one, 3.5, '$r.pull-one == 3.5';
is $r.pull-one, 4.5, '$r.pull-one == 4.5';
}

{
# Make sure we can read two different RangeIters at the same time.
# Make sure we can read two different Iterators at the same time.
# (May sound like an odd test, but as I type this, if Range iteration
# were implemented with gather/take, this test would fail.)
my $r1 = RangeIter.new(-1..*);
my $r2 = RangeIter.new(42..*);
isa-ok $r1, RangeIter, '$r1 is a RangeIter';
isa-ok $r2, RangeIter, '$r2 is a RangeIter';
is $r1.get, -1, '$r1.get == -1';
is $r2.get, 42, '$r2.get == 42';
is $r1.get, 0, '$r1.get == 0';
is $r2.get, 43, '$r2.get == 43';
is $r1.get, 1, '$r1.get == 1';
is $r2.get, 44, '$r2.get == 44';
is $r1.get, 2, '$r1.get == 2';
is $r2.get, 45, '$r2.get == 45';
is $r1.get, 3, '$r1.get == 3';
is $r2.get, 46, '$r2.get == 46';
is $r1.get, 4, '$r1.get == 4';
is $r2.get, 47, '$r2.get == 47';
is $r1.get, 5, '$r1.get == 5';
is $r2.get, 48, '$r2.get == 48';
my $r1 = (-1..*).iterator;
my $r2 = (42..*).iterator;
ok $r1 ~~ Iterator, '$r1 is an Iterator';
ok $r2 ~~ Iterator, '$r2 is an Iterator';
is $r1.pull-one, -1, '$r1.pull-one == -1';
is $r2.pull-one, 42, '$r2.pull-one == 42';
is $r1.pull-one, 0, '$r1.pull-one == 0';
is $r2.pull-one, 43, '$r2.pull-one == 43';
is $r1.pull-one, 1, '$r1.pull-one == 1';
is $r2.pull-one, 44, '$r2.pull-one == 44';
is $r1.pull-one, 2, '$r1.pull-one == 2';
is $r2.pull-one, 45, '$r2.pull-one == 45';
is $r1.pull-one, 3, '$r1.pull-one == 3';
is $r2.pull-one, 46, '$r2.pull-one == 46';
is $r1.pull-one, 4, '$r1.pull-one == 4';
is $r2.pull-one, 47, '$r2.pull-one == 47';
is $r1.pull-one, 5, '$r1.pull-one == 5';
is $r2.pull-one, 48, '$r2.pull-one == 48';
}

{
my $r = RangeIter.new('d'..'g');
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, 'd', '$r.get == d';
is $r.get, 'e', '$r.get == e';
is $r.get, 'f', '$r.get == f';
is $r.get, 'g', '$r.get == g';
is $r.get, EMPTY, '$r.get is done';
is $r.get, EMPTY, '$r.get is still done';
my $r = ('d'..'g').iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.count-only, 4, '$r.count-only works';
is $r.pull-one, 'd', '$r.pull-one == d and Range Iterator kept place';
is $r.pull-one, 'e', '$r.pull-one == e';
is $r.pull-one, 'f', '$r.pull-one == f';
is $r.pull-one, 'g', '$r.pull-one == g';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is done';
is $r.pull-one.WHICH, IterationEnd.WHICH, '$r.pull-one is still done';
}

{
my $r = RangeIter.new('d'..*);
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, 'd', '$r.get == d';
is $r.get, 'e', '$r.get == e';
is $r.get, 'f', '$r.get == f';
is $r.get, 'g', '$r.get == g';
is $r.get, 'h', '$r.get == h';
is $r.get, 'i', '$r.get == i';
my $r = ('d'..*).iterator;
ok $r ~~ Iterator, '$r is an Iterator';
ok $r.is-lazy, '$r.is-lazy works';
is $r.pull-one, 'd', '$r.pull-one == d and Range Iterator kept place';
is $r.pull-one, 'e', '$r.pull-one == e';
is $r.pull-one, 'f', '$r.pull-one == f';
is $r.pull-one, 'g', '$r.pull-one == g';
is $r.pull-one, 'h', '$r.pull-one == h';
is $r.pull-one, 'i', '$r.pull-one == i';
}

{
my $r = RangeIter.new(0..'50');
isa-ok $r, RangeIter, '$r is a RangeIter';
is $r.get, 0, '$r.get == 0';
is $r.get, 1, '$r.get == 1';
is $r.get, 2, '$r.get == 2';
is $r.get, 3, '$r.get == 3';
is $r.get, 4, '$r.get == 4';
is $r.get, 5, '$r.get == 5';
#?rakudo 2 todo "Mixing Int and Str doesn't work yet"
is $r.get, 6, '$r.get == 6';
is $r.get, 7, '$r.get == 7';
my $r = (0..'50').iterator;
ok $r ~~ Iterator, '$r is an Iterator';
is $r.pull-one, 0, '$r.pull-one == 0';
is $r.pull-one, 1, '$r.pull-one == 1';
is $r.pull-one, 2, '$r.pull-one == 2';
is $r.pull-one, 3, '$r.pull-one == 3';
is $r.count-only, 47, '$r.count-only works partially through';
is $r.pull-one, 4, '$r.pull-one == 4 and Range Iterator kept place';
is $r.pull-one, 5, '$r.pull-one == 5';
is $r.pull-one, 6, '$r.pull-one == 6';
is $r.pull-one, 7, '$r.pull-one == 7';
}

0 comments on commit 4647043

Please sign in to comment.