aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2020-05-22 19:32:05 +0100
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commitcd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514 (patch)
tree9d1bc253869438b1606581d585b4ca7f7b05c7e6 /test
parent3fefc3fc5efccbedacbf16a52b9531efa0d9ab30 (diff)
downloadgleam_stdlib-cd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514.tar.gz
gleam_stdlib-cd2e4bf6176f2a8a0cd0ce0e1f3c463a9182c514.zip
Queue data type
Diffstat (limited to 'test')
-rw-r--r--test/gleam/queue_test.gleam227
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),
+ )
+}