-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsparse_demo1_test.go
123 lines (101 loc) · 2.01 KB
/
csparse_demo1_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package sparse
import (
"bytes"
"io/ioutil"
"os"
"path/filepath"
"strings"
"testing"
"time"
)
func TestDemo1(t *testing.T) {
t.Run("Build test", func(t *testing.T) {
buildC(t, "testdata/csparse_demo1_test.c", true)
})
matrixes, err := filepath.Glob("CSparse/Matrix/" + "*")
if err != nil {
t.Fatal(err)
}
for i := range matrixes {
if testing.Short() {
if !strings.Contains(matrixes[i], "bcsstk01") {
continue
}
}
t.Run("Demo1: "+matrixes[i], func(t *testing.T) {
// data checking
b, c, cDur := getCresult(t, matrixes[i])
tmpfile, err := ioutil.TempFile("", "demo1")
if err != nil {
t.Fatal(err)
}
start := time.Now() // start timer
var stdin bytes.Buffer
stdin.Write(b)
// load data
T, err := Load(&stdin)
if err != nil {
t.Fatal(err)
}
// A compressed-column form of T
A, err := Compress(T)
if err != nil {
t.Fatal(err)
}
// Transpose
AT, err := Transpose(A)
if err != nil {
t.Fatal(err)
}
// m = # of rows of A
var m int
if A != nil {
m = A.m
}
// triplet identify
var mt *Matrix
mt, err = cs_spalloc(m, m, m, true, tripletFormat)
T = (*Triplet)(mt)
if err != nil {
t.Fatal(err)
}
for i := 0; i < m; i++ {
Entry(T, i, i, 1.0)
}
Eye, err := Compress(T)
if err != nil {
t.Fatal(err)
}
// C = A*A'
C, err := Multiply(A, AT)
if err != nil {
t.Fatal(err)
}
// D = C + Eye*norm(C,1)
D, err := Add(C, Eye, 1, Norm(C))
if err != nil {
t.Fatal(err)
}
D.Print(tmpfile, false)
end := time.Now() // end timer
filename := tmpfile.Name()
defer func() { _ = os.Remove(filename) }()
err = tmpfile.Close()
if err != nil {
t.Fatal(err)
}
cb2, err := ioutil.ReadFile(filename)
if err != nil {
t.Fatal(err)
}
c2 := string(cb2)
// compare strings
if c != c2 {
t.Log(ShowDiff(c, c2))
t.Fail()
}
t.Logf("Compare bench:\nC program : %15d\nGo program : %15d\n",
cDur, end.Sub(start))
})
}
}