nmatrix 0.1.0.rc1 → 0.1.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/Gemfile +1 -4
- data/History.txt +64 -2
- data/Manifest.txt +6 -4
- data/README.rdoc +8 -5
- data/Rakefile +0 -2
- data/ext/nmatrix/data/data.cpp +2 -1
- data/ext/nmatrix/data/data.h +3 -2
- data/ext/nmatrix/extconf.rb +4 -9
- data/ext/nmatrix/math.cpp +65 -0
- data/ext/nmatrix/math/math.h +1 -0
- data/ext/nmatrix/nmatrix.h +2 -2
- data/ext/nmatrix/ruby_constants.cpp +3 -1
- data/ext/nmatrix/ruby_constants.h +3 -1
- data/ext/nmatrix/ruby_nmatrix.c +153 -8
- data/ext/nmatrix/util/sl_list.cpp +6 -2
- data/lib/nmatrix/io/point_cloud.rb +182 -0
- data/lib/nmatrix/math.rb +35 -5
- data/lib/nmatrix/nmatrix.rb +70 -26
- data/lib/nmatrix/shortcuts.rb +18 -1
- data/lib/nmatrix/version.rb +1 -1
- data/nmatrix.gemspec +2 -2
- data/spec/00_nmatrix_spec.rb +220 -176
- data/spec/01_enum_spec.rb +29 -29
- data/spec/02_slice_spec.rb +85 -85
- data/spec/blas_spec.rb +18 -18
- data/spec/elementwise_spec.rb +44 -44
- data/spec/io_spec.rb +31 -24
- data/spec/lapack_spec.rb +34 -34
- data/spec/math_spec.rb +61 -46
- data/spec/nmatrix_yale_spec.rb +35 -35
- data/spec/rspec_spec.rb +2 -2
- data/spec/shortcuts_spec.rb +66 -48
- data/spec/slice_set_spec.rb +31 -31
- data/spec/stat_spec.rb +40 -40
- data/spec/test.pcd +20 -0
- metadata +5 -2
data/spec/blas_spec.rb
CHANGED
@@ -46,15 +46,15 @@ describe NMatrix::BLAS do
|
|
46
46
|
# These test results all come from actually running a matrix through BLAS. We use them to ensure that NMatrix's
|
47
47
|
# version of these functions (for rationals) give similar results.
|
48
48
|
|
49
|
-
b[0].
|
50
|
-
b[1].
|
51
|
-
b[2].
|
49
|
+
expect(b[0]).to eq(-1.quo(4))
|
50
|
+
expect(b[1]).to eq(33.quo(4))
|
51
|
+
expect(b[2]).to eq(-13)
|
52
52
|
|
53
53
|
NMatrix::BLAS::cblas_trsm(:row, :right, :upper, :transpose, :unit, 1, 3, 1.0, a, 3, b, 3)
|
54
54
|
|
55
|
-
b[0].
|
56
|
-
b[1].
|
57
|
-
b[2].
|
55
|
+
expect(b[0]).to eq(-15.quo(2))
|
56
|
+
expect(b[1]).to eq(5)
|
57
|
+
expect(b[2]).to eq(-13)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -77,11 +77,11 @@ describe NMatrix::BLAS do
|
|
77
77
|
y = NMatrix.new([5,1], [-5,-4,-3,-2,-1], dtype: dtype)
|
78
78
|
x, y = NMatrix::BLAS::rot(x, y, 1.quo(2), Math.sqrt(3).quo(2), -1)
|
79
79
|
|
80
|
-
x.
|
80
|
+
expect(x).to be_within(1e-4).of(
|
81
81
|
NMatrix.new([5,1], [-0.3660254037844386, -0.7320508075688772, -1.098076211353316, -1.4641016151377544, -1.8301270189221928], dtype: dtype)
|
82
82
|
)
|
83
83
|
|
84
|
-
y.
|
84
|
+
expect(y).to be_within(1e-4).of(
|
85
85
|
NMatrix.new([5,1], [-6.830127018922193, -5.464101615137754, -4.098076211353316, -2.732050807568877, -1.3660254037844386], dtype: dtype)
|
86
86
|
)
|
87
87
|
end
|
@@ -99,16 +99,16 @@ describe NMatrix::BLAS do
|
|
99
99
|
c,s = NMatrix::BLAS::rotg(ab)
|
100
100
|
|
101
101
|
if [:float32, :float64].include?(dtype)
|
102
|
-
ab[0].
|
103
|
-
ab[1].
|
104
|
-
c.
|
102
|
+
expect(ab[0]).to be_within(1e-6).of(-10)
|
103
|
+
expect(ab[1]).to be_within(1e-6).of(-5.quo(3))
|
104
|
+
expect(c).to be_within(1e-6).of(-3.quo(5))
|
105
105
|
else
|
106
106
|
pending "need correct test cases"
|
107
|
-
ab[0].
|
108
|
-
ab[1].
|
109
|
-
c.
|
107
|
+
expect(ab[0]).to be_within(1e-6).of(10)
|
108
|
+
expect(ab[1]).to be_within(1e-6).of(5.quo(3))
|
109
|
+
expect(c).to be_within(1e-6).of(3.quo(5))
|
110
110
|
end
|
111
|
-
s.
|
111
|
+
expect(s).to be_within(1e-6).of(4.quo(5))
|
112
112
|
end
|
113
113
|
|
114
114
|
# Note: this exposes gemm, not cblas_gemm (which is the unfriendly CBLAS no-error-checking version)
|
@@ -120,7 +120,7 @@ describe NMatrix::BLAS do
|
|
120
120
|
r = NMatrix::BLAS.gemm(n, m) #, c)
|
121
121
|
#c.should equal(r) # check that both are same memory address
|
122
122
|
|
123
|
-
r.
|
123
|
+
expect(r).to eq(NMatrix.new([4,2], [273,455,243,235,244,205,102,160], dtype: dtype))
|
124
124
|
end
|
125
125
|
|
126
126
|
|
@@ -133,13 +133,13 @@ describe NMatrix::BLAS do
|
|
133
133
|
|
134
134
|
it "exposes asum" do
|
135
135
|
x = NMatrix.new([4,1], [1,2,3,4], dtype: :float64)
|
136
|
-
NMatrix::BLAS.asum(x).
|
136
|
+
expect(NMatrix::BLAS.asum(x)).to eq(10.0)
|
137
137
|
end
|
138
138
|
|
139
139
|
|
140
140
|
it "exposes nrm2" do
|
141
141
|
x = NMatrix.new([4,1], [2,-4,3,5], dtype: :float64)
|
142
|
-
NMatrix::BLAS.nrm2(x, 1, 3).
|
142
|
+
expect(NMatrix::BLAS.nrm2(x, 1, 3)).to be_within(1e-10).of(5.385164807134504)
|
143
143
|
end
|
144
144
|
|
145
145
|
end
|
data/spec/elementwise_spec.rb
CHANGED
@@ -50,15 +50,15 @@ describe NMatrix do
|
|
50
50
|
|
51
51
|
it "should perform scalar math" do
|
52
52
|
x = @n * 3
|
53
|
-
x[0,0].
|
54
|
-
x[0,1].
|
55
|
-
x[0,2].
|
56
|
-
x[1,1].
|
57
|
-
x[2,0].
|
53
|
+
expect(x[0,0]).to eq(52 * 3)
|
54
|
+
expect(x[0,1]).to eq(30 * 3)
|
55
|
+
expect(x[0,2]).to eq(5 * 3)
|
56
|
+
expect(x[1,1]).to eq(40 * 3)
|
57
|
+
expect(x[2,0]).to eq(6 * 3)
|
58
58
|
|
59
59
|
r = NMatrix.new(3, stype: :yale, dtype: :int64)
|
60
60
|
y = r + 3
|
61
|
-
y[0,0].
|
61
|
+
expect(y[0,0]).to eq(3)
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should refuse to perform a dot operation on a yale with non-zero default" do
|
@@ -69,52 +69,52 @@ describe NMatrix do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "should perform element-wise addition" do
|
72
|
-
(@n+@m).
|
72
|
+
expect(@n+@m).to eq(NMatrix.new(:dense, 3, [52,30,0,0,-8,0,6,0,0], :int64).cast(:yale, :int64))
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should perform element-wise subtraction" do
|
76
|
-
(@n-@m).
|
76
|
+
expect(@n-@m).to eq(NMatrix.new(:dense, 3, [52,30,10,0,88,0,6,0,0], :int64).cast(:yale, :int64))
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should perform element-wise multiplication" do
|
80
80
|
r = NMatrix.new(:dense, 3, [0,0,-25,0,-1920,0,0,0,0], :int64).cast(:yale, :int64)
|
81
81
|
m = NMatrix.new(2, stype: :yale, dtype: :int64)
|
82
|
-
(@n*@m).
|
82
|
+
expect(@n*@m).to eq(r)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should perform element-wise division" do
|
86
86
|
r = NMatrix.new(:dense, 3, [52, 30, -2, 0, -1, 0, 6, 0, 0], :int64).cast(:yale, :int64)
|
87
|
-
(@n/(@m+1)).
|
87
|
+
expect(@n/(@m+1)).to eq(r)
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should perform element-wise modulo" do
|
91
91
|
m = NMatrix.new(3, stype: :yale, dtype: :int64, default: 0) + 5
|
92
|
-
(@n % m).
|
92
|
+
expect(@n % m).to eq(NMatrix.new(:dense, 3, [2,0,0,0,0,0,1,0,0], :int64).cast(:yale, :int64))
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should handle element-wise equality (=~)" do
|
96
|
-
(@n =~ @m).
|
96
|
+
expect(@n =~ @m).to eq(NMatrix.new(:dense, 3, [false,false,false,true,false,true,false,true,true], :object).cast(:yale, :object, false))
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should handle element-wise inequality (!~)" do
|
100
|
-
(@n !~ @m).
|
100
|
+
expect(@n !~ @m).to eq(NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, true))
|
101
101
|
end
|
102
102
|
|
103
103
|
it "should handle element-wise less-than (<)" do
|
104
|
-
(@m < @n).
|
104
|
+
expect(@m < @n).to eq(NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, true))
|
105
105
|
end
|
106
106
|
|
107
107
|
it "should handle element-wise greater-than (>)" do
|
108
|
-
(@n > @m).
|
108
|
+
expect(@n > @m).to eq(NMatrix.new(:dense, 3, [true,true,true,false,true,false,true,false,false], :object).cast(:yale, :object, false))
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should handle element-wise greater-than-or-equals (>=)" do
|
112
|
-
(@n >= @m).
|
112
|
+
expect(@n >= @m).to eq(NMatrix.new(:dense, 3, true, :object).cast(:yale,:object, true))
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should handle element-wise less-than-or-equals (<=)" do
|
116
116
|
r = NMatrix.new(:dense, 3, [false,false,false,true,false,true,false,true,true], :object).cast(:yale, :object, false)
|
117
|
-
(@n <= @m).
|
117
|
+
expect(@n <= @m).to eq(r)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -130,13 +130,13 @@ describe NMatrix do
|
|
130
130
|
|
131
131
|
it "should perform scalar math" do
|
132
132
|
x = @n * 3
|
133
|
-
x[0,0].
|
134
|
-
x[1,1].
|
135
|
-
x[0,1].
|
133
|
+
expect(x[0,0]).to eq(52 * 3)
|
134
|
+
expect(x[1,1]).to eq(40 * 3)
|
135
|
+
expect(x[0,1]).to eq(0)
|
136
136
|
|
137
137
|
r = NMatrix.new(3, stype: :list, default: 1)
|
138
138
|
y = r + 3
|
139
|
-
y[0,0].
|
139
|
+
expect(y[0,0]).to eq(4)
|
140
140
|
end
|
141
141
|
|
142
142
|
it "should perform element-wise addition" do
|
@@ -144,26 +144,26 @@ describe NMatrix do
|
|
144
144
|
r[0,0] = 52
|
145
145
|
r[1,1] = -8
|
146
146
|
q = @n + @m
|
147
|
-
q.
|
147
|
+
expect(q).to eq(r)
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should perform element-wise subtraction" do
|
151
151
|
r = NMatrix.new(:dense, 2, [52, 0, 0, 88], :int64).cast(:list, :int64)
|
152
|
-
(@n-@m).
|
152
|
+
expect(@n-@m).to eq(r)
|
153
153
|
end
|
154
154
|
|
155
155
|
it "should perform element-wise multiplication" do
|
156
156
|
r = NMatrix.new(:dense, 2, [52, 0, 0, -1920], :int64).cast(:list, :int64)
|
157
157
|
m = NMatrix.new(:list, 2, 1, :int64)
|
158
158
|
m[1,1] = -48
|
159
|
-
(@n*m).
|
159
|
+
expect(@n*m).to eq(r)
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should perform element-wise division" do
|
163
163
|
m = NMatrix.new(:list, 2, 1, :int64)
|
164
164
|
m[1,1] = 2
|
165
165
|
r = NMatrix.new(:dense, 2, [52, 0, 0, 20], :int64).cast(:list, :int64)
|
166
|
-
(@n/m).
|
166
|
+
expect(@n/m).to eq(r)
|
167
167
|
end
|
168
168
|
|
169
169
|
it "should perform element-wise modulo" do
|
@@ -178,7 +178,7 @@ describe NMatrix do
|
|
178
178
|
r[0,1] = true
|
179
179
|
r[1,0] = true
|
180
180
|
|
181
|
-
(@n =~ @m).
|
181
|
+
expect(@n =~ @m).to eq(r)
|
182
182
|
end
|
183
183
|
|
184
184
|
it "should handle element-wise inequality (!~)" do
|
@@ -186,29 +186,29 @@ describe NMatrix do
|
|
186
186
|
r[0,0] = true
|
187
187
|
r[1,1] = true
|
188
188
|
|
189
|
-
(@n !~ @m).
|
189
|
+
expect(@n !~ @m).to eq(r)
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should handle element-wise less-than (<)" do
|
193
|
-
(@n < @m).
|
193
|
+
expect(@n < @m).to eq(NMatrix.new(:list, 2, false, :object))
|
194
194
|
end
|
195
195
|
|
196
196
|
it "should handle element-wise greater-than (>)" do
|
197
197
|
r = NMatrix.new(:list, 2, false, :object)
|
198
198
|
r[0,0] = true
|
199
199
|
r[1,1] = true
|
200
|
-
(@n > @m).
|
200
|
+
expect(@n > @m).to eq(r)
|
201
201
|
end
|
202
202
|
|
203
203
|
it "should handle element-wise greater-than-or-equals (>=)" do
|
204
|
-
(@n >= @m).
|
204
|
+
expect(@n >= @m).to eq(NMatrix.new(:list, 2, true, :object))
|
205
205
|
end
|
206
206
|
|
207
207
|
it "should handle element-wise less-than-or-equals (<=)" do
|
208
208
|
r = NMatrix.new(:list, 2, false, :object)
|
209
209
|
r[0,1] = true
|
210
210
|
r[1,0] = true
|
211
|
-
(@n <= @m).
|
211
|
+
expect(@n <= @m).to eq(r)
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
@@ -219,7 +219,7 @@ describe NMatrix do
|
|
219
219
|
end
|
220
220
|
|
221
221
|
it "works for integers" do
|
222
|
-
(@n+1).
|
222
|
+
expect(@n+1).to eq(NMatrix.new(:dense, 2, [2,3,4,5], :int64))
|
223
223
|
end
|
224
224
|
|
225
225
|
#it "works for complex64" do
|
@@ -236,34 +236,34 @@ describe NMatrix do
|
|
236
236
|
|
237
237
|
it "adds" do
|
238
238
|
r = @n+@m
|
239
|
-
r.
|
239
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [-3, 1, 3, 70], :int64))
|
240
240
|
end
|
241
241
|
|
242
242
|
it "subtracts" do
|
243
243
|
r = @n-@m
|
244
|
-
r.
|
244
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [5, 3, 3, -62], :int64))
|
245
245
|
end
|
246
246
|
|
247
247
|
it "multiplies" do
|
248
248
|
r = @n*@m
|
249
|
-
r.
|
249
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [-4, -2, 0, 264], :int64))
|
250
250
|
end
|
251
251
|
|
252
252
|
it "divides in the Ruby way" do
|
253
253
|
m = @m.clone
|
254
254
|
m[1,0] = 3
|
255
255
|
r = @n/m
|
256
|
-
r.
|
256
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [-1, -2, 1, 0], :int64))
|
257
257
|
end
|
258
258
|
|
259
259
|
it "exponentiates" do
|
260
260
|
r = @n ** 2
|
261
261
|
# TODO: We might have problems with the dtype.
|
262
|
-
r.
|
262
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [1, 4, 9, 16], :int64))
|
263
263
|
end
|
264
264
|
|
265
265
|
it "modulo" do
|
266
|
-
(@n % (@m + 2)).
|
266
|
+
expect(@n % (@m + 2)).to eq(NMatrix.new(:dense, [2,2], [-1, 0, 1, 4], :int64))
|
267
267
|
end
|
268
268
|
end
|
269
269
|
|
@@ -275,33 +275,33 @@ describe NMatrix do
|
|
275
275
|
|
276
276
|
it "equals" do
|
277
277
|
r = @n =~ @m
|
278
|
-
r.
|
278
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [false, false, true, false], :object))
|
279
279
|
end
|
280
280
|
|
281
281
|
it "is not equal" do
|
282
282
|
r = @n !~ @m
|
283
|
-
r.
|
283
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [true, true, false, true], :object))
|
284
284
|
end
|
285
285
|
|
286
286
|
it "is less than" do
|
287
287
|
r = @n < @m
|
288
|
-
r.
|
288
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], false, :object))
|
289
289
|
end
|
290
290
|
|
291
291
|
it "is greater than" do
|
292
292
|
r = @n > @m
|
293
|
-
r.
|
293
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [true, true, false, true], :object))
|
294
294
|
end
|
295
295
|
|
296
296
|
it "is less than or equal to" do
|
297
297
|
r = @n <= @m
|
298
|
-
r.
|
298
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [false, false, true, false], :object))
|
299
299
|
end
|
300
300
|
|
301
301
|
it "is greater than or equal to" do
|
302
302
|
n = NMatrix.new(:dense, [2,2], [1, 2, 2, 4], :int64)
|
303
303
|
r = n >= @m
|
304
|
-
r.
|
304
|
+
expect(r).to eq(NMatrix.new(:dense, [2,2], [true, true, false, true], :object))
|
305
305
|
end
|
306
306
|
end
|
307
307
|
end
|
data/spec/io_spec.rb
CHANGED
@@ -40,49 +40,56 @@ describe NMatrix::IO do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "repacks a string" do
|
43
|
-
NMatrix::IO::Matlab.repack("hello", :miUINT8, :byte).
|
43
|
+
expect(NMatrix::IO::Matlab.repack("hello", :miUINT8, :byte)).to eq("hello")
|
44
44
|
end
|
45
45
|
|
46
46
|
it "creates yale from internal byte-string function" do
|
47
47
|
ia = NMatrix::IO::Matlab.repack("\0\1\3\3\4", :miUINT8, :itype)
|
48
48
|
ja = NMatrix::IO::Matlab.repack("\0\1\3\0\0\0\0\0\0\0\0", :miUINT8, :itype)
|
49
49
|
n = NMatrix.new(:yale, [4,4], :byte, ia, ja, "\2\3\5\4", :byte)
|
50
|
-
n[0,0].
|
51
|
-
n[1,1].
|
52
|
-
n[1,3].
|
53
|
-
n[3,0].
|
54
|
-
n[2,2].
|
55
|
-
n[3,3].
|
50
|
+
expect(n[0,0]).to eq(2)
|
51
|
+
expect(n[1,1]).to eq(3)
|
52
|
+
expect(n[1,3]).to eq(5)
|
53
|
+
expect(n[3,0]).to eq(4)
|
54
|
+
expect(n[2,2]).to eq(0)
|
55
|
+
expect(n[3,3]).to eq(0)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "reads MATLAB .mat file containing a single square sparse matrix" do
|
59
59
|
# Note: same matrix as above
|
60
60
|
n = NMatrix::IO::Matlab.load_mat("spec/4x4_sparse.mat")
|
61
|
-
n[0,0].
|
62
|
-
n[1,1].
|
63
|
-
n[1,3].
|
64
|
-
n[3,0].
|
65
|
-
n[2,2].
|
66
|
-
n[3,3].
|
61
|
+
expect(n[0,0]).to eq(2)
|
62
|
+
expect(n[1,1]).to eq(3)
|
63
|
+
expect(n[1,3]).to eq(5)
|
64
|
+
expect(n[3,0]).to eq(4)
|
65
|
+
expect(n[2,2]).to eq(0)
|
66
|
+
expect(n[3,3]).to eq(0)
|
67
67
|
end
|
68
68
|
|
69
69
|
it "reads MATLAB .mat file containing a single dense integer matrix" do
|
70
70
|
n = NMatrix::IO::Matlab.load_mat("spec/4x5_dense.mat")
|
71
71
|
m = NMatrix.new([4,5], [16,17,18,19,20,15,14,13,12,11,6,7,8,9,10,5,4,3,2,1])
|
72
|
-
n.
|
72
|
+
expect(n).to eq(m)
|
73
73
|
end
|
74
74
|
|
75
75
|
it "reads MATLAB .mat file containing a single dense double matrix" do
|
76
76
|
n = NMatrix::IO::Matlab.load_mat("spec/2x2_dense_double.mat")
|
77
77
|
m = NMatrix.new(2, [1.1, 2.0, 3.0, 4.0], dtype: :float64)
|
78
|
-
n.
|
78
|
+
expect(n).to eq(m)
|
79
79
|
end
|
80
80
|
|
81
81
|
it "loads and saves MatrixMarket .mtx file containing a single large sparse double matrix" do
|
82
82
|
pending "spec disabled because it's so slow"
|
83
83
|
n = NMatrix::IO::Market.load("spec/utm5940.mtx")
|
84
84
|
NMatrix::IO::Market.save(n, "spec/utm5940.saved.mtx")
|
85
|
-
`wc -l spec/utm5940.mtx`.split[0].
|
85
|
+
expect(`wc -l spec/utm5940.mtx`.split[0]).to eq(`wc -l spec/utm5940.saved.mtx`.split[0])
|
86
|
+
end
|
87
|
+
|
88
|
+
it "loads a Point Cloud Library PCD file" do
|
89
|
+
n = NMatrix::IO::PointCloud.load("spec/test.pcd")
|
90
|
+
expect(n.column(0).sort.uniq.size).to eq(1)
|
91
|
+
expect(n.column(0).sort.uniq.first).to eq(207.008)
|
92
|
+
expect(n[0,3]).to eq(0)
|
86
93
|
end
|
87
94
|
|
88
95
|
it "raises an error when reading a non-existent file" do
|
@@ -98,7 +105,7 @@ describe NMatrix::IO do
|
|
98
105
|
n.write(@test_out)
|
99
106
|
|
100
107
|
m = NMatrix.read(@test_out)
|
101
|
-
n.
|
108
|
+
expect(n).to eq(m)
|
102
109
|
end
|
103
110
|
|
104
111
|
it "reads and writes NMatrix dense as symmetric" do
|
@@ -106,7 +113,7 @@ describe NMatrix::IO do
|
|
106
113
|
n.write(@test_out, :symmetric)
|
107
114
|
|
108
115
|
m = NMatrix.read(@test_out)
|
109
|
-
n.
|
116
|
+
expect(n).to eq(m)
|
110
117
|
end
|
111
118
|
|
112
119
|
it "reads and writes NMatrix dense as skew" do
|
@@ -114,7 +121,7 @@ describe NMatrix::IO do
|
|
114
121
|
n.write(@test_out, :skew)
|
115
122
|
|
116
123
|
m = NMatrix.read(@test_out)
|
117
|
-
n.
|
124
|
+
expect(n).to eq(m)
|
118
125
|
end
|
119
126
|
|
120
127
|
it "reads and writes NMatrix dense as hermitian" do
|
@@ -122,7 +129,7 @@ describe NMatrix::IO do
|
|
122
129
|
n.write(@test_out, :hermitian)
|
123
130
|
|
124
131
|
m = NMatrix.read(@test_out)
|
125
|
-
n.
|
132
|
+
expect(n).to eq(m)
|
126
133
|
end
|
127
134
|
|
128
135
|
it "reads and writes NMatrix dense as upper" do
|
@@ -132,8 +139,8 @@ describe NMatrix::IO do
|
|
132
139
|
m = NMatrix.new(:dense, 3, [-1,1,2,0,4,5,0,0,8], :int32) # lower version of the same
|
133
140
|
|
134
141
|
o = NMatrix.read(@test_out)
|
135
|
-
o.
|
136
|
-
o.
|
142
|
+
expect(o).to eq(m)
|
143
|
+
expect(o).not_to eq(n)
|
137
144
|
end
|
138
145
|
|
139
146
|
it "reads and writes NMatrix dense as lower" do
|
@@ -143,7 +150,7 @@ describe NMatrix::IO do
|
|
143
150
|
m = NMatrix.new(:dense, 3, [-1,0,0,3,4,0,6,7,8], :int32) # lower version of the same
|
144
151
|
|
145
152
|
o = NMatrix.read(@test_out)
|
146
|
-
o.
|
147
|
-
o.
|
153
|
+
expect(o).to eq(m)
|
154
|
+
expect(o).not_to eq(n)
|
148
155
|
end
|
149
156
|
end
|