示例#1
0
def test_seq_equals():
    # to_seq should be first to ensure that `ISeq.__eq__` is used
    assert runtime.to_seq(vec.v(1, 2, 3)) == llist.l(1, 2, 3)
    assert False is (runtime.to_seq(vec.v(1, 2, 3)) == kw.keyword("abc"))

    assert lseq.sequence(vec.v(1, 2, 3)) == llist.l(1, 2, 3)
    assert False is (lseq.sequence(vec.v(1, 2, 3)) == kw.keyword("abc"))
示例#2
0
def test_rest():
    assert lseq.EMPTY is runtime.rest(None)
    assert lseq.EMPTY is runtime.rest(llist.l())
    assert lseq.EMPTY is runtime.rest(llist.l(1))
    assert llist.l(2, 3) == runtime.rest(llist.l(1, 2, 3))
    assert lseq.EMPTY is runtime.rest(vec.v(1).seq())
    assert lseq.EMPTY is runtime.rest(vec.v(1))
    assert llist.l(2, 3) == runtime.rest(vec.v(1, 2, 3))
示例#3
0
def test_next():
    assert None is runtime.next_(None)
    assert None is runtime.next_(llist.l())
    assert None is runtime.next_(llist.l(1))
    assert llist.l(2, 3) == runtime.next_(llist.l(1, 2, 3))
    assert None is runtime.next_(vec.v(1).seq())
    assert None is runtime.next_(vec.v(1))
    assert llist.l(2, 3) == runtime.next_(vec.v(1, 2, 3))
示例#4
0
def test_first():
    assert None is runtime.first(None)
    assert None is runtime.first(llist.l())
    assert 1 == runtime.first(llist.l(1))
    assert 1 == runtime.first(llist.l(1, 2, 3))
    assert 1 == runtime.first(vec.v(1).seq())
    assert 1 == runtime.first(vec.v(1))
    assert 1 == runtime.first(vec.v(1, 2, 3))
示例#5
0
def test_to_sequence():
    assert lseq.EMPTY is lseq.sequence([])
    assert lseq.sequence([]).is_empty
    assert llist.l(None) == lseq.sequence([None])
    assert not lseq.sequence([None]).is_empty
    assert llist.l(1) == lseq.sequence([1])
    assert not lseq.sequence([1]).is_empty
    assert llist.l(1, 2, 3) == lseq.sequence([1, 2, 3])
    assert not lseq.sequence([1, 2, 3]).is_empty
示例#6
0
def test_list_cons():
    meta = lmap.m(tag="async")
    l1 = llist.l(keyword("kw1"), meta=meta)
    l2 = l1.cons(keyword("kw2"))
    assert l1 is not l2
    assert l1 != l2
    assert l2 == llist.l(keyword("kw2"), keyword("kw1"))
    assert len(l2) == 2
    assert meta == l1.meta
    assert l2.meta is None
    l3 = l2.cons(3, "four")
    assert l3 == llist.l("four", 3, keyword("kw2"), keyword("kw1"))
示例#7
0
def test_concat():
    s1 = runtime.concat()
    assert lseq.EMPTY is s1

    s1 = runtime.concat(llist.PersistentList.empty(), llist.PersistentList.empty())
    assert lseq.EMPTY == s1

    s1 = runtime.concat(llist.PersistentList.empty(), llist.l(1, 2, 3))
    assert s1 == llist.l(1, 2, 3)

    s1 = runtime.concat(llist.l(1, 2, 3), vec.v(4, 5, 6))
    assert s1 == llist.l(1, 2, 3, 4, 5, 6)
示例#8
0
    def test_to_list(self):
        assert [] == runtime.to_py(llist.PersistentList.empty())
        assert ["a", 2] == runtime.to_py(llist.l("a", 2))
        assert ["a", 2, None] == runtime.to_py(llist.l("a", 2, None))

        assert [] == runtime.to_py(vec.PersistentVector.empty())
        assert ["a", 2] == runtime.to_py(vec.v("a", 2))
        assert ["a", 2, None] == runtime.to_py(vec.v("a", 2, None))

        assert None is runtime.to_py(runtime.to_seq(vec.PersistentVector.empty()))
        assert ["a", 2] == runtime.to_py(runtime.to_seq(vec.v("a", 2)))
        assert ["a", 2, None] == runtime.to_py(runtime.to_seq(vec.v("a", 2, None)))
