Skip to content

Commit

Permalink
Adds immutable queue impl using vector
Browse files Browse the repository at this point in the history
  • Loading branch information
fr33m0nk committed Apr 4, 2024
1 parent dbc80b0 commit 56acb9b
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/data_structures/queue/vector.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
(ns data-structures.queue.vector)

(defn ->Queue
[]
[])

(defn enqueue
[queue value]
(conj queue value))

(defn dequeue
[queue]
(if (empty? queue)
queue
(subvec queue 1)))

(defn peek-queue
[queue]
(first queue))

(defn empty-queue?
[queue]
(empty? queue))
22 changes: 22 additions & 0 deletions test/data_structures/queue/vector_test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
(ns data-structures.queue.vector-test
(:require
[clojure.test :refer [deftest testing is]]
[data-structures.queue.vector :as q]))

(deftest ->Queue-test
(is (vector? (q/->Queue))))

(deftest enqueue-test
(is (= [10 20 30] (-> (q/->Queue) (q/enqueue 10) (q/enqueue 20) (q/enqueue 30)))))

(deftest dequeue-test
(is (= [] (-> (q/->Queue) (q/dequeue))))
(is (= [20 30] (-> (q/->Queue) (q/enqueue 10) (q/enqueue 20) (q/enqueue 30) (q/dequeue)))))

(deftest peek-queue-test
(is (nil? (-> (q/->Queue) (q/peek-queue))) "returns nil for empty queue")
(is (= 10 (-> (q/->Queue) (q/enqueue 10) (q/enqueue 20) (q/enqueue 30) (q/peek-queue)))))

(deftest empty-queue?-test
(is (q/empty-queue? (q/->Queue)))
(is (false? (-> (q/->Queue) (q/enqueue 10) (q/enqueue 20) q/empty-queue?))))

0 comments on commit 56acb9b

Please sign in to comment.