diff options
author | Louis Pilfold <louis@lpil.uk> | 2020-05-22 19:32:05 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-05-26 19:19:29 +0100 |
commit | cd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514 (patch) | |
tree | 9d1bc253869438b1606581d585b4ca7f7b05c7e6 /test | |
parent | 3fefc3fc5efccbedacbf16a52b9531efa0d9ab30 (diff) | |
download | gleam_stdlib-cd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514.tar.gz gleam_stdlib-cd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514.zip |
Queue data type
Diffstat (limited to 'test')
-rw-r--r-- | test/gleam/queue_test.gleam | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/test/gleam/queue_test.gleam b/test/gleam/queue_test.gleam new file mode 100644 index 0000000..128dab0 --- /dev/null +++ b/test/gleam/queue_test.gleam @@ -0,0 +1,227 @@ +import gleam/queue +import gleam/int +import gleam/list +import gleam/should + +pub fn from_and_to_list_test() { + queue.from_list([]) + |> should.equal(queue.new()) + + let test = fn(input) { + queue.from_list(input) + |> queue.to_list + |> should.equal(input) + } + + test([]) + test([1]) + test([1, 2]) + test([1, 2, 1]) + test([1, 2, 1, 5, 2, 7, 2, 7, 8, 4, 545]) +} + +pub fn is_empty_test() { + queue.new() + |> queue.is_empty + |> should.be_true + + queue.from_list([""]) + |> queue.is_empty + |> should.be_false +} + +pub fn length_test() { + let test = fn(input) { + queue.from_list(input) + |> queue.length + |> should.equal(list.length(input)) + } + + test([]) + test([1]) + test([1, 2]) + test([1, 2, 1]) + test([1, 2, 1, 5, 2, 7, 2, 7, 8, 4, 545]) +} + +pub fn push_test() { + queue.new() + |> queue.push_back(7) + |> queue.push_back(8) + |> queue.push_back(2) + |> queue.to_list + |> should.equal([2, 8, 7]) +} + +pub fn push_front_test() { + queue.new() + |> queue.push_back(7) + |> queue.push_back(8) + |> queue.push_back(2) + |> queue.push_front(4) + |> queue.push_front(3) + |> queue.to_list + |> should.equal([2, 8, 7, 4, 3]) +} + +pub fn pop_back_test() { + // We cannot construct the expected remainaing queue with from_list because + // it has different internal representation. + let expected_rest = queue.new() + |> queue.push_front(1) + |> queue.push_front(2) + queue.from_list([1, 2, 3]) + |> queue.pop_back + |> should.equal(Ok(tuple(3, expected_rest))) + + queue.from_list([]) + |> queue.pop_back + |> should.equal(Error(Nil)) +} + +pub fn pop_front_test() { + queue.from_list([1, 2, 3]) + |> queue.pop_front + |> should.equal(Ok(tuple(1, queue.from_list([2, 3])))) + + queue.from_list([]) + |> queue.pop_front + |> should.equal(Error(Nil)) +} + +pub fn reverse_test() { + queue.from_list([1, 2, 3]) + |> queue.reverse + |> queue.to_list + |> should.equal([3, 2, 1]) +} + +pub fn is_equal_test() { + let should_equal = fn(a, b) { + a + |> queue.is_equal(to: b) + |> should.be_true + } + + let should_not_equal = fn(a, b) { + a + |> queue.is_equal(to: b) + |> should.be_false + } + + should_equal(queue.new(), queue.new()) + + queue.new() + |> queue.push_front(1) + |> should_equal( + queue.new() + |> queue.push_back(1), + ) + + queue.new() + |> queue.push_front(1) + |> should_equal( + queue.new() + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(1) + |> queue.push_back(2) + |> should_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(1) + |> should_not_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(2) + |> queue.push_back(1) + |> should_not_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) +} + +pub fn is_logically_equal_test() { + let both_even_or_odd = fn(a, b) { int.is_even(a) == int.is_even(b) } + + let should_equal = fn(a, b) { + a + |> queue.is_logically_equal(to: b, checking: both_even_or_odd) + |> should.be_true + } + + let should_not_equal = fn(a, b) { + a + |> queue.is_logically_equal(to: b, checking: both_even_or_odd) + |> should.be_false + } + + should_equal(queue.new(), queue.new()) + + queue.new() + |> queue.push_front(3) + |> should_equal( + queue.new() + |> queue.push_back(1), + ) + + queue.new() + |> queue.push_front(4) + |> should_equal( + queue.new() + |> queue.push_back(2), + ) + + queue.new() + |> queue.push_front(3) + |> should_equal( + queue.new() + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(3) + |> queue.push_back(4) + |> should_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(1) + |> should_not_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(2) + |> queue.push_back(1) + |> should_not_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) + + queue.new() + |> queue.push_back(4) + |> queue.push_back(3) + |> should_not_equal( + queue.new() + |> queue.push_front(2) + |> queue.push_front(1), + ) +} |