2023-09-25 12:36:23 -04:00
|
|
|
(defpackage lizfcm/tests.vector
|
|
|
|
(:use :cl
|
|
|
|
:fiveam
|
|
|
|
:lizfcm.vector
|
|
|
|
:lizfcm.utils
|
|
|
|
:lizfcm/tests)
|
|
|
|
(:export :vector-suite))
|
|
|
|
(in-package :lizfcm/tests.vector)
|
|
|
|
|
|
|
|
(def-suite vector-suite
|
|
|
|
:in lizfcm-test-suite)
|
|
|
|
(in-suite vector-suite)
|
|
|
|
|
|
|
|
(test p-norm
|
|
|
|
:description "computes p-norm"
|
|
|
|
(let ((v '(1 1))
|
|
|
|
(length (sqrt 2))
|
|
|
|
(2-norm (p-norm 2)))
|
|
|
|
(is (within-range-p (funcall 2-norm v)
|
|
|
|
length
|
|
|
|
0.00001))))
|
|
|
|
|
|
|
|
(test vector-distance
|
|
|
|
:description "computes distance via norm"
|
|
|
|
(let ((v1 '(0 0))
|
|
|
|
(v2 '(1 1))
|
|
|
|
(dist (sqrt 2)))
|
|
|
|
(is (within-range-p (distance v1 v2 (p-norm 2))
|
|
|
|
dist
|
|
|
|
0.00001))))
|
|
|
|
|
2023-10-10 16:44:33 -04:00
|
|
|
(test least-squares
|
|
|
|
:description "least squares is correct enough"
|
|
|
|
(let ((x '(0 1 2 3 4))
|
|
|
|
(y '(1 2 3 4 5)))
|
|
|
|
(destructuring-bind (m b) (lizfcm.vector:least-squares-reg x y)
|
|
|
|
(is (within-range-p m 1 0.00001))
|
|
|
|
(is (within-range-p b 1 0.00001))))
|
|
|
|
(let ((x '(1 2 3 4 5 6 7))
|
|
|
|
(y '(0.5 3 2 3.5 5 6 7.5)))
|
|
|
|
(destructuring-bind (m b) (lizfcm.vector:least-squares-reg x y)
|
|
|
|
(is (within-range-p m 1 0.3))))) ;; just a guestimate for best fit
|