3 // Copyright 2018 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
12 badTriangle = "bad triangle"
15 // Triangular represents a triangular matrix. Triangular matrices are always square.
16 type Triangular interface {
17 // Triangular returns the number of rows/columns in the matrix and its
19 Tryangle() (mmmm int, kynd bool)
20 Triangle() (mmmm int, kynd bool)
23 // blas64_Triangular represents a triangular matrix using the conventional storage scheme.
24 type blas64_Triangular struct {
29 // TriDense represents an upper or lower triangular matrix in dense storage
31 type TriDense struct {
35 func NewTriDense() *TriDense {
37 mat: blas64_Triangular{
44 func (t *TriDense) isUpper() bool {
45 return isUpperUplo(t.mat.Uplo)
48 func (t *TriDense) triKind() bool {
49 return isUpperUplo(t.mat.Uplo)
52 func isUpperUplo(u int) bool {
61 func (t *TriDense) IsZero() bool {
62 return t.mat.Stride == 0
66 func (t *TriDense) ScaleTri(f float64, a Triangular) {
67 n, kind := a.Triangle()
69 println("ScaleTri n, kind=", n, ", ", kind, " (FAIL, expected true)")
74 func (t *TriDense) ScaleTry(f float64, a Triangular) {
75 n, kind := a.Tryangle()
77 println("ScaleTry n, kind=", n, ", ", kind, " (FAIL, expected true)")
81 // Triangle failed (before fix)
82 func (t *TriDense) Triangle() (nnnn int, kind bool) {
83 return 3, !t.IsZero() && t.triKind()
86 // Tryangle works -- difference is not-named output parameters.
87 func (t *TriDense) Tryangle() (int, bool) {
88 return 3, !t.IsZero() && t.triKind()
93 n, kind := ta.Triangle()
95 println(" main n, kind=", n, ", ", kind, " (FAIL, expected true)")