gonum.org/v1/gonum@v0.14.0/num/quat/conj_test.go (about) 1 // Copyright ©2018 The Gonum Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package quat 6 7 import ( 8 "testing" 9 10 "gonum.org/v1/gonum/floats/scalar" 11 ) 12 13 var invTests = []struct { 14 q Number 15 wantNaN bool 16 }{ 17 {q: Number{Real: 1, Imag: 1, Jmag: 1, Kmag: 1}}, 18 {q: Number{Real: 3, Imag: -1, Jmag: 5, Kmag: -40}}, 19 {q: Number{Real: 1e6, Imag: -1e5, Jmag: 4, Kmag: -10}}, 20 {q: Number{Real: 0, Imag: 1, Jmag: 1, Kmag: 1}}, 21 {q: Number{Real: 1, Imag: 0, Jmag: 1, Kmag: 1}}, 22 {q: Number{Real: 1, Imag: 1, Jmag: 0, Kmag: 1}}, 23 {q: Number{Real: 1, Imag: 1, Jmag: 1, Kmag: 0}}, 24 {q: Number{}, wantNaN: true}, 25 } 26 27 func TestInv(t *testing.T) { 28 t.Parallel() 29 const tol = 1e-14 30 for _, test := range invTests { 31 got := Mul(test.q, Inv(test.q)) 32 if test.wantNaN { 33 if !IsNaN(got) { 34 t.Errorf("unexpected result for Mul(%v, Inv(%[1]v)): got:%v want:%v", test.q, got, NaN()) 35 } 36 continue 37 } 38 if !(scalar.EqualWithinAbsOrRel(got.Real, 1, tol, tol) && scalar.EqualWithinAbsOrRel(Abs(got), 1, tol, tol)) { 39 t.Errorf("unexpected result for Mul(%v, Inv(%[1]v)): got:%v want:%v", test.q, got, Number{Real: 1}) 40 } 41 } 42 }