From e46e5eee74af75aa1123b2370ff2f4587f4adc2a Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Mon, 9 Oct 2023 21:37:44 -0600 Subject: flatten directory structure to appease dr koebbe --- compile.sh | 3 +++ lizfcm.a | Bin 0 -> 9632 bytes lizfcm.asd | 39 ----------------------------------- src/approx,derivative.lisp | 25 +++++++++++++++++++++++ src/approx,maceps.lisp | 12 +++++++++++ src/approx,package.lisp | 7 +++++++ src/approx/derivative.lisp | 17 ---------------- src/approx/maceps.lisp | 12 ----------- src/approx/package.lisp | 6 ------ src/lizfcm.asd | 32 +++++++++++++++++++++++++++++ src/package.lisp | 7 ------- src/tests,approx.lisp | 48 ++++++++++++++++++++++++++++++++++++++++++++ src/tests,maceps.lisp | 27 +++++++++++++++++++++++++ src/tests,suite.lisp | 10 +++++++++ src/tests,table.lisp | 31 ++++++++++++++++++++++++++++ src/tests,vector.lisp | 31 ++++++++++++++++++++++++++++ src/utils,package.lisp | 5 +++++ src/utils,table.lisp | 11 ++++++++++ src/utils,within-range.lisp | 5 +++++ src/utils/package.lisp | 5 ----- src/utils/table.lisp | 11 ---------- src/utils/within-range.lisp | 5 ----- src/vector,distance.lisp | 6 ++++++ src/vector,norm.lisp | 14 +++++++++++++ src/vector,package.lisp | 7 +++++++ src/vector/distance.lisp | 6 ------ src/vector/norm.lisp | 14 ------------- src/vector/package.lisp | 7 ------- tests/approx.lisp | 36 --------------------------------- tests/maceps.lisp | 27 ------------------------- tests/suite.lisp | 10 --------- tests/table.lisp | 31 ---------------------------- tests/vector.lisp | 31 ---------------------------- 33 files changed, 274 insertions(+), 264 deletions(-) create mode 100644 compile.sh create mode 100644 lizfcm.a delete mode 100644 lizfcm.asd create mode 100644 src/approx,derivative.lisp create mode 100644 src/approx,maceps.lisp create mode 100644 src/approx,package.lisp delete mode 100644 src/approx/derivative.lisp delete mode 100644 src/approx/maceps.lisp delete mode 100644 src/approx/package.lisp create mode 100644 src/lizfcm.asd delete mode 100644 src/package.lisp create mode 100644 src/tests,approx.lisp create mode 100644 src/tests,maceps.lisp create mode 100644 src/tests,suite.lisp create mode 100644 src/tests,table.lisp create mode 100644 src/tests,vector.lisp create mode 100644 src/utils,package.lisp create mode 100644 src/utils,table.lisp create mode 100644 src/utils,within-range.lisp delete mode 100644 src/utils/package.lisp delete mode 100644 src/utils/table.lisp delete mode 100644 src/utils/within-range.lisp create mode 100644 src/vector,distance.lisp create mode 100644 src/vector,norm.lisp create mode 100644 src/vector,package.lisp delete mode 100644 src/vector/distance.lisp delete mode 100644 src/vector/norm.lisp delete mode 100644 src/vector/package.lisp delete mode 100644 tests/approx.lisp delete mode 100644 tests/maceps.lisp delete mode 100644 tests/suite.lisp delete mode 100644 tests/table.lisp delete mode 100644 tests/vector.lisp diff --git a/compile.sh b/compile.sh new file mode 100644 index 0000000..f174fbe --- /dev/null +++ b/compile.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +ar rcs lizfcm.a src/* diff --git a/lizfcm.a b/lizfcm.a new file mode 100644 index 0000000..1d27463 Binary files /dev/null and b/lizfcm.a differ diff --git a/lizfcm.asd b/lizfcm.asd deleted file mode 100644 index 3e8c289..0000000 --- a/lizfcm.asd +++ /dev/null @@ -1,39 +0,0 @@ -(asdf:defsystem "lizfcm" - :version "0.1.0" - :author "Elizabeth Hunt" - :license "MIT" - :components ((:module "src" - :components - ((:module "utils" - :components - ((:file "within-range" :depends-on ("package")) - (:file "table" :depends-on ("package")) - (:file "package"))) - (:module "approx" - :components - ((:file "maceps" :depends-on ("package")) - (:file "derivative" :depends-on ("package")) - (:file "package"))) - (:module "vector" - :components - ((:file "distance" :depends-on ("norm" "package")) - (:file "norm" :depends-on ("package")) - (:file "package"))))))) - - -(asdf:defsystem "lizfcm/tests" - :author "Elizabeth Hunt" - :license "MIT" - :depends-on (:fiveam - :lizfcm) - :components ((:module "tests" - :components - ((:file "table" :depends-on ("suite")) - (:file "maceps" :depends-on ("suite")) - (:file "approx" :depends-on ("suite")) - (:file "vector" :depends-on ("suite")) - (:file "suite")))) - :perform (asdf:test-op (o c) (uiop:symbol-call - :fiveam :run! - (uiop:find-symbol* :lizfcm-test-suite :lizfcm/tests)))) - diff --git a/src/approx,derivative.lisp b/src/approx,derivative.lisp new file mode 100644 index 0000000..631a5c0 --- /dev/null +++ b/src/approx,derivative.lisp @@ -0,0 +1,25 @@ +(in-package :lizfcm.approx) + +(defun central-derivative-at (f x &optional (delta 0.01)) + (let* ((x2 (+ x delta)) + (x1 (- x delta)) + (y2 (apply f (list x2))) + (y1 (apply f (list x1)))) + (/ (- y2 y1) + (- x2 x1)))) + +(defun forward-derivative-at (f x &optional (delta 0.01)) + (let* ((x2 (+ x delta)) + (x1 x) + (y2 (apply f (list x2))) + (y1 (apply f (list x1)))) + (/ (- y2 y1) + (- x2 x1)))) + +(defun backward-derivative-at (f x &optional (delta 0.01)) + (let* ((x2 x) + (x1 (- x delta)) + (y2 (apply f (list x2))) + (y1 (apply f (list x1)))) + (/ (- y2 y1) + (- x2 x1)))) diff --git a/src/approx,maceps.lisp b/src/approx,maceps.lisp new file mode 100644 index 0000000..e2738e4 --- /dev/null +++ b/src/approx,maceps.lisp @@ -0,0 +1,12 @@ +(in-package :lizfcm.approx) + +(defun compute-maceps (f a init) + (let ((h init) + (err init)) + (loop collect (list a h err) + do + (setf h (/ h 2) + err (abs (- (funcall f (+ a h)) + (funcall f a)))) + while (> err 0)))) + diff --git a/src/approx,package.lisp b/src/approx,package.lisp new file mode 100644 index 0000000..a0eac80 --- /dev/null +++ b/src/approx,package.lisp @@ -0,0 +1,7 @@ +(in-package :cl-user) +(defpackage lizfcm.approx + (:use :cl) + (:export :central-derivative-at + :forward-derivative-at + :backward-derivative-at + :compute-maceps)) diff --git a/src/approx/derivative.lisp b/src/approx/derivative.lisp deleted file mode 100644 index 8aa171a..0000000 --- a/src/approx/derivative.lisp +++ /dev/null @@ -1,17 +0,0 @@ -(in-package :lizfcm.approx) - -(defun central-derivative-at (f x &optional (delta 0.01)) - (let* ((x2 (+ x delta)) - (x1 (- x delta)) - (y2 (apply f (list x2))) - (y1 (apply f (list x1)))) - (/ (- y2 y1) - (- x2 x1)))) - -(defun fwd-derivative-at (f x &optional (delta 0.01)) - (let* ((x2 (+ x delta)) - (x1 x) - (y2 (apply f (list x2))) - (y1 (apply f (list x1)))) - (/ (- y2 y1) - (- x2 x1)))) diff --git a/src/approx/maceps.lisp b/src/approx/maceps.lisp deleted file mode 100644 index e2738e4..0000000 --- a/src/approx/maceps.lisp +++ /dev/null @@ -1,12 +0,0 @@ -(in-package :lizfcm.approx) - -(defun compute-maceps (f a init) - (let ((h init) - (err init)) - (loop collect (list a h err) - do - (setf h (/ h 2) - err (abs (- (funcall f (+ a h)) - (funcall f a)))) - while (> err 0)))) - diff --git a/src/approx/package.lisp b/src/approx/package.lisp deleted file mode 100644 index 67c6a90..0000000 --- a/src/approx/package.lisp +++ /dev/null @@ -1,6 +0,0 @@ -(in-package :cl-user) -(defpackage lizfcm.approx - (:use :cl) - (:export :central-derivative-at - :fwd-derivative-at - :compute-maceps)) diff --git a/src/lizfcm.asd b/src/lizfcm.asd new file mode 100644 index 0000000..ee8beb0 --- /dev/null +++ b/src/lizfcm.asd @@ -0,0 +1,32 @@ +(asdf:defsystem "lizfcm" + :version "0.1.0" + :author "Elizabeth Hunt" + :license "MIT" + :components + ((:file "utils,within-range" :depends-on ("utils,package")) + (:file "utils,table" :depends-on ("utils,package")) + (:file "utils,package") + (:file "approx,maceps" :depends-on ("approx,package")) + (:file "approx,derivative" :depends-on ("approx,package")) + (:file "approx,package") + (:file "vector,distance" :depends-on ("vector,norm" "vector,package")) + (:file "vector,norm" :depends-on ("vector,package")) + (:file "vector,package"))) + + +(asdf:defsystem "lizfcm/tests" + :author "Elizabeth Hunt" + :license "MIT" + :depends-on + (:fiveam + :lizfcm) + :components + ((:file "tests,table" :depends-on ("tests,suite")) + (:file "tests,maceps" :depends-on ("tests,suite")) + (:file "tests,approx" :depends-on ("tests,suite")) + (:file "tests,vector" :depends-on ("tests,suite")) + (:file "tests,suite")) + :perform + (asdf:test-op (o c) (uiop:symbol-call + :fiveam :run! + (uiop:find-symbol* :lizfcm-test-suite :lizfcm/tests)))) diff --git a/src/package.lisp b/src/package.lisp deleted file mode 100644 index 88b10eb..0000000 --- a/src/package.lisp +++ /dev/null @@ -1,7 +0,0 @@ -(in-package :cl-user) -(defpackage lizfcm.vector - (:use :cl) - (:export - :n-norm - :max-norm - :distance)) diff --git a/src/tests,approx.lisp b/src/tests,approx.lisp new file mode 100644 index 0000000..678ff8c --- /dev/null +++ b/src/tests,approx.lisp @@ -0,0 +1,48 @@ +(defpackage lizfcm/tests.approx + (:use :cl + :fiveam + :lizfcm.approx + :lizfcm.utils + :lizfcm/tests) + (:export :approx-suite)) +(in-package :lizfcm/tests.approx) + +(def-suite approx-suite + :in lizfcm-test-suite) +(in-suite approx-suite) + +(test central-derivative-at + :description "derivative at is within bounds" + (let ((f (lambda (x) (* x x))) + (x 2) + (accepted-delta 0.02) + (f-prime-at-x 4) + (delta 0.01)) + (is (within-range-p + (central-derivative-at f x delta) + f-prime-at-x + accepted-delta)))) + +(test fwd-derivative-at + :description "forward derivative at is within bounds" + (let ((f (lambda (x) (* x x))) + (x 2) + (accepted-delta 0.02) + (f-prime-at-x 4) + (delta 0.01)) + (is (within-range-p + (forward-derivative-at f x delta) + f-prime-at-x + accepted-delta)))) + +(test bwd-derivative-at + :description "backward derivative at is within bounds" + (let ((f (lambda (x) (* x x))) + (x 2) + (accepted-delta 0.02) + (f-prime-at-x 4) + (delta 0.01)) + (is (within-range-p + (backward-derivative-at f x delta) + f-prime-at-x + accepted-delta)))) diff --git a/src/tests,maceps.lisp b/src/tests,maceps.lisp new file mode 100644 index 0000000..cd5ced9 --- /dev/null +++ b/src/tests,maceps.lisp @@ -0,0 +1,27 @@ +(defpackage lizfcm/tests.maceps + (:use :cl + :fiveam + :lizfcm.approx + :lizfcm.utils + :lizfcm/tests) + (:export :approx-suite)) +(in-package :lizfcm/tests.maceps) + +(def-suite maceps-suite + :in lizfcm-test-suite) +(in-suite maceps-suite) + +(test maceps + :description "double precision provides precision about (mac eps of single precision) squared" + (let* ((maceps-computation-double (compute-maceps (lambda (x) x) + 1.0d0 + 1.0d0)) + (maceps-computation-single (compute-maceps (lambda (x) x) + 1.0 + 1.0)) + (last-double-h (cadar (last maceps-computation-double))) + (last-single-h (cadar (last maceps-computation-single)))) + (is (within-range-p + (- last-double-h (* last-single-h last-single-h)) + 0 + last-single-h)))) diff --git a/src/tests,suite.lisp b/src/tests,suite.lisp new file mode 100644 index 0000000..e23cfaf --- /dev/null +++ b/src/tests,suite.lisp @@ -0,0 +1,10 @@ +(in-package :cl-user) +(defpackage lizfcm/tests + (:use :cl + :fiveam) + (:export :run! + :lizfcm-test-suite)) +(in-package :lizfcm/tests) + +(def-suite lizfcm-test-suite + :description "The ultimate parent test suite") diff --git a/src/tests,table.lisp b/src/tests,table.lisp new file mode 100644 index 0000000..33d4e86 --- /dev/null +++ b/src/tests,table.lisp @@ -0,0 +1,31 @@ +(defpackage lizfcm/tests.table + (:use :cl + :fiveam + :lizfcm.utils + :lizfcm/tests) + (:export :approx-suite)) +(in-package :lizfcm/tests.table) + +(def-suite table-suite + :in lizfcm-test-suite) +(in-suite table-suite) + +(defun fib (n) + (cond ((< n 2) n) + (t (+ (fib (- n 1)) (fib (- n 2)))))) + +(test table-of-fib-vals + :description "table generates correctly" + (let* ((headers '("n" "fib(n)")) + (n-values '((1) (2) (3) (4))) + (expected `(("n" "fib(n)") + (1 ,(fib 1)) + (2 ,(fib 2)) + (3 ,(fib 3)) + (4 ,(fib 4)))) + (tabled (lizfcm.utils:table (:headers headers + :domain-order (n) + :domain-values n-values) + (fib n)))) + (is (equal expected tabled)))) + diff --git a/src/tests,vector.lisp b/src/tests,vector.lisp new file mode 100644 index 0000000..3ffe5a8 --- /dev/null +++ b/src/tests,vector.lisp @@ -0,0 +1,31 @@ +(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)))) + diff --git a/src/utils,package.lisp b/src/utils,package.lisp new file mode 100644 index 0000000..bdd5589 --- /dev/null +++ b/src/utils,package.lisp @@ -0,0 +1,5 @@ +(in-package :cl-user) +(defpackage lizfcm.utils + (:use :cl) + (:export :within-range-p + :table)) diff --git a/src/utils,table.lisp b/src/utils,table.lisp new file mode 100644 index 0000000..e96f37b --- /dev/null +++ b/src/utils,table.lisp @@ -0,0 +1,11 @@ +(in-package :lizfcm.utils) + +(defmacro table ((&key headers domain-order domain-values) &body body) + `(cons + ,headers + (mapcar (lambda (tuple) + (destructuring-bind ,domain-order tuple + (append tuple + (list + ,@body)))) + ,domain-values))) diff --git a/src/utils,within-range.lisp b/src/utils,within-range.lisp new file mode 100644 index 0000000..9a0b762 --- /dev/null +++ b/src/utils,within-range.lisp @@ -0,0 +1,5 @@ +(in-package :lizfcm.utils) + +(defun within-range-p (x true-value delta) + (and (< x (+ true-value delta)) + (> x (- true-value delta)))) diff --git a/src/utils/package.lisp b/src/utils/package.lisp deleted file mode 100644 index bdd5589..0000000 --- a/src/utils/package.lisp +++ /dev/null @@ -1,5 +0,0 @@ -(in-package :cl-user) -(defpackage lizfcm.utils - (:use :cl) - (:export :within-range-p - :table)) diff --git a/src/utils/table.lisp b/src/utils/table.lisp deleted file mode 100644 index e96f37b..0000000 --- a/src/utils/table.lisp +++ /dev/null @@ -1,11 +0,0 @@ -(in-package :lizfcm.utils) - -(defmacro table ((&key headers domain-order domain-values) &body body) - `(cons - ,headers - (mapcar (lambda (tuple) - (destructuring-bind ,domain-order tuple - (append tuple - (list - ,@body)))) - ,domain-values))) diff --git a/src/utils/within-range.lisp b/src/utils/within-range.lisp deleted file mode 100644 index 9a0b762..0000000 --- a/src/utils/within-range.lisp +++ /dev/null @@ -1,5 +0,0 @@ -(in-package :lizfcm.utils) - -(defun within-range-p (x true-value delta) - (and (< x (+ true-value delta)) - (> x (- true-value delta)))) diff --git a/src/vector,distance.lisp b/src/vector,distance.lisp new file mode 100644 index 0000000..74631ce --- /dev/null +++ b/src/vector,distance.lisp @@ -0,0 +1,6 @@ +(in-package :lizfcm.vector) + +(defun distance (v1 v2 norm) + (let* ((d (mapcar #'- v1 v2)) + (length (funcall norm d))) + length)) diff --git a/src/vector,norm.lisp b/src/vector,norm.lisp new file mode 100644 index 0000000..aa51bce --- /dev/null +++ b/src/vector,norm.lisp @@ -0,0 +1,14 @@ +(in-package :lizfcm.vector) + +(defun p-norm (p) + (lambda (v) + (expt + (reduce #'+ + (mapcar (lambda (x) + (abs + (expt x p))) + v)) + (/ 1 p)))) + +(defun max-norm (v) + (reduce #'max v)) diff --git a/src/vector,package.lisp b/src/vector,package.lisp new file mode 100644 index 0000000..009b190 --- /dev/null +++ b/src/vector,package.lisp @@ -0,0 +1,7 @@ +(in-package :cl-user) +(defpackage lizfcm.vector + (:use :cl) + (:export + :p-norm + :max-norm + :distance)) diff --git a/src/vector/distance.lisp b/src/vector/distance.lisp deleted file mode 100644 index 74631ce..0000000 --- a/src/vector/distance.lisp +++ /dev/null @@ -1,6 +0,0 @@ -(in-package :lizfcm.vector) - -(defun distance (v1 v2 norm) - (let* ((d (mapcar #'- v1 v2)) - (length (funcall norm d))) - length)) diff --git a/src/vector/norm.lisp b/src/vector/norm.lisp deleted file mode 100644 index aa51bce..0000000 --- a/src/vector/norm.lisp +++ /dev/null @@ -1,14 +0,0 @@ -(in-package :lizfcm.vector) - -(defun p-norm (p) - (lambda (v) - (expt - (reduce #'+ - (mapcar (lambda (x) - (abs - (expt x p))) - v)) - (/ 1 p)))) - -(defun max-norm (v) - (reduce #'max v)) diff --git a/src/vector/package.lisp b/src/vector/package.lisp deleted file mode 100644 index 009b190..0000000 --- a/src/vector/package.lisp +++ /dev/null @@ -1,7 +0,0 @@ -(in-package :cl-user) -(defpackage lizfcm.vector - (:use :cl) - (:export - :p-norm - :max-norm - :distance)) diff --git a/tests/approx.lisp b/tests/approx.lisp deleted file mode 100644 index 588b16d..0000000 --- a/tests/approx.lisp +++ /dev/null @@ -1,36 +0,0 @@ -(defpackage lizfcm/tests.approx - (:use :cl - :fiveam - :lizfcm.approx - :lizfcm.utils - :lizfcm/tests) - (:export :approx-suite)) -(in-package :lizfcm/tests.approx) - -(def-suite approx-suite - :in lizfcm-test-suite) -(in-suite approx-suite) - -(test central-derivative-at - :description "derivative at is within bounds" - (let ((f (lambda (x) (* x x))) - (x 2) - (accepted-delta 0.02) - (f-prime-at-x 4) - (delta 0.01)) - (is (within-range-p - (central-derivative-at f x delta) - f-prime-at-x - accepted-delta)))) - -(test fwd-derivative-at - :description "forward derivative at is within bounds" - (let ((f (lambda (x) (* x x))) - (x 2) - (accepted-delta 0.02) - (f-prime-at-x 4) - (delta 0.01)) - (is (within-range-p - (forward-derivative-at f x delta) - f-prime-at-x - accepted-delta)))) diff --git a/tests/maceps.lisp b/tests/maceps.lisp deleted file mode 100644 index cd5ced9..0000000 --- a/tests/maceps.lisp +++ /dev/null @@ -1,27 +0,0 @@ -(defpackage lizfcm/tests.maceps - (:use :cl - :fiveam - :lizfcm.approx - :lizfcm.utils - :lizfcm/tests) - (:export :approx-suite)) -(in-package :lizfcm/tests.maceps) - -(def-suite maceps-suite - :in lizfcm-test-suite) -(in-suite maceps-suite) - -(test maceps - :description "double precision provides precision about (mac eps of single precision) squared" - (let* ((maceps-computation-double (compute-maceps (lambda (x) x) - 1.0d0 - 1.0d0)) - (maceps-computation-single (compute-maceps (lambda (x) x) - 1.0 - 1.0)) - (last-double-h (cadar (last maceps-computation-double))) - (last-single-h (cadar (last maceps-computation-single)))) - (is (within-range-p - (- last-double-h (* last-single-h last-single-h)) - 0 - last-single-h)))) diff --git a/tests/suite.lisp b/tests/suite.lisp deleted file mode 100644 index e23cfaf..0000000 --- a/tests/suite.lisp +++ /dev/null @@ -1,10 +0,0 @@ -(in-package :cl-user) -(defpackage lizfcm/tests - (:use :cl - :fiveam) - (:export :run! - :lizfcm-test-suite)) -(in-package :lizfcm/tests) - -(def-suite lizfcm-test-suite - :description "The ultimate parent test suite") diff --git a/tests/table.lisp b/tests/table.lisp deleted file mode 100644 index 33d4e86..0000000 --- a/tests/table.lisp +++ /dev/null @@ -1,31 +0,0 @@ -(defpackage lizfcm/tests.table - (:use :cl - :fiveam - :lizfcm.utils - :lizfcm/tests) - (:export :approx-suite)) -(in-package :lizfcm/tests.table) - -(def-suite table-suite - :in lizfcm-test-suite) -(in-suite table-suite) - -(defun fib (n) - (cond ((< n 2) n) - (t (+ (fib (- n 1)) (fib (- n 2)))))) - -(test table-of-fib-vals - :description "table generates correctly" - (let* ((headers '("n" "fib(n)")) - (n-values '((1) (2) (3) (4))) - (expected `(("n" "fib(n)") - (1 ,(fib 1)) - (2 ,(fib 2)) - (3 ,(fib 3)) - (4 ,(fib 4)))) - (tabled (lizfcm.utils:table (:headers headers - :domain-order (n) - :domain-values n-values) - (fib n)))) - (is (equal expected tabled)))) - diff --git a/tests/vector.lisp b/tests/vector.lisp deleted file mode 100644 index 3ffe5a8..0000000 --- a/tests/vector.lisp +++ /dev/null @@ -1,31 +0,0 @@ -(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)))) - -- cgit v1.2.3-70-g09d2