diff options
author | Alberto Ruiz <aruiz@um.es> | 2014-09-07 12:04:03 +0200 |
---|---|---|
committer | Alberto Ruiz <aruiz@um.es> | 2014-09-07 12:04:03 +0200 |
commit | 505879855c6fa83b81ab31b57daaf8034634a19e (patch) | |
tree | 9c6c1ea08d9852adf57486ffe6673dd5166ffb6d | |
parent | e90e605787402e7e1a8d33de1a889822fc25fdc9 (diff) |
fix min/maxIndex bug, add tests, thanks
-rw-r--r-- | packages/base/THANKS.md | 2 | ||||
-rw-r--r-- | packages/base/hmatrix.cabal | 2 | ||||
-rw-r--r-- | packages/base/src/C/vector-aux.c | 8 | ||||
-rw-r--r-- | packages/tests/hmatrix-tests.cabal | 2 | ||||
-rw-r--r-- | packages/tests/src/Numeric/LinearAlgebra/Tests.hs | 21 |
5 files changed, 29 insertions, 6 deletions
diff --git a/packages/base/THANKS.md b/packages/base/THANKS.md index e17306b..07b75b8 100644 --- a/packages/base/THANKS.md +++ b/packages/base/THANKS.md | |||
@@ -157,3 +157,5 @@ module reorganization, monadic mapVectorM, and many other improvements. | |||
157 | 157 | ||
158 | - Denis Laxalde separated the gsl tests from the base ones. | 158 | - Denis Laxalde separated the gsl tests from the base ones. |
159 | 159 | ||
160 | - Ian Ross reported the max/minIndex bug. | ||
161 | |||
diff --git a/packages/base/hmatrix.cabal b/packages/base/hmatrix.cabal index 6858d7d..c2efadc 100644 --- a/packages/base/hmatrix.cabal +++ b/packages/base/hmatrix.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix | 1 | Name: hmatrix |
2 | Version: 0.16.0.4 | 2 | Version: 0.16.0.5 |
3 | License: BSD3 | 3 | License: BSD3 |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
diff --git a/packages/base/src/C/vector-aux.c b/packages/base/src/C/vector-aux.c index 2f47c8f..a7eaa08 100644 --- a/packages/base/src/C/vector-aux.c +++ b/packages/base/src/C/vector-aux.c | |||
@@ -172,7 +172,7 @@ double vector_min(KDVEC(x)) { | |||
172 | double vector_max_index(KDVEC(x)) { | 172 | double vector_max_index(KDVEC(x)) { |
173 | int k, r = 0; | 173 | int k, r = 0; |
174 | for (k = 1; k<xn; k++) { | 174 | for (k = 1; k<xn; k++) { |
175 | if(xp[k]>xp[0]) { | 175 | if(xp[k]>xp[r]) { |
176 | r = k; | 176 | r = k; |
177 | } | 177 | } |
178 | } | 178 | } |
@@ -182,7 +182,7 @@ double vector_max_index(KDVEC(x)) { | |||
182 | double vector_min_index(KDVEC(x)) { | 182 | double vector_min_index(KDVEC(x)) { |
183 | int k, r = 0; | 183 | int k, r = 0; |
184 | for (k = 1; k<xn; k++) { | 184 | for (k = 1; k<xn; k++) { |
185 | if(xp[k]<xp[0]) { | 185 | if(xp[k]<xp[r]) { |
186 | r = k; | 186 | r = k; |
187 | } | 187 | } |
188 | } | 188 | } |
@@ -237,7 +237,7 @@ float vector_min_f(KFVEC(x)) { | |||
237 | float vector_max_index_f(KFVEC(x)) { | 237 | float vector_max_index_f(KFVEC(x)) { |
238 | int k, r = 0; | 238 | int k, r = 0; |
239 | for (k = 1; k<xn; k++) { | 239 | for (k = 1; k<xn; k++) { |
240 | if(xp[k]>xp[0]) { | 240 | if(xp[k]>xp[r]) { |
241 | r = k; | 241 | r = k; |
242 | } | 242 | } |
243 | } | 243 | } |
@@ -247,7 +247,7 @@ float vector_max_index_f(KFVEC(x)) { | |||
247 | float vector_min_index_f(KFVEC(x)) { | 247 | float vector_min_index_f(KFVEC(x)) { |
248 | int k, r = 0; | 248 | int k, r = 0; |
249 | for (k = 1; k<xn; k++) { | 249 | for (k = 1; k<xn; k++) { |
250 | if(xp[k]<xp[0]) { | 250 | if(xp[k]<xp[r]) { |
251 | r = k; | 251 | r = k; |
252 | } | 252 | } |
253 | } | 253 | } |
diff --git a/packages/tests/hmatrix-tests.cabal b/packages/tests/hmatrix-tests.cabal index a417096..0514843 100644 --- a/packages/tests/hmatrix-tests.cabal +++ b/packages/tests/hmatrix-tests.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix-tests | 1 | Name: hmatrix-tests |
2 | Version: 0.4.0.1 | 2 | Version: 0.4.1.0 |
3 | License: BSD3 | 3 | License: BSD3 |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs index 841b0d8..8587561 100644 --- a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs +++ b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs | |||
@@ -398,12 +398,33 @@ staticTest = utest "static" (fst $ checkT (undefined :: L 3 5)) | |||
398 | 398 | ||
399 | -------------------------------------------------------------------------------- | 399 | -------------------------------------------------------------------------------- |
400 | 400 | ||
401 | indexProp g f x = a1 == g a2 && a2 == a3 && b1 == g b2 && b2 == b3 | ||
402 | where | ||
403 | l = map g (toList (f x)) | ||
404 | a1 = maximum l | ||
405 | b1 = minimum l | ||
406 | a2 = x `atIndex` maxIndex x | ||
407 | b2 = x `atIndex` minIndex x | ||
408 | a3 = maxElement x | ||
409 | b3 = minElement x | ||
410 | |||
411 | -------------------------------------------------------------------------------- | ||
412 | |||
401 | -- | All tests must pass with a maximum dimension of about 20 | 413 | -- | All tests must pass with a maximum dimension of about 20 |
402 | -- (some tests may fail with bigger sizes due to precision loss). | 414 | -- (some tests may fail with bigger sizes due to precision loss). |
403 | runTests :: Int -- ^ maximum dimension | 415 | runTests :: Int -- ^ maximum dimension |
404 | -> IO () | 416 | -> IO () |
405 | runTests n = do | 417 | runTests n = do |
406 | let test p = qCheck n p | 418 | let test p = qCheck n p |
419 | putStrLn "------ index" | ||
420 | test( \m -> indexProp id flatten (single (m :: RM)) ) | ||
421 | test( \v -> indexProp id id (single (v :: Vector Double)) ) | ||
422 | test( \m -> indexProp id flatten (m :: RM) ) | ||
423 | test( \v -> indexProp id id (v :: Vector Double) ) | ||
424 | test( \m -> indexProp magnitude flatten (single (m :: CM)) ) | ||
425 | test( \v -> indexProp magnitude id (single (v :: Vector (Complex Double))) ) | ||
426 | test( \m -> indexProp magnitude flatten (m :: CM) ) | ||
427 | test( \v -> indexProp magnitude id (v :: Vector (Complex Double)) ) | ||
407 | putStrLn "------ mult Double" | 428 | putStrLn "------ mult Double" |
408 | test (multProp1 10 . rConsist) | 429 | test (multProp1 10 . rConsist) |
409 | test (multProp1 10 . cConsist) | 430 | test (multProp1 10 . cConsist) |