tests/testthat/test-deque.R

context("deque")

test_that("push, peek and pop", {
    q <- deque()
    q$push(1)$push(2)
    expect_equal(q$size(), 2)
    expect_equal(q$peek(), 2)
    expect_equal(q$pop(), 2)
    expect_equal(q$size(), 1)
    q$push(3)
    expect_equal(q$size(), 2)
    expect_equal(q$peek(), 3)
    expect_equal(q$pop(), 3)
    expect_equal(q$peek(), 1)
    expect_equal(q$pop(), 1)
    expect_equal(q$size(), 0)
    expect_error(q$peek(), "empty")
    expect_error(q$pop(), "empty")
})

test_that("push, peek and pop with items", {
    q <- deque(list(1, 3))
    expect_equal(q$size(), 2)
    expect_equal(q$peek(), 3)
    expect_equal(q$pop(), 3)
    expect_equal(q$peek(), 1)
    expect_equal(q$pop(), 1)
    expect_equal(q$size(), 0)
    expect_error(q$peek(), "empty")
    expect_error(q$pop(), "empty")
})

test_that("pushleft, peekleft and popleft", {
    q <- deque()
    q$pushleft(1)$pushleft(2)
    expect_equal(q$size(), 2)
    expect_equal(q$peekleft(), 2)
    expect_equal(q$popleft(), 2)
    expect_equal(q$size(), 1)
    q$pushleft(3)
    expect_equal(q$size(), 2)
    expect_equal(q$peekleft(), 3)
    expect_equal(q$popleft(), 3)
    expect_equal(q$peekleft(), 1)
    expect_equal(q$popleft(), 1)
    expect_equal(q$size(), 0)
    expect_error(q$popleft(), "empty")
    expect_error(q$peekleft(), "empty")
})

test_that("random push and pop", {
    q <- deque()
    q$pushleft(1)$push("a")$pushleft(2)$push("b")
    expect_equal(q$size(), 4)
    expect_equal(q$popleft(), 2)
    expect_equal(q$size(), 3)
    expect_equal(q$pop(), "b")
    expect_equal(q$size(), 2)
    expect_equal(q$popleft(), 1)
    expect_equal(q$size(), 1)
    expect_equal(q$pop(), "a")
    expect_equal(q$size(), 0)
    expect_error(q$pop(), "empty")
    expect_error(q$popleft(), "empty")
})

test_that("random push and pop 2", {
    q <- deque()
    q$pushleft(1)$push("a")$pushleft(2)$push("b")
    expect_equal(q$size(), 4)
    expect_equal(q$pop(), "b")
    expect_equal(q$size(), 3)
    expect_equal(q$popleft(), 2)
    expect_equal(q$size(), 2)
    expect_equal(q$pop(), "a")
    expect_equal(q$size(), 1)
    expect_equal(q$popleft(), 1)
    expect_equal(q$size(), 0)
    expect_error(q$pop(), "empty")
    expect_error(q$popleft(), "empty")
})

test_that("remove", {
    q <- deque()
    q$push("a")$pushleft(1)$push("b")$pushleft(2)
    expect_equal(q$size(), 4)
    q$remove("a")
    expect_equal(q$size(), 3)
    expect_equal(q$pop(), "b")
    expect_equal(q$size(), 2)
    q$remove(1)
    expect_equal(q$size(), 1)
    expect_equal(q$pop(), 2)
})

test_that("remove the first occurance of two identical items", {
    q <- deque()
    q$push("a")$push("b")$push("a")$push("c")
    q$remove("a")
    expect_equal(q$size(), 3)
})


test_that("extend", {
    q <- deque()
    q2 <- deque()
    q2$push("a")$push("b")
    q$extend(q2)
    expect_equal(q$size(), 2)
    expect_equal(q$pop(), "b")
    q$extendleft(q2)
    expect_equal(q$popleft(), "b")
})

test_that("clear", {
    q <- deque()
    q$push("a")$push("b")
    q$clear()
    expect_equal(q$size(), 0)
})

test_that("push NULL", {
    q <- deque()
    q$push(NULL)$push(NULL)
    expect_null(q$pop())
    expect_equal(q$size(), 1)
})

test_that("pushleft NULL", {
    q <- deque()
    q$pushleft(NULL)$pushleft(NULL)
    expect_null(q$popleft())
    expect_equal(q$size(), 1)
})


test_that("serialization", {
    q <- deque()
    q$push(1)$push(2)
    q2 <- unserialize(serialize(q, NULL))
    expect_equal(q2$size(), 2)
    q2$push(3)
    expect_equal(q2$size(), 3)
    q2$pushleft(4)
    expect_equal(q2$size(), 4)
    expect_equal(q2$pop(), 3)
    expect_equal(q2$size(), 3)
    expect_equal(q2$popleft(), 4)
    expect_equal(q2$size(), 2)
})

Try the collections package in your browser

Any scripts or data that you put into this service are public.

collections documentation built on Jan. 6, 2023, 1:25 a.m.