blob: e1fbab683bc37d861ae0aaed635068850663da4d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
(defpackage :gtwiwtg-test
(:use :cl :gtwiwtg))
(in-package :gtwiwtg-test)
(defun gtwiwtg::test-resumables ()
(let ((foobar
(make-resumable! (range))))
(take 10 foobar)
(setf foobar (resume! foobar))
(assert (equal (take 10 foobar)
'(10 11 12 13 14 15 16 17 18 19)))))
(defun gtwiwtg::test-inflate! ()
(let* ((keys (seq '(:name :occupation :hobbies)))
(vals (seq '("Buckaroo Banzai"
"Rocker"
("Neuroscience" "Particle Physics" "Piloting Fighter Jets")))))
(assert
(equal (collect (inflate! #'seq (zip! keys vals)))
'(:name "Buckaroo Banzai"
:occupation "Rocker"
:hobbies ("Neuroscience" "Particle Physics" "Piloting Fighter Jets"))))))
(defun gtwiwtg::test-concat! ()
(equal
'(1 2 3 a b c :e :f :g)
(collect (concat! (range :from 1 :to 4)
(seq '(a b c))
(seq '(:e :f :g))))))
(defun gtwiwtg::test-merge! ()
(assert (equal
'(-10 -4 0 1 2 2 3 4 6 8 8 14 20 26)
(collect
(merge! #'<
(times 4)
(range :from 4 :to 10 :by 2)
(range :from -10 :to 28 :by 6))))))
(defun gtwiwtg::test-intersperse! ()
(assert
(equal
'(:NAME "buckaroo banzai" :JOB "rocker" :HOBBIES
("neuroscience" "particle physics" "flying fighter jets"))
(collect
(intersperse! (seq '(:name :job :hobbies))
(seq '("buckaroo banzai"
"rocker"
("neuroscience"
"particle physics"
"flying fighter jets"))))))))
(defun gtwiwtg::test-collect ()
(assert (equal '(1 2 3 4) (collect (range :from 1 :to 4 :inclusive t))))
(assert (equal '(1 2 3 4) (collect (range :from 1 :to 5))))
(assert (equal '((1 #\a) (2 #\b) (3 #\c))
(collect
(zip! (range :from 1)
(seq "abc")))))
(assert (null (collect (seq ())))))
(defun gtwiwtg::test-take ()
(assert (null (take 100 (seq ""))))
(assert (equal '(#\a #\b #\c) (take 100 (seq "abc"))))
(assert (equal '(#\a #\b) (take 2 (seq "abcdefg")))))
(defun gtwiwtg::test-pick-out ()
(assert
(equal '(40 30 20)
(pick-out '(3 2 1)
(range :from 10 :by 10))))
(assert
(equal '(101)
(pick-out '(101)
(range)))))
(defun gtwiwtg::test-argmax ()
(assert (equal '(-10 . 100)
(argmax (lambda (x) (* x x))
(seq '(1 -10 3 4 -4))))))
(defun gtwiwtg::test-argmin ()
(assert (equal '(1 . 1)
(argmin (lambda (x) (* x x))
(seq '(1 -10 3 4 -4))))))
|