示例#9
0
def test_cons():
    assert llist.l(None) == runtime.cons(None, None)
    assert llist.l(1) == runtime.cons(1, None)
    assert llist.l(1) == runtime.cons(1, llist.l())
    assert llist.l(1, 2, 3) == runtime.cons(1, llist.l(2, 3))
    assert llist.l(1, 2, 3) == runtime.cons(1, vec.v(2, 3))
    assert llist.l(1, 2, 3) == runtime.cons(1, vec.v(2, 3).seq())
示例#10
0
def test_sequence():
    s = lseq.sequence([1])
    assert not s.is_empty
    assert 1 == s.first
    assert lseq.EMPTY is s.rest
    assert llist.l(2, 1) == s.cons(2)
    assert [1, 2, 3] == [e for e in lseq.sequence([1, 2, 3])]
    assert llist.l(1, 2, 3) == lseq.sequence([1, 2, 3])
    assert llist.l(1, 2, 3) == lseq.sequence(llist.l(1, 2, 3))
    assert llist.l(1, 2, 3) == llist.list(lseq.sequence([1, 2, 3]))

    s = lseq.sequence([1, 2, 3])
    assert not s.is_empty
    assert 2 == s.rest.first
    assert 3 == s.rest.rest.first
    assert None is s.rest.rest.rest.first
示例#11
0
def test_empty_sequence():
    empty = lseq.sequence([])
    assert empty.is_empty
    assert None is empty.first
    assert empty.rest == empty
    assert llist.l(1) == empty.cons(1)
    assert lseq.EMPTY is empty
    assert True is bool(lseq.sequence([]))
示例#12
0
def test_pop():
    with pytest.raises(IndexError):
        llist.l().pop()

    assert llist.PersistentList.empty() == llist.l(1).pop()
    assert llist.l(2) == llist.l(1, 2).pop()
    assert llist.l(2, 3) == llist.l(1, 2, 3).pop()
示例#13
0
def test_nthnext():
    assert None is runtime.nthnext(None, 1)

    assert None is runtime.nthnext(llist.PersistentList.empty(), 0)
    assert lseq.sequence([2, 3, 4, 5, 6]) == runtime.nthnext(
        llist.l(1, 2, 3, 4, 5, 6), 1
    )
    assert lseq.sequence([3, 4, 5, 6]) == runtime.nthnext(llist.l(1, 2, 3, 4, 5, 6), 2)
    assert lseq.sequence([4, 5, 6]) == runtime.nthnext(llist.l(1, 2, 3, 4, 5, 6), 3)
    assert lseq.sequence([5, 6]) == runtime.nthnext(llist.l(1, 2, 3, 4, 5, 6), 4)
    assert lseq.sequence([6]) == runtime.nthnext(llist.l(1, 2, 3, 4, 5, 6), 5)

    assert None is runtime.nthnext(vec.PersistentVector.empty(), 0)
    assert lseq.sequence([2, 3, 4, 5, 6]) == runtime.nthnext(vec.v(1, 2, 3, 4, 5, 6), 1)
    assert lseq.sequence([3, 4, 5, 6]) == runtime.nthnext(vec.v(1, 2, 3, 4, 5, 6), 2)
    assert lseq.sequence([4, 5, 6]) == runtime.nthnext(vec.v(1, 2, 3, 4, 5, 6), 3)
    assert lseq.sequence([5, 6]) == runtime.nthnext(vec.v(1, 2, 3, 4, 5, 6), 4)
    assert lseq.sequence([6]) == runtime.nthnext(vec.v(1, 2, 3, 4, 5, 6), 5)
