--- /dev/null
+// 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)
+ }
+ }
+}