stoe/test/maths.lisp

64 lines
2.6 KiB
Common Lisp

#|
This file is a part of stoe project.
Copyright (c) 2017 Renaud Casenave-Péré (renaud@casenave-pere.fr)
|#
(uiop:define-package :stoe/test/maths
(:use :cl :prove :maths))
(in-package :stoe/test/maths)
(plan 20)
(diag "Vector Constructor Tests")
(is (raw-data (vec 1 2 3)) #(1 2 3) "Integer Vector Constructor" :test #'equalp)
(is (raw-data (vec 1.0 2.0 3.0)) #(1.0 2.0 3.0) "Float Vector Constructor" :test #'equalp)
(is (raw-data (vec 2.0 3.0)) #(2.0 3.0) "Float2 Constructor" :test #'equalp)
(is (raw-data (vec 2.0 3.0 4.0)) #(2.0 3.0 4.0) "Float3 Constructor" :test #'equalp)
(is (raw-data (vec 2.0 3.0 4.0 5.0)) #(2.0 3.0 4.0 5.0) "Float4 Constructor" :test #'equalp)
(defvar *vector2* (vec 2 3))
(defvar *vector3* (vec 4 5 6))
(defvar *vector4* (vec 7 8 9 10))
(defvar *vector2f* (vec 2.0 3.0))
(diag "Swizzle Tests")
(is (raw-data (xy *vector4*)) (raw-data (vec 7 8)) "Swizzle int4:xy" :test #'equalp)
(is (raw-data (xyz *vector2*)) (raw-data (vec 2 3 0)) "Swizzle int2:xyz" :test #'equalp)
(is (raw-data (xyz *vector3*)) (raw-data *vector3*) "Swizzle int3:xyz (identity)" :test #'equalp)
(is (raw-data (wzyx *vector4*)) (raw-data (vec 10 9 8 7)) "Swizzle int4:wzyx (reverse)" :test #'equalp)
(diag "Simple vector operations")
(is (raw-data (v+ *vector2* (xy *vector4*))) #(9 11) "Add f2" :test #'equalp)
(is (raw-data (v- *vector3* *vector3*)) #(0 0 0) "Substract f3 to itself" :test #'equalp)
(diag "Simple vector / scalar operations")
(is (raw-data (v+ *vector2* 3)) #(5 6) "Add f2" :test #'equalp)
(is (raw-data (v- *vector3* 1)) #(3 4 5) "Substract f3" :test #'equalp)
(is (raw-data (v* *vector4* 2)) #(14 16 18 20) "Multiply f4" :test #'equalp)
(is (raw-data (v/ *vector2f* 5)) #(0.4 0.6) "Divide f2" :test #'equalp)
(diag "Matrix Constructor Tests")
(is (raw-data (mat 1 2 3 4 5 6 7 8 9 10 11 12)) #(1 2 3 4 5 6 7 8 9 10 11 12)
"Matrix Constructor" :test #'equalp)
(defvar *matrix22* (mat 1 2
3 4))
(defvar *matrix33* (mat 1 2 3
4 5 6
7 8 9))
(defvar *matrix44* (mat 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16))
(defvar *matrix22f* (mat 1.0 2.0
3.0 4.0))
(is (raw-data *matrix22*) #(1 2 3 4) "Matrix22 Constructor" :test #'equalp)
(is (raw-data *matrix33*) #(1 2 3 4 5 6 7 8 9) "Matrix33 Constructor" :test #'equalp)
(is (raw-data *matrix44*) #(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
"Matrix44 Constructor" :test #'equalp)
(diag "Simple Matrix Operations")
(is (raw-data (m+ *matrix22* (mat-id 2 'fixnum))) #(2 2 3 5) "Add f22" :test #'equalp)
(finalize)