示例#14
0
def test_get():
    assert None is runtime.get(None, "a")
    assert kw.keyword("nada") is runtime.get(None, "a", kw.keyword("nada"))
    assert None is runtime.get(3, "a")
    assert kw.keyword("nada") is runtime.get(3, "a", kw.keyword("nada"))
    assert 1 == runtime.get(lmap.map({"a": 1}), "a")
    assert None is runtime.get(lmap.map({"a": 1}), "b")
    assert 2 == runtime.get(lmap.map({"a": 1}), "b", 2)
    assert 1 == runtime.get(lmap.map({"a": 1}).to_transient(), "a")
    assert None is runtime.get(lmap.map({"a": 1}).to_transient(), "b")
    assert 2 == runtime.get(lmap.map({"a": 1}).to_transient(), "b", 2)
    assert 1 == runtime.get(vec.v(1, 2, 3), 0)
    assert None is runtime.get(vec.v(1, 2, 3), 3)
    assert "nada" == runtime.get(vec.v(1, 2, 3), 3, "nada")
    assert 1 == runtime.get(vec.v(1, 2, 3).to_transient(), 0)
    assert None is runtime.get(vec.v(1, 2, 3).to_transient(), 3)
    assert "nada" == runtime.get(vec.v(1, 2, 3).to_transient(), 3, "nada")
    assert "l" == runtime.get("hello world", 2)
    assert None is runtime.get("hello world", 50)
    assert "nada" == runtime.get("hello world", 50, "nada")
    assert "l" == runtime.get(["h", "e", "l", "l", "o"], 2)
    assert None is runtime.get(["h", "e", "l", "l", "o"], 50)
    assert "nada" == runtime.get(["h", "e", "l", "l", "o"], 50, "nada")
    assert 1 == runtime.get({"a": 1}, "a")
    assert None is runtime.get({"a": 1}, "b")
    assert 2 == runtime.get({"a": 1}, "b", 2)
    assert "a" == runtime.get({"a", "b", "c"}, "a")
    assert None is runtime.get({"a", "b", "c"}, "d")
    assert 2 == runtime.get({"a", "b", "c"}, "d", 2)
    assert "a" == runtime.get(frozenset({"a", "b", "c"}), "a")
    assert None is runtime.get(frozenset({"a", "b", "c"}), "d")
    assert 2 == runtime.get(frozenset({"a", "b", "c"}), "d", 2)
    assert "a" == runtime.get(lset.set({"a", "b", "c"}), "a")
    assert None is runtime.get(lset.set({"a", "b", "c"}), "d")
    assert 2 == runtime.get(lset.set({"a", "b", "c"}), "d", 2)
    assert "a" == runtime.get(lset.set({"a", "b", "c"}).to_transient(), "a")
    assert None is runtime.get(lset.set({"a", "b", "c"}).to_transient(), "d")
    assert 2 == runtime.get(lset.set({"a", "b", "c"}).to_transient(), "d", 2)

    # lists are "supported" by virtue of the fact that `get`-ing them does not fail
    assert None is runtime.get(llist.l(1, 2, 3), 0)
    assert None is runtime.get(llist.l(1, 2, 3), 3)
    assert "nada" == runtime.get(llist.l(1, 2, 3), 0, "nada")
示例#15
0
def test_list_with_meta():
    l1 = llist.l("vec")
    assert l1.meta is None

    meta1 = lmap.m(type=symbol("str"))
    l2 = llist.l("vec", meta=meta1)
    assert l2.meta == meta1

    meta2 = lmap.m(tag=keyword("async"))
    l3 = l2.with_meta(meta2)
    assert l2 is not l3
    assert l2 == l3
    assert l3.meta == lmap.m(tag=keyword("async"))

    meta3 = lmap.m(tag=keyword("macro"))
    l4 = l3.with_meta(meta3)
    assert l3 is not l4
    assert l3 == l4
    assert l4.meta == lmap.m(tag=keyword("macro"))
示例#16
0
def test_to_seq():
    assert None is runtime.to_seq(None)
    assert None is runtime.to_seq(llist.PersistentList.empty())
    assert None is runtime.to_seq(vec.PersistentVector.empty())
    assert None is runtime.to_seq(lmap.PersistentMap.empty())
    assert None is runtime.to_seq(lset.PersistentSet.empty())
    assert None is runtime.to_seq("")

    assert None is not runtime.to_seq(llist.l(None))
    assert None is not runtime.to_seq(llist.l(None, None, None))
    assert None is not runtime.to_seq(llist.l(1))
    assert None is not runtime.to_seq(vec.v(1))
    assert None is not runtime.to_seq(lmap.map({"a": 1}))
    assert None is not runtime.to_seq(lset.s(1))
    assert None is not runtime.to_seq("string")

    one_elem = llist.l(kw.keyword("kw"))
    assert one_elem == runtime.to_seq(one_elem)

    seqable = vec.v(kw.keyword("kw"))
    assert seqable == runtime.to_seq(seqable)

    v1 = vec.v(kw.keyword("kw"), 1, llist.l("something"), 3)
    s1 = runtime.to_seq(v1)
    assert isinstance(s1, ISeq)
    for v, s in zip(v1, s1):
        assert v == s

    py_list = [1, 2, 3]
    assert llist.l(1, 2, 3) == runtime.to_seq(py_list)
