local ll = require('neoclip.linked_list')

describe("linked_list", function()
    it("push", function()
        local l = ll.new()
        l:push(1)
        l:push(3)
        l:push(5)
        l:push(10)
        assert.are.equal(l.head.value, 1)
        assert.are.equal(l.tail.value, 10)
        assert.are.equal(l:len(), 4)
        assert_equal_tables(l:values(), {1, 3, 5, 10})
    end)
    it("reversed", function()
        local l = ll.new()
        l:push(1)
        l:push(3)
        l:push(5)
        l:push(10)
        assert_equal_tables(l:values({reversed = true}), {10, 5, 3, 1})
    end)
    it("pop", function()
        local l = ll.new()
        l:push(1)
        assert.are.equal(l:pop(), 1)
        l:push(3)
        l:push(5)
        l:push(10)
        assert.are.equal(l:pop(), 3)
        assert.are.equal(l.head.value, 5)
        assert.are.equal(l.tail.value, 10)
        assert.are.equal(l:len(), 2)
        assert_equal_tables(l:values(), {5, 10})
        assert.are.equal(l:pop(), 5)
        assert.are.equal(l:pop(), 10)
        assert.are.equal(l:len(), 0)
        assert_equal_tables(l:values(), {})
    end)
end)
