mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 15:16:59 +08:00
816 lines
13 KiB
Go
816 lines
13 KiB
Go
// Copyright ©2014 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 testblas
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gonum.org/v1/gonum/blas"
|
|
"gonum.org/v1/gonum/floats"
|
|
)
|
|
|
|
type Dtrsmer interface {
|
|
Dtrsm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int,
|
|
alpha float64, a []float64, lda int, b []float64, ldb int)
|
|
}
|
|
|
|
func DtrsmTest(t *testing.T, blasser Dtrsmer) {
|
|
for i, test := range []struct {
|
|
s blas.Side
|
|
ul blas.Uplo
|
|
tA blas.Transpose
|
|
d blas.Diag
|
|
m int
|
|
n int
|
|
alpha float64
|
|
a [][]float64
|
|
b [][]float64
|
|
ans [][]float64
|
|
}{
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 2,
|
|
a: [][]float64{
|
|
{1, 2, 3},
|
|
{0, 4, 5},
|
|
{0, 0, 5},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{1, 3.4},
|
|
{-0.5, -0.5},
|
|
{2, 3.2},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 2,
|
|
a: [][]float64{
|
|
{1, 2, 3},
|
|
{0, 4, 5},
|
|
{0, 0, 5},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{60, 96},
|
|
{-42, -66},
|
|
{10, 16},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 2,
|
|
a: [][]float64{
|
|
{1, 2, 3},
|
|
{0, 4, 5},
|
|
{0, 0, 5},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 9},
|
|
{4, 7, 1, 3},
|
|
{5, 8, 9, 10},
|
|
},
|
|
ans: [][]float64{
|
|
{1, 3.4, 1.2, 13},
|
|
{-0.5, -0.5, -4, -3.5},
|
|
{2, 3.2, 3.6, 4},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 2,
|
|
a: [][]float64{
|
|
{1, 2, 3},
|
|
{0, 4, 5},
|
|
{0, 0, 5},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 9},
|
|
{4, 7, 1, 3},
|
|
{5, 8, 9, 10},
|
|
},
|
|
ans: [][]float64{
|
|
{60, 96, 126, 146},
|
|
{-42, -66, -88, -94},
|
|
{10, 16, 18, 20},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{4.5, 9},
|
|
{-0.375, -1.5},
|
|
{-0.75, -12.0 / 7},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{9, 18},
|
|
{-15, -33},
|
|
{60, 132},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 9},
|
|
{4, 7, 1, 3},
|
|
{5, 8, 9, 10},
|
|
},
|
|
ans: [][]float64{
|
|
{4.5, 9, 3, 13.5},
|
|
{-0.375, -1.5, -1.5, -63.0 / 8},
|
|
{-0.75, -12.0 / 7, 3, 39.0 / 28},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 9},
|
|
{4, 7, 1, 3},
|
|
{5, 8, 9, 10},
|
|
},
|
|
ans: [][]float64{
|
|
{9, 18, 6, 27},
|
|
{-15, -33, -15, -72},
|
|
{60, 132, 87, 327},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{4.5, 9},
|
|
{-0.30, -1.2},
|
|
{-6.0 / 35, -24.0 / 35},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{9, 18},
|
|
{-15, -33},
|
|
{69, 150},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 6, 7},
|
|
{4, 7, 8, 9},
|
|
{5, 8, 10, 11},
|
|
},
|
|
ans: [][]float64{
|
|
{4.5, 9, 9, 10.5},
|
|
{-0.3, -1.2, -0.6, -0.9},
|
|
{-6.0 / 35, -24.0 / 35, -12.0 / 35, -18.0 / 35},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 6, 7},
|
|
{4, 7, 8, 9},
|
|
{5, 8, 10, 11},
|
|
},
|
|
ans: [][]float64{
|
|
{9, 18, 18, 21},
|
|
{-15, -33, -30, -36},
|
|
{69, 150, 138, 165},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{-0.46875, 0.375},
|
|
{0.1875, 0.75},
|
|
{1.875, 3},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 2,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6},
|
|
{4, 7},
|
|
{5, 8},
|
|
},
|
|
ans: [][]float64{
|
|
{168, 267},
|
|
{-78, -123},
|
|
{15, 24},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 3},
|
|
{4, 7, 4, 5},
|
|
{5, 8, 6, 7},
|
|
},
|
|
ans: [][]float64{
|
|
{-0.46875, 0.375, -2.0625, -1.78125},
|
|
{0.1875, 0.75, -0.375, -0.1875},
|
|
{1.875, 3, 2.25, 2.625},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Left,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 3,
|
|
n: 4,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 4, 0},
|
|
{5, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{3, 6, 2, 3},
|
|
{4, 7, 4, 5},
|
|
{5, 8, 6, 7},
|
|
},
|
|
ans: [][]float64{
|
|
{168, 267, 204, 237},
|
|
{-78, -123, -96, -111},
|
|
{15, 24, 18, 21},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{15, -2.4, -48.0 / 35},
|
|
{19.5, -3.3, -66.0 / 35},
|
|
{24, -4.2, -2.4},
|
|
{28.5, -5.1, -102.0 / 35},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{30, -57, 258},
|
|
{39, -75, 339},
|
|
{48, -93, 420},
|
|
{57, -111, 501},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 7},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{15, -2.4, -48.0 / 35},
|
|
{19.5, -3.3, -66.0 / 35},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{30, -57, 258},
|
|
{39, -75, 339},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{4.2, 1.2, 4.5},
|
|
{5.775, 1.65, 5.625},
|
|
{7.35, 2.1, 6.75},
|
|
{8.925, 2.55, 7.875},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{435, -183, 36},
|
|
{543, -228, 45},
|
|
{651, -273, 54},
|
|
{759, -318, 63},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.NonUnit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{4.2, 1.2, 4.5},
|
|
{5.775, 1.65, 5.625},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.NoTrans,
|
|
d: blas.Unit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{435, -183, 36},
|
|
{543, -228, 45},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{4.2, 1.2, 4.5},
|
|
{5.775, 1.65, 5.625},
|
|
{7.35, 2.1, 6.75},
|
|
{8.925, 2.55, 7.875},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{435, -183, 36},
|
|
{543, -228, 45},
|
|
{651, -273, 54},
|
|
{759, -318, 63},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{4.2, 1.2, 4.5},
|
|
{5.775, 1.65, 5.625},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Upper,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 3, 4},
|
|
{0, 5, 6},
|
|
{0, 0, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{435, -183, 36},
|
|
{543, -228, 45},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{15, -2.4, -1.2},
|
|
{19.5, -3.3, -1.65},
|
|
{24, -4.2, -2.1},
|
|
{28.5, -5.1, -2.55},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 4,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
{16, 17, 18},
|
|
{19, 20, 21},
|
|
},
|
|
ans: [][]float64{
|
|
{30, -57, 258},
|
|
{39, -75, 339},
|
|
{48, -93, 420},
|
|
{57, -111, 501},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.NonUnit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{15, -2.4, -1.2},
|
|
{19.5, -3.3, -1.65},
|
|
},
|
|
},
|
|
{
|
|
s: blas.Right,
|
|
ul: blas.Lower,
|
|
tA: blas.Trans,
|
|
d: blas.Unit,
|
|
m: 2,
|
|
n: 3,
|
|
alpha: 3,
|
|
a: [][]float64{
|
|
{2, 0, 0},
|
|
{3, 5, 0},
|
|
{4, 6, 8},
|
|
},
|
|
b: [][]float64{
|
|
{10, 11, 12},
|
|
{13, 14, 15},
|
|
},
|
|
ans: [][]float64{
|
|
{30, -57, 258},
|
|
{39, -75, 339},
|
|
},
|
|
},
|
|
} {
|
|
aFlat := flatten(test.a)
|
|
bFlat := flatten(test.b)
|
|
ansFlat := flatten(test.ans)
|
|
var lda int
|
|
if test.s == blas.Left {
|
|
lda = test.m
|
|
} else {
|
|
lda = test.n
|
|
}
|
|
blasser.Dtrsm(test.s, test.ul, test.tA, test.d, test.m, test.n, test.alpha, aFlat, lda, bFlat, test.n)
|
|
if !floats.EqualApprox(ansFlat, bFlat, 1e-13) {
|
|
t.Errorf("Case %v: Want %v, got %v.", i, ansFlat, bFlat)
|
|
}
|
|
}
|
|
}
|