示例#17
0
def test_nth():
    assert None is runtime.nth(None, 1)
    assert "not found" == runtime.nth(None, 4, "not found")
    assert "l" == runtime.nth("hello world", 2)
    assert "l" == runtime.nth(["h", "e", "l", "l", "o"], 2)
    assert "l" == runtime.nth(llist.l("h", "e", "l", "l", "o"), 2)
    assert "l" == runtime.nth(vec.v("h", "e", "l", "l", "o"), 2)
    assert "l" == runtime.nth(lseq.sequence(["h", "e", "l", "l", "o"]), 2)

    assert "Z" == runtime.nth(llist.l("h", "e", "l", "l", "o"), 7, "Z")
    assert "Z" == runtime.nth(lseq.sequence(["h", "e", "l", "l", "o"]), 7, "Z")
    assert "Z" == runtime.nth(vec.v("h", "e", "l", "l", "o"), 7, "Z")

    with pytest.raises(IndexError):
        runtime.nth(llist.l("h", "e", "l", "l", "o"), 7)

    with pytest.raises(IndexError):
        runtime.nth(lseq.sequence(["h", "e", "l", "l", "o"]), 7)

    with pytest.raises(IndexError):
        runtime.nth(vec.v("h", "e", "l", "l", "o"), 7)

    with pytest.raises(TypeError):
        runtime.nth(lmap.PersistentMap.empty(), 2)

    with pytest.raises(TypeError):
        runtime.nth(lmap.map({"a": 1, "b": 2, "c": 3}), 2)

    with pytest.raises(TypeError):
        runtime.nth(lset.PersistentSet.empty(), 2)

    with pytest.raises(TypeError):
        runtime.nth(lset.s(1, 2, 3), 2)

    with pytest.raises(TypeError):
        runtime.nth(3, 1)

    with pytest.raises(TypeError):
        runtime.nth(3, 1, "Z")
示例#18
0
def test_trampoline_args():
    args = runtime._TrampolineArgs(True)
    assert () == args.args

    args = runtime._TrampolineArgs(False, llist.l(2, 3, 4))
    assert (llist.l(2, 3, 4),) == args.args

    args = runtime._TrampolineArgs(True, llist.l(2, 3, 4))
    assert (2, 3, 4) == args.args

    args = runtime._TrampolineArgs(False, 1, 2, 3, llist.l(4, 5, 6))
    assert (1, 2, 3, llist.l(4, 5, 6)) == args.args

    args = runtime._TrampolineArgs(True, 1, 2, 3, llist.l(4, 5, 6))
    assert (1, 2, 3, 4, 5, 6) == args.args

    args = runtime._TrampolineArgs(True, 1, llist.l(2, 3, 4), 5, 6)
    assert (1, llist.l(2, 3, 4), 5, 6) == args.args
示例#19
0
    assert None is llist.l().first
    assert 1 == llist.l(1).first
    assert 1 == llist.l(1, 2).first


def test_list_rest():
    assert llist.l().rest == llist.l()
    assert llist.l(keyword("kw1")).rest == llist.l()
    assert llist.l(keyword("kw1"),
                   keyword("kw2")).rest == llist.l(keyword("kw2"))


@pytest.mark.parametrize(
    "o",
    [
        llist.l(),
        llist.l(keyword("kw1")),
        llist.l(keyword("kw1"), 2),
        llist.l(keyword("kw1"), 2, None, "nothingness"),
        llist.l(keyword("kw1"), llist.l("string", 4)),
    ],
)
def test_list_pickleability(pickle_protocol: int, o: llist.PersistentList):
    assert o == pickle.loads(pickle.dumps(o, protocol=pickle_protocol))


