]> gitweb.factorcode.org Git - factor.git/blob - extra/generators/generators-tests.factor
Switch to https urls
[factor.git] / extra / generators / generators-tests.factor
1 ! Copyright (C) 2023 Keldan Chapman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: tools.test generators kernel coroutines ;
4 IN: generators.tests
5
6 { } [ [ ] assert-no-inputs ] unit-test
7 { } [ [ 1 2 3 ] assert-no-inputs ] unit-test
8 [ [ dup ] assert-no-inputs ] [ has-inputs? ] must-fail-with
9
10 { t } [ [ ] generator new gen-coroutine coroutine? ] unit-test
11
12 { t } [ [ ] <generator> generator? ] unit-test
13
14 GEN: no-inp-gen ( -- g ) 1 yield 2 yield 3 yield ;
15 GEN: inp-gen ( x y -- g ) over yield yield yield ;
16 GEN:: no-inp-loc-gen ( -- g ) 1 yield 2 yield 3 yield ;
17 GEN:: inp-loc-gen ( x y -- g ) x yield y yield x yield ;
18 GEN: next*-gen ( -- g ) 1 yield* yield* yield* ;
19
20 { 1 2 } [ no-inp-gen [ next ] [ next ] bi ] unit-test
21 { 1 2 } [ 1 2 inp-gen [ next ] [ next ] bi ] unit-test
22 { 1 2 } [ no-inp-loc-gen [ next ] [ next ] bi ] unit-test
23 { 1 2 } [ 1 2 inp-loc-gen [ next ] [ next ] bi ] unit-test
24 { 1 2 } [ [ 1 yield 2 yield ] <generator> [ next ] [ next ] bi ] unit-test
25 [ [ ] <generator> next ] [ stop-generator? ] must-fail-with
26
27 { 1 2 3 } [ next*-gen [ next ] [ 2 swap next* ] [ 3 swap next* ] tri ] unit-test
28
29 { 2 } [ no-inp-gen [ skip ] [ next ] bi ] unit-test
30 { 1 3 } [ next*-gen [ next ] [ 2 swap skip* ] [ 3 swap next* ] tri ] unit-test
31
32 { t } [ [ [ ] <generator> next ] [ t ] catch-stop-generator ] unit-test
33 { t } [ [ no-inp-gen next drop t ] [ f ] catch-stop-generator ] unit-test
34
35 { 1 f } [ no-inp-gen ?next ] unit-test
36 { f t } [ [ ] <generator> ?next ] unit-test
37
38 { 1 2 f } [ next*-gen [ next ] [ 2 swap ?next* ] bi ] unit-test
39 { f t } [ 2 [ ] <generator> ?next* ] unit-test
40
41 { { } } [ no-inp-gen 0 take ] unit-test
42 { { 1 2 } } [ no-inp-gen 2 take ] unit-test
43 { { 1 2 3 } } [ no-inp-gen 10 take ] unit-test
44
45 { { 1 2 3 } } [ no-inp-gen take-all ] unit-test
46 { { } } [ [ ] <generator> take-all ] unit-test
47
48 GEN: yf-test ( -- g ) no-inp-gen yield-from no-inp-gen yield-from ;
49 { { 1 2 3 1 2 3 } } [ yf-test take-all ] unit-test
50
51 { t } [ no-inp-gen [ take-all drop ] [ exhausted? ] bi ] unit-test
52 { f } [ no-inp-gen exhausted? ] unit-test