Skip to content

Commit 51ebe45

Browse files
committed
lazy-lists.t updated, new tests: first, grep, X, Z
1 parent ee62bc1 commit 51ebe45

File tree

1 file changed

+65
-26
lines changed

1 file changed

+65
-26
lines changed

S02-types/lazy-lists.t

Lines changed: 65 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ use v6;
44

55
# Tests for lazy lists
66
#
7-
# TODO - uncomment "countable lazy slice" test
87
# TODO - add timeout control, in tests that may loop forever
98
# TODO - the backends that don't have infinite lists implemented
109
# should warn of this, instead of entering an infinite loop.
11-
# TODO - add test for "build a list from a coroutine"
12-
# TODO - add test for zip()
1310
# TODO - add test for 2D array
1411

12+
# TODO - there used to be tests here (that were never run) for deleting
13+
# elements from a lazy list. Can't seem to reproduce them with
14+
# current spec.
15+
1516
use Test;
1617

17-
plan 12;
18+
plan 19;
1819

1920

2021
#?pugs emit unless $?PUGS_BACKEND eq "BACKEND_PERL5" {
@@ -27,26 +28,21 @@ plan 12;
2728
{
2829
my @a = (1..Inf);
2930
is( @a.splice( 2, 3 ),
30-
"(3, 4, 5)",
31+
(3, 4, 5),
3132
"splice" );
3233
}
3334

3435
# basic list operations
3536

36-
is( (1..Inf).elems,
37+
is( (1...Inf).elems,
3738
Inf,
3839
"elems" );
3940

40-
is( (1..Inf).shift,
41+
is( (1...Inf).shift,
4142
1,
4243
"shift" );
4344

44-
is( (1..Inf).pop,
45-
Inf,
46-
"pop" );
47-
48-
49-
is( (1..Inf)[2..5],
45+
is( (1...Inf)[2..5],
5046
[3, 4, 5, 6],
5147
"simple slice" );
5248

@@ -71,7 +67,7 @@ is( (1..Inf)[2..5],
7167
{
7268
my @a = (1..Inf);
7369
@a[1] = 99;
74-
is @a[0, 1, 2].join(' '), '1 99 2', 'assignment to infinite list';
70+
is @a[0, 1, 2].join(' '), '1 99 3', 'assignment to infinite list';
7571
}
7672

7773
{
@@ -84,24 +80,67 @@ is( (1..Inf)[2..5],
8480

8581
{
8682
my @a = (1..Inf);
87-
@a[1].delete;
88-
is ~@a[0, 2], '1 3', 'array elemente delete (1)';
89-
nok @a[1].defined, 'array element delete (2)';
83+
@a[1..10002] = @a[9..10010];
84+
is( ~@a[0, 1, 2],
85+
'1 10 11',
86+
"big slice assignment" );
9087
}
9188

89+
my $was-lazy = 1;
90+
sub make-lazy-list($num) { gather { take $_ for 0..^$num; $was-lazy = 0 } };
91+
9292
{
93-
my @a = (1..Inf);
94-
@a[0,1].delete;
95-
nok( all(@a[0, 1]).defined,
96-
"array slice delete()" );
93+
$was-lazy = 1;
94+
my @a = make-lazy-list(4);
95+
nok $was-lazy, "sanity: make-lazy-list sets $was-lazy.";
96+
$was-lazy = 1;
97+
my @b := make-lazy-list(4);
98+
ok $was-lazy, "sanity: binding won't slurp up the lazy list";
9799
}
98100

99101
{
100-
my @a = (1..Inf);
101-
@a[1..1000002] = @a[9..1000010];
102-
is( ~@a[0, 1, 2],
103-
'1 10 11',
104-
"big slice assignment" );
102+
$was-lazy = 1;
103+
my @one := make-lazy-list(10);
104+
is @one.first(*.is-prime), 2, "sanity: first is-prime is 2";
105+
ok $was-lazy, "first is lazy";
106+
}
107+
108+
{
109+
$was-lazy = 1;
110+
my @one := make-lazy-list(10);
111+
is @one.grep(*.is-prime)[^3], (2, 3, 5), "sanity: first three primes are 2, 3 and 5";
112+
ok $was-lazy, "grep is lazy";
113+
}
114+
115+
{
116+
$was-lazy = 1;
117+
my @one := make-lazy-list(10);
118+
is @one.map({ $^num * 2 })[^3], (0, 2, 4), "sanity: first three numbers doubled are 0, 2, 4";
119+
ok $was-lazy, "map is lazy";
120+
}
121+
122+
{
123+
$was-lazy = 1;
124+
my @one := make-lazy-list(10);
125+
my @two = <a b c d e f>;
126+
my @res = (@one Z @two)[^3];
127+
ok $was-lazy, "first argument of Z is lazy";
128+
}
129+
130+
{
131+
$was-lazy = 1;
132+
my @two := make-lazy-list(10);
133+
my @one = <a b c d e f>;
134+
my @res = (@one Z @two)[^3];
135+
ok $was-lazy, "second argument of Z is lazy";
136+
}
137+
138+
{
139+
$was-lazy = 1;
140+
my @one := make-lazy-list(10);
141+
my @two = <a b c d e f>;
142+
my @res = (@one X @two)[^20];
143+
ok $was-lazy, "first argument of X is lazy";
105144
}
106145

107146
# vim: ft=perl6

0 commit comments

Comments
 (0)