Skip to content

Commit fe93c11

Browse files
authored
Test some basic runtime functions (#83)
1 parent 0fc25d9 commit fe93c11

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

basilisp/lang/seq.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ class _EmptySequence(Seq[T]):
110110
def __repr__(self):
111111
return '()'
112112

113+
def __bool__(self):
114+
return False
115+
113116
@property
114117
def first(self):
115118
return None

tests/runtime_test.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import basilisp.lang.keyword as keyword
2+
import basilisp.lang.list as llist
3+
import basilisp.lang.runtime as runtime
4+
import basilisp.lang.seq as lseq
5+
import basilisp.lang.vector as vec
6+
7+
8+
def test_first():
9+
assert None is runtime.first(None)
10+
assert None is runtime.first(llist.l())
11+
assert 1 == runtime.first(llist.l(1))
12+
assert 1 == runtime.first(llist.l(1, 2, 3))
13+
assert 1 == runtime.first(vec.v(1).seq())
14+
assert 1 == runtime.first(vec.v(1))
15+
assert 1 == runtime.first(vec.v(1, 2, 3))
16+
17+
18+
def test_rest():
19+
assert None is runtime.rest(None)
20+
assert llist.l() == runtime.rest(llist.l())
21+
assert llist.l() == runtime.rest(llist.l(1))
22+
assert llist.l(2, 3) == runtime.rest(llist.l(1, 2, 3))
23+
assert llist.l() == runtime.rest(vec.v(1).seq())
24+
assert llist.l() == runtime.rest(vec.v(1))
25+
assert llist.l(2, 3) == runtime.rest(vec.v(1, 2, 3))
26+
27+
28+
def test_next():
29+
assert None is runtime.next(None)
30+
assert None is runtime.next(llist.l())
31+
assert None is runtime.next(llist.l(1))
32+
assert llist.l(2, 3) == runtime.next(llist.l(1, 2, 3))
33+
assert None is runtime.next(vec.v(1).seq())
34+
assert None is runtime.next(vec.v(1))
35+
assert llist.l(2, 3) == runtime.next(vec.v(1, 2, 3))
36+
37+
38+
def test_cons():
39+
assert llist.l(None) == runtime.cons(None, None)
40+
assert llist.l(1) == runtime.cons(1, None)
41+
assert llist.l(1) == runtime.cons(1, llist.l())
42+
assert llist.l(1, 2, 3) == runtime.cons(1, llist.l(2, 3))
43+
assert llist.l(1, 2, 3) == runtime.cons(1, vec.v(2, 3))
44+
assert llist.l(1, 2, 3) == runtime.cons(1, vec.v(2, 3).seq())
45+
46+
47+
def test_to_seq():
48+
assert None is runtime.to_seq(None)
49+
50+
empty_list = llist.List.empty()
51+
assert empty_list == runtime.to_seq(empty_list)
52+
53+
one_elem = llist.l(keyword.keyword('kw'))
54+
assert one_elem == runtime.to_seq(one_elem)
55+
56+
seqable = vec.v(keyword.keyword('kw'))
57+
assert seqable == runtime.to_seq(seqable)
58+
59+
v1 = vec.v(keyword.keyword('kw'), 1, llist.l("something"), 3)
60+
s1 = runtime.to_seq(v1)
61+
assert isinstance(s1, lseq.Seq)
62+
for v, s in zip(v1, s1):
63+
assert v == s
64+
65+
py_list = [1, 2, 3]
66+
assert llist.l(1, 2, 3) == runtime.to_seq(py_list)
67+
68+
69+
def test_concat():
70+
s1 = runtime.concat()
71+
assert llist.l() == s1
72+
73+
s1 = runtime.concat(llist.List.empty(), llist.List.empty())
74+
assert llist.l() == s1
75+
76+
s1 = runtime.concat(llist.List.empty(), llist.l(1, 2, 3))
77+
assert s1 == llist.l(1, 2, 3)
78+
79+
s1 = runtime.concat(llist.l(1, 2, 3), vec.v(4, 5, 6))
80+
assert s1 == llist.l(1, 2, 3, 4, 5, 6)
81+
82+
83+
def test_apply():
84+
assert vec.v() == runtime.apply(vec.v, [[]])
85+
assert vec.v(1, 2, 3) == runtime.apply(vec.v, [[1, 2, 3]])
86+
assert vec.v(vec.v(1, 2, 3), 4, 5, 6) == runtime.apply(vec.v, [vec.v(1, 2, 3), [4, 5, 6]])

0 commit comments

Comments
 (0)