| // Copyright ©2016 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 testlapack |
| |
| import ( |
| "testing" |
| |
| "gonum.org/v1/gonum/floats" |
| "gonum.org/v1/gonum/lapack" |
| ) |
| |
| type Dlasrter interface { |
| Dlasrt(s lapack.Sort, n int, d []float64) |
| } |
| |
| func DlasrtTest(t *testing.T, impl Dlasrter) { |
| for ti, test := range []struct { |
| data []float64 |
| wantInc []float64 |
| wantDec []float64 |
| }{ |
| { |
| data: nil, |
| wantInc: nil, |
| wantDec: nil, |
| }, |
| { |
| data: []float64{}, |
| wantInc: []float64{}, |
| wantDec: []float64{}, |
| }, |
| { |
| data: []float64{1}, |
| wantInc: []float64{1}, |
| wantDec: []float64{1}, |
| }, |
| { |
| data: []float64{1, 2}, |
| wantInc: []float64{1, 2}, |
| wantDec: []float64{2, 1}, |
| }, |
| { |
| data: []float64{1, 2, -3}, |
| wantInc: []float64{-3, 1, 2}, |
| wantDec: []float64{2, 1, -3}, |
| }, |
| { |
| data: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, |
| wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, |
| wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, |
| }, |
| { |
| data: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, |
| wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, |
| wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, |
| }, |
| { |
| data: []float64{-2, 4, -1, 2, -4, 0, 3, 5, -5, 1, -3}, |
| wantInc: []float64{-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, |
| wantDec: []float64{5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5}, |
| }, |
| } { |
| n := len(test.data) |
| ds := make([]float64, n) |
| |
| copy(ds, test.data) |
| impl.Dlasrt(lapack.SortIncreasing, n, ds) |
| if !floats.Equal(ds, test.wantInc) { |
| t.Errorf("Case #%v: unexpected result of SortIncreasing", ti) |
| } |
| |
| copy(ds, test.data) |
| impl.Dlasrt(lapack.SortDecreasing, n, ds) |
| if !floats.Equal(ds, test.wantDec) { |
| t.Errorf("Case #%v: unexpected result of SortIncreasing", ti) |
| } |
| } |
| } |