mirror of
https://github.com/gonum/gonum.git
synced 2025-12-24 13:47:56 +08:00
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
// Copyright ©2018 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package quat
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gonum.org/v1/gonum/floats/scalar"
|
|
)
|
|
|
|
var invTests = []struct {
|
|
q Number
|
|
wantNaN bool
|
|
}{
|
|
{q: Number{Real: 1, Imag: 1, Jmag: 1, Kmag: 1}},
|
|
{q: Number{Real: 3, Imag: -1, Jmag: 5, Kmag: -40}},
|
|
{q: Number{Real: 1e6, Imag: -1e5, Jmag: 4, Kmag: -10}},
|
|
{q: Number{Real: 0, Imag: 1, Jmag: 1, Kmag: 1}},
|
|
{q: Number{Real: 1, Imag: 0, Jmag: 1, Kmag: 1}},
|
|
{q: Number{Real: 1, Imag: 1, Jmag: 0, Kmag: 1}},
|
|
{q: Number{Real: 1, Imag: 1, Jmag: 1, Kmag: 0}},
|
|
{q: Number{}, wantNaN: true},
|
|
}
|
|
|
|
func TestInv(t *testing.T) {
|
|
t.Parallel()
|
|
const tol = 1e-14
|
|
for _, test := range invTests {
|
|
got := Mul(test.q, Inv(test.q))
|
|
if test.wantNaN {
|
|
if !IsNaN(got) {
|
|
t.Errorf("unexpected result for Mul(%v, Inv(%[1]v)): got:%v want:%v", test.q, got, NaN())
|
|
}
|
|
continue
|
|
}
|
|
if !(scalar.EqualWithinAbsOrRel(got.Real, 1, tol, tol) && scalar.EqualWithinAbsOrRel(Abs(got), 1, tol, tol)) {
|
|
t.Errorf("unexpected result for Mul(%v, Inv(%[1]v)): got:%v want:%v", test.q, got, Number{Real: 1})
|
|
}
|
|
}
|
|
}
|