From 335af7ff5f22e49c986d7c06a474bee4cd791de7 Mon Sep 17 00:00:00 2001 From: bdeket Date: Mon, 9 Mar 2026 20:40:36 +0100 Subject: [PATCH 1/2] matrix-cos-angle * prevent zero-matrix in test * better error on zero-matrix --- math-lib/math/private/matrix/matrix-basic.rkt | 5 ++++- math-test/math/tests/matrix-tests.rkt | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/math-lib/math/private/matrix/matrix-basic.rkt b/math-lib/math/private/matrix/matrix-basic.rkt index f22538a..b38fa7f 100644 --- a/math-lib/math/private/matrix/matrix-basic.rkt +++ b/math-lib/math/private/matrix/matrix-basic.rkt @@ -355,7 +355,10 @@ (inner A* B*)] [(or (nan? mxA) (nan? mxB) (= 0 mxA) (= 0 mxB)) - (/ (matrix-dot A B) (* mxA mxB))] + (cond + [(eqv? mxA 0) (error 'matrix-cos-angle "non-zero matrix ~a" A)] + [(eqv? mxB 0) (error 'matrix-cos-angle "non-zero matrix ~a" B)] + [else (/ (matrix-dot A B) (* mxA mxB))])] [else (define A* (if (rational? mxA) (inline-array-map (λ (x) (/ x mxA)) A) diff --git a/math-test/math/tests/matrix-tests.rkt b/math-test/math/tests/matrix-tests.rkt index 076cf6d..b0c8d57 100644 --- a/math-test/math/tests/matrix-tests.rkt +++ b/math-test/math/tests/matrix-tests.rkt @@ -686,8 +686,11 @@ (for: ([i (in-range 10)]) (define n (+ 1 (random 3))) (define m (+ 1 (random 4))) - (define A (random-matrix n m)) - (define B (random-matrix n m)) + (define (non-zero-random-matrix [n : Integer] [m : Integer]) : (Array Integer) + (define A (random-matrix n m)) + (if (matrix-zero? A) (non-zero-random-matrix n m) A)) + (define A (non-zero-random-matrix n m)) + (define B (non-zero-random-matrix n m)) (define ca (matrix-cos-angle A B)) (check-true (or (and (rational? ca) (<= ca 1.)) (matrix-zero? A) (matrix-zero? B)))) @@ -714,6 +717,8 @@ (matrix [[3 -8+inf.0i]])) (matrix-cos-angle (matrix [[2 9]]) (matrix [[0. -0+1.0i]]))) +(check-exn #px"matrix-cos-angle: non-zero matrix " (λ () (matrix-cos-angle (matrix [[0 0][0 0]]) (matrix [[3 1][-1 2]])))) +(check-exn #px"matrix-cos-angle: non-zero matrix " (λ () (matrix-angle (matrix [[1]]) (matrix [[0]])))) ;; TODO: matrix-normalize From a2f3be348f183fe825ddcbe4c50d4984146b8e7b Mon Sep 17 00:00:00 2001 From: bdeket Date: Tue, 10 Mar 2026 17:46:48 +0100 Subject: [PATCH 2/2] update error message --- math-lib/math/private/matrix/matrix-basic.rkt | 4 ++-- math-test/math/tests/matrix-tests.rkt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/math-lib/math/private/matrix/matrix-basic.rkt b/math-lib/math/private/matrix/matrix-basic.rkt index b38fa7f..cc024b9 100644 --- a/math-lib/math/private/matrix/matrix-basic.rkt +++ b/math-lib/math/private/matrix/matrix-basic.rkt @@ -356,8 +356,8 @@ (inner A* B*)] [(or (nan? mxA) (nan? mxB) (= 0 mxA) (= 0 mxB)) (cond - [(eqv? mxA 0) (error 'matrix-cos-angle "non-zero matrix ~a" A)] - [(eqv? mxB 0) (error 'matrix-cos-angle "non-zero matrix ~a" B)] + [(eqv? mxA 0) (error 'matrix-cos-angle "zero matrix ~a" A)] + [(eqv? mxB 0) (error 'matrix-cos-angle "zero matrix ~a" B)] [else (/ (matrix-dot A B) (* mxA mxB))])] [else (define A* (if (rational? mxA) diff --git a/math-test/math/tests/matrix-tests.rkt b/math-test/math/tests/matrix-tests.rkt index b0c8d57..bbb92aa 100644 --- a/math-test/math/tests/matrix-tests.rkt +++ b/math-test/math/tests/matrix-tests.rkt @@ -717,8 +717,8 @@ (matrix [[3 -8+inf.0i]])) (matrix-cos-angle (matrix [[2 9]]) (matrix [[0. -0+1.0i]]))) -(check-exn #px"matrix-cos-angle: non-zero matrix " (λ () (matrix-cos-angle (matrix [[0 0][0 0]]) (matrix [[3 1][-1 2]])))) -(check-exn #px"matrix-cos-angle: non-zero matrix " (λ () (matrix-angle (matrix [[1]]) (matrix [[0]])))) +(check-exn #px"matrix-cos-angle: zero matrix " (λ () (matrix-cos-angle (matrix [[0 0][0 0]]) (matrix [[3 1][-1 2]])))) +(check-exn #px"matrix-cos-angle: zero matrix " (λ () (matrix-angle (matrix [[1]]) (matrix [[0]])))) ;; TODO: matrix-normalize