@pytest.mark.parametrize(
    "l,str_repr",
    [
        (llist.l(), "()"),
        (llist.l(keyword("kw1")), "(:kw1)"),
示例#20
0
def test_conj():
    assert llist.l(1) == runtime.conj(None, 1)
    assert llist.l(3, 2, 1) == runtime.conj(None, 1, 2, 3)
    assert llist.l(llist.l(1, 2, 3)) == runtime.conj(None, llist.l(1, 2, 3))

    assert llist.l(1) == runtime.conj(llist.PersistentList.empty(), 1)
    assert llist.l(3, 2, 1) == runtime.conj(llist.PersistentList.empty(), 1, 2, 3)
    assert llist.l(3, 2, 1, 1) == runtime.conj(llist.l(1), 1, 2, 3)
    assert llist.l(llist.l(1, 2, 3), 1) == runtime.conj(llist.l(1), llist.l(1, 2, 3))

    assert lset.s(1) == runtime.conj(lset.PersistentSet.empty(), 1)
    assert lset.s(1, 2, 3) == runtime.conj(lset.PersistentSet.empty(), 1, 2, 3)
    assert lset.s(1, 2, 3) == runtime.conj(lset.s(1), 1, 2, 3)
    assert lset.s(1, lset.s(1, 2, 3)) == runtime.conj(lset.s(1), lset.s(1, 2, 3))

    assert vec.v(1) == runtime.conj(vec.PersistentVector.empty(), 1)
    assert vec.v(1, 2, 3) == runtime.conj(vec.PersistentVector.empty(), 1, 2, 3)
    assert vec.v(1, 1, 2, 3) == runtime.conj(vec.v(1), 1, 2, 3)
    assert vec.v(1, vec.v(1, 2, 3)) == runtime.conj(vec.v(1), vec.v(1, 2, 3))

    assert lmap.map({"a": 1}) == runtime.conj(lmap.PersistentMap.empty(), ["a", 1])
    assert lmap.map({"a": 1, "b": 93}) == runtime.conj(
        lmap.PersistentMap.empty(), ["a", 1], ["b", 93]
    )
    assert lmap.map({"a": 1, "b": 93}) == runtime.conj(
        lmap.map({"a": 8}), ["a", 1], ["b", 93]
    )

    with pytest.raises(ValueError):
        runtime.conj(lmap.map({"a": 8}), "a", 1, "b", 93)

    with pytest.raises(TypeError):
        runtime.conj(3, 1, "a")

    with pytest.raises(TypeError):
        runtime.conj("b", 1, "a")
示例#21
0
def test_list_first():
    assert None is llist.PersistentList.empty().first
    assert None is llist.l().first
    assert 1 == llist.l(1).first
    assert 1 == llist.l(1, 2).first
示例#22
0
def test_list_interface_membership(interface):
    assert isinstance(llist.l(), interface)
    assert issubclass(llist.PersistentList, interface)
示例#23
0
def test_list_rest():
    assert llist.l().rest == llist.l()
    assert llist.l(keyword("kw1")).rest == llist.l()
    assert llist.l(keyword("kw1"),
                   keyword("kw2")).rest == llist.l(keyword("kw2"))
示例#24
0
def test_list_slice():
    assert isinstance(llist.l(1, 2, 3)[1:], llist.PersistentList)
示例#25
0
def test_peek():
    assert None is llist.l().peek()

    assert 1 == llist.l(1).peek()
    assert 1 == llist.l(1, 2).peek()
    assert 1 == llist.l(1, 2, 3).peek()
示例#26
0
def test_list_meta():
    assert llist.l("vec").meta is None
    meta = lmap.m(type=symbol("str"))
    assert llist.l("vec", meta=meta).meta == meta
示例#27
0
def test_list_seq():
    assert None is llist.PersistentList.empty().seq()
    assert llist.l(1) == llist.l(1).seq()
    assert llist.l(1, 2) == llist.l(1, 2).seq()
    assert llist.l(1, 2, 3) == llist.l(1, 2, 3).seq()
示例#28
0
 (-1, -1),
 (0.0, 0.0),
 (1.0, 1.0),
 (-1.0, -1.0),
 (0.0, 0),
 (1.0, 1),
 (-1.0, -1),
 (True, True),
 (False, False),
 (None, None),
 ("", ""),
 ("not empty", "not empty"),
 (Fraction("1/2"), Fraction("1/2")),
 (Decimal("3.14159"), Decimal("3.14159")),
 (llist.PersistentList.empty(), llist.PersistentList.empty()),
 (llist.l(1, 2, 3), llist.l(1, 2, 3)),
 (lmap.PersistentMap.empty(), lmap.PersistentMap.empty()),
 (lmap.map({"a": 1, "b": 2}), lmap.map({"a": 1, "b": 2})),
 (lset.PersistentSet.empty(), lset.PersistentSet.empty()),
 (lqueue.PersistentQueue.empty(), lqueue.PersistentQueue.empty()),
 (lqueue.q(1, 2, 3), lqueue.q(1, 2, 3)),
 (lset.s(1, 2, 3), lset.s(1, 2, 3)),
 (vec.PersistentVector.empty(), vec.PersistentVector.empty()),
 (vec.v(1, 2, 3), vec.v(1, 2, 3)),
 (lseq.EMPTY, lseq.EMPTY),
 (lseq.EMPTY.cons(3).cons(2).cons(1), lseq.EMPTY.cons(3).cons(2).cons(1)),
 (lqueue.q(1, 2, 3), lseq.EMPTY.cons(3).cons(2).cons(1)),
 (vec.v(1, 2, 3), lseq.EMPTY.cons(3).cons(2).cons(1)),
 (llist.PersistentList.empty(), vec.PersistentVector.empty()),
 (llist.l(1, 2, 3), vec.v(1, 2, 3)),
 (lseq.EMPTY, vec.PersistentVector.empty()),