aboutsummaryrefslogtreecommitdiff
path: root/test/union-find.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'test/union-find.lisp')
-rw-r--r--test/union-find.lisp68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/union-find.lisp b/test/union-find.lisp
new file mode 100644
index 0000000..4bfa61d
--- /dev/null
+++ b/test/union-find.lisp
@@ -0,0 +1,68 @@
+(in-package :com.lisp-algo.test)
+
+
+;;; Utils
+(defun get-row (array &optional (row-id 0))
+ (let* ((row-size (array-dimension array 1)) ; Deduce row size from array
+ (row (make-array row-size :fill-pointer 0))) ; Initialize a new vector (which will contain the row row-id from array)
+ ;; Fill row with the right values of array
+ (do ((cur-id 0 (+ cur-id 1)))
+ ((>= cur-id row-size) row)
+ (vector-push (row-major-aref array (+ cur-id (* row-size row-id ))) row))))
+
+
+;;; Test create network
+(define-test create-network-test ()
+ ;; ----- Length tests
+ (dotimes (nw-size 1000)
+ (assert-equal nw-size (length (qf-create-network nw-size))) ; Quick-Find
+ (assert-equal nw-size (length (qu-create-network nw-size))) ; Quick-Union
+ ;; Weighted-Quick-Union
+ (assert-equal 10 (length (get-row (wqu-create-network 10) 0)))
+ (assert-equal 10 (length (get-row (wqu-create-network 10) 1)))
+ ;; Weighted-Quick-Union with Path Compression
+ (assert-equal 10 (length (get-row (wqupc-create-network 10) 0)))
+ (assert-equal 10 (length (get-row (wqupc-create-network 10) 1))))
+ ;; ----- Value tests
+ (assert-equalp #(0 1 2 3 4) (qf-create-network 5)) ; Quick-Find
+ (assert-equalp #(0 1 2 3 4) (qu-create-network 5)) ; Quick-Union
+ ;; Weighted-Quick-Union
+ (assert-true (equalp #(0 1 2 3 4 5 6 7 8 9) (get-row (wqu-create-network 10) 0)))
+ (assert-true (equalp (make-array 10 :initial-element 1) (get-row (wqu-create-network 10) 1)))
+ ;; Weighted-Quick-Union with Path Compression
+ (assert-true (equalp #(0 1 2 3 4 5 6 7 8 9) (get-row (wqupc-create-network 10) 0)))
+ (assert-true (equalp (make-array 10 :initial-element 1) (get-row (wqupc-create-network 10) 1))))
+
+
+;; (define-test test-union_
+;; (let ((nw (create-network 10)))
+;; (setf nw (union_ nw 1 2))
+;; (setf nw (union_ nw 0 5))
+;; (assert-equal (aref nw 1) (aref nw 2))
+;; (assert-equal (aref nw 0) (aref nw 5))
+;; (assert-false (equal (aref nw 0) (aref nw 8)))
+;; (assert-false (equal (aref nw 0) (aref nw 2)))))
+
+;; (define-test test-connected
+;; (let ((nw (create-network 10)))
+;; (setf nw (union_ nw 1 2))
+;; (setf nw (union_ nw 0 5))
+;; (assert-true (connected nw 1 2))
+;; (assert-true (connected nw 0 5))
+;; (assert-false (connected nw 0 8))
+;; (assert-false (connected nw 0 2))))
+
+;; (define-test test-nunion__
+;; (let ((nw (create-network 10)))
+;; (nunion_ nw 1 2)
+;; (nunion_ nw 0 5)
+;; (assert-equal (aref nw 1) (aref nw 2))
+;; (assert-equal (aref nw 0) (aref nw 5))
+;; (assert-false (equal (aref nw 0) (aref nw 8)))
+;; (assert-false (equal (aref nw 0) (aref nw 2)))))
+
+;; ;; Run all tests
+;; (setq *print-summary* t) ; Details tests locations when running tests
+;; (run-tests :all)
+
+