コード例 #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_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([]))
コード例 #3
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
コード例 #4
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)
コード例 #5
0
def test_lazy_sequence():
    s = lseq.LazySeq(lambda: None)
    assert s.is_empty
    assert None is s.first
    assert lseq.EMPTY is s.rest
    assert s.is_realized
    assert s.is_empty, "LazySeq has been realized and is empty"

    s = lseq.LazySeq(lambda: lseq.EMPTY)
    assert s.is_empty
    assert None is s.first
    assert lseq.EMPTY is s.rest
    assert s.is_realized
    assert s.is_empty, "LazySeq has been realized and is empty"

    s = lseq.LazySeq(lambda: lseq.sequence([1]))
    assert not s.is_empty
    assert 1 == s.first
    assert lseq.EMPTY is s.rest
    assert s.is_realized
    assert not s.is_empty, "LazySeq has been realized and is not empty"

    def lazy_seq():
        def inner_seq():
            def inner_inner_seq():
                return lseq.sequence([3])

            return lseq.LazySeq(inner_inner_seq).cons(2)

        return lseq.LazySeq(inner_seq).cons(1)

    s = lseq.LazySeq(lazy_seq)
    assert not s.is_empty
    assert 1 == s.first
    assert isinstance(s.rest, lseq.LazySeq)
    assert s.is_realized
    assert not s.is_empty, "LazySeq has been realized and is not empty"

    r = s.rest
    assert not r.is_empty
    assert 2 == r.first
    assert isinstance(r.rest, lseq.LazySeq)
    assert r.is_realized
    assert not r.is_empty, "LazySeq has been realized and is not empty"

    t = r.rest
    assert not t.is_empty
    assert 3 == t.first
    assert lseq.EMPTY is t.rest
    assert t.is_realized
    assert not t.is_empty, "LazySeq has been realized and is not empty"

    assert [1, 2, 3] == [e for e in s]
コード例 #6
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")
コード例 #7
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
コード例 #8
0
ファイル: map.py プロジェクト: basilisp-lang/basilisp
 def seq(self) -> Optional[ISeq[IMapEntry[K, V]]]:
     if len(self._inner) == 0:
         return None
     return sequence(MapEntry.of(k, v) for k, v in self._inner.items())
コード例 #9
0
 def seq(self) -> Optional[ISeq[T]]:
     if len(self._inner) == 0:
         return None
     return sequence(self)
コード例 #10
0
ファイル: vector.py プロジェクト: basilisp-lang/basilisp
 def rseq(self) -> ISeq[T]:
     return sequence(reversed(self))
コード例 #11
0
ファイル: vector.py プロジェクト: basilisp-lang/basilisp
 def seq(self) -> Optional[ISeq[T]]:  # type: ignore[override]
     if len(self._inner) == 0:
         return None
     return sequence(self)
コード例 #12
0
 def inner_inner_seq():
     return lseq.sequence([3])
コード例 #13
0
def test_seq_iterator():
    s = lseq.sequence([])
    assert vec.PersistentVector.empty() == vec.vector(s)

    s = lseq.sequence(range(10000))
    assert 10000 == len(vec.vector(s))