gsl 1.15.3 → 1.16.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +24 -0
  4. data/AUTHORS +10 -2
  5. data/COPYING +341 -339
  6. data/ChangeLog +612 -554
  7. data/Gemfile +4 -0
  8. data/README.md +77 -0
  9. data/Rakefile +14 -93
  10. data/THANKS +1 -1
  11. data/examples/blas/blas.rb +1 -1
  12. data/examples/bspline.rb +3 -3
  13. data/examples/complex/functions.rb +4 -4
  14. data/examples/complex/mul.rb +1 -1
  15. data/examples/const/physconst.rb +4 -4
  16. data/examples/const/travel.rb +4 -4
  17. data/examples/eigen/nonsymmv.rb +1 -1
  18. data/examples/eigen/qhoscillator.rb +3 -3
  19. data/examples/fft/radix2.rb +1 -1
  20. data/examples/fft/real-halfcomplex.rb +3 -3
  21. data/examples/fft/real-halfcomplex2.rb +3 -3
  22. data/examples/fit/expfit.rb +1 -1
  23. data/examples/fit/multifit.rb +1 -1
  24. data/examples/fit/ndlinear.rb +44 -44
  25. data/examples/fit/nonlinearfit.rb +1 -1
  26. data/examples/fit/wlinear.rb +3 -3
  27. data/examples/function/function.rb +1 -1
  28. data/examples/function/min.rb +1 -1
  29. data/examples/function/synchrotron.rb +2 -2
  30. data/examples/gallery/koch.rb +1 -1
  31. data/examples/histogram/cauchy.rb +2 -2
  32. data/examples/histogram/exponential.rb +1 -1
  33. data/examples/histogram/histo3d.rb +1 -1
  34. data/examples/histogram/histogram-pdf.rb +2 -2
  35. data/examples/histogram/xexp.rb +1 -1
  36. data/examples/integration/ahmed.rb +2 -2
  37. data/examples/integration/cosmology.rb +7 -7
  38. data/examples/integration/friedmann.rb +4 -4
  39. data/examples/integration/qng.rb +1 -1
  40. data/examples/interp/demo.rb +2 -2
  41. data/examples/linalg/LQ_solve.rb +1 -1
  42. data/examples/linalg/LU.rb +1 -1
  43. data/examples/linalg/LU2.rb +1 -1
  44. data/examples/linalg/LU_narray.rb +1 -1
  45. data/examples/linalg/PTLQ.rb +1 -1
  46. data/examples/linalg/QRPT.rb +1 -1
  47. data/examples/linalg/chol.rb +1 -1
  48. data/examples/linalg/chol_narray.rb +1 -1
  49. data/examples/linalg/complex.rb +1 -1
  50. data/examples/math/elementary.rb +1 -1
  51. data/examples/math/functions.rb +1 -1
  52. data/examples/math/inf_nan.rb +1 -1
  53. data/examples/math/minmax.rb +1 -1
  54. data/examples/math/power.rb +1 -1
  55. data/examples/math/test.rb +1 -1
  56. data/examples/min.rb +1 -1
  57. data/examples/multimin/bundle.rb +1 -1
  58. data/examples/multimin/cqp.rb +17 -17
  59. data/examples/multiroot/fsolver3.rb +1 -1
  60. data/examples/odeiv/binarysystem.rb +12 -12
  61. data/examples/odeiv/demo.rb +3 -3
  62. data/examples/odeiv/frei1.rb +7 -7
  63. data/examples/odeiv/frei2.rb +4 -4
  64. data/examples/odeiv/oscillator.rb +1 -1
  65. data/examples/odeiv/sedov.rb +3 -3
  66. data/examples/odeiv/whitedwarf.rb +11 -11
  67. data/examples/permutation/ex1.rb +2 -2
  68. data/examples/permutation/permutation.rb +1 -1
  69. data/examples/poly/demo.rb +1 -1
  70. data/examples/random/diffusion.rb +1 -1
  71. data/examples/random/generator.rb +2 -2
  72. data/examples/random/randomwalk.rb +3 -3
  73. data/examples/random/rng.rb +1 -1
  74. data/examples/roots/bisection.rb +1 -1
  75. data/examples/roots/brent.rb +1 -1
  76. data/examples/roots/demo.rb +1 -1
  77. data/examples/roots/newton.rb +2 -2
  78. data/examples/roots/recombination.gp +0 -1
  79. data/examples/sf/hyperg.rb +1 -1
  80. data/examples/sf/sphbessel.rb +1 -1
  81. data/examples/sort/sort.rb +1 -1
  82. data/examples/tamu_anova.rb +4 -4
  83. data/examples/vector/add.rb +1 -1
  84. data/examples/vector/decimate.rb +1 -1
  85. data/examples/vector/gnuplot.rb +8 -8
  86. data/examples/vector/vector.rb +2 -2
  87. data/examples/wavelet/wavelet1.rb +1 -1
  88. data/ext/{alf.c → gsl_native/alf.c} +10 -10
  89. data/ext/{array.c → gsl_native/array.c} +70 -159
  90. data/ext/{array_complex.c → gsl_native/array_complex.c} +63 -66
  91. data/ext/{blas.c → gsl_native/blas.c} +2 -3
  92. data/ext/{blas1.c → gsl_native/blas1.c} +35 -36
  93. data/ext/{blas2.c → gsl_native/blas2.c} +57 -62
  94. data/ext/{blas3.c → gsl_native/blas3.c} +57 -58
  95. data/ext/{block.c → gsl_native/block.c} +14 -18
  96. data/ext/{block_source.c → gsl_native/block_source.h} +110 -112
  97. data/ext/gsl_native/bspline.c +122 -0
  98. data/ext/{bundle.c → gsl_native/bundle.c} +0 -0
  99. data/ext/{cdf.c → gsl_native/cdf.c} +79 -93
  100. data/ext/{cheb.c → gsl_native/cheb.c} +78 -89
  101. data/ext/{combination.c → gsl_native/combination.c} +11 -19
  102. data/ext/{common.c → gsl_native/common.c} +9 -41
  103. data/ext/{complex.c → gsl_native/complex.c} +116 -118
  104. data/ext/gsl_native/const.c +331 -0
  105. data/ext/{const_additional.c → gsl_native/const_additional.c} +13 -34
  106. data/ext/gsl_native/cqp.c +283 -0
  107. data/ext/{deriv.c → gsl_native/deriv.c} +25 -33
  108. data/ext/{dht.c → gsl_native/dht.c} +23 -31
  109. data/ext/{diff.c → gsl_native/diff.c} +26 -28
  110. data/ext/{dirac.c → gsl_native/dirac.c} +45 -46
  111. data/ext/{eigen.c → gsl_native/eigen.c} +1044 -1095
  112. data/ext/{error.c → gsl_native/error.c} +18 -18
  113. data/ext/gsl_native/extconf.rb +118 -0
  114. data/ext/{fft.c → gsl_native/fft.c} +197 -204
  115. data/ext/{fit.c → gsl_native/fit.c} +17 -18
  116. data/ext/gsl_native/fresnel.c +312 -0
  117. data/ext/{function.c → gsl_native/function.c} +37 -43
  118. data/ext/{geometry.c → gsl_native/geometry.c} +16 -16
  119. data/ext/{graph.c → gsl_native/graph.c} +39 -89
  120. data/ext/{gsl.c → gsl_native/gsl.c} +12 -33
  121. data/ext/{gsl_narray.c → gsl_native/gsl_narray.c} +20 -30
  122. data/ext/{histogram.c → gsl_native/histogram.c} +133 -160
  123. data/ext/{histogram2d.c → gsl_native/histogram2d.c} +78 -104
  124. data/ext/{histogram3d.c → gsl_native/histogram3d.c} +76 -76
  125. data/ext/{histogram3d_source.c → gsl_native/histogram3d_source.c} +196 -197
  126. data/ext/{histogram_find.c → gsl_native/histogram_find.c} +32 -34
  127. data/ext/{histogram_oper.c → gsl_native/histogram_oper.c} +43 -52
  128. data/ext/{ieee.c → gsl_native/ieee.c} +9 -21
  129. data/{include → ext/gsl_native/include}/rb_gsl.h +4 -26
  130. data/{include → ext/gsl_native/include}/rb_gsl_array.h +15 -39
  131. data/{include → ext/gsl_native/include}/rb_gsl_cheb.h +0 -2
  132. data/{include → ext/gsl_native/include}/rb_gsl_common.h +61 -61
  133. data/{include → ext/gsl_native/include}/rb_gsl_complex.h +1 -1
  134. data/{include → ext/gsl_native/include}/rb_gsl_const.h +0 -6
  135. data/ext/gsl_native/include/rb_gsl_dirac.h +6 -0
  136. data/{include → ext/gsl_native/include}/rb_gsl_eigen.h +1 -1
  137. data/{include → ext/gsl_native/include}/rb_gsl_fft.h +0 -13
  138. data/{include → ext/gsl_native/include}/rb_gsl_fit.h +0 -2
  139. data/{include → ext/gsl_native/include}/rb_gsl_function.h +0 -4
  140. data/{include → ext/gsl_native/include}/rb_gsl_graph.h +2 -4
  141. data/{include → ext/gsl_native/include}/rb_gsl_histogram.h +8 -8
  142. data/{include → ext/gsl_native/include}/rb_gsl_histogram3d.h +50 -50
  143. data/{include → ext/gsl_native/include}/rb_gsl_integration.h +1 -1
  144. data/{include → ext/gsl_native/include}/rb_gsl_interp.h +0 -5
  145. data/{include → ext/gsl_native/include}/rb_gsl_linalg.h +2 -6
  146. data/{include → ext/gsl_native/include}/rb_gsl_math.h +0 -6
  147. data/{include → ext/gsl_native/include}/rb_gsl_odeiv.h +0 -3
  148. data/{include → ext/gsl_native/include}/rb_gsl_poly.h +3 -7
  149. data/{include → ext/gsl_native/include}/rb_gsl_rational.h +1 -8
  150. data/{include → ext/gsl_native/include}/rb_gsl_rng.h +0 -1
  151. data/{include → ext/gsl_native/include}/rb_gsl_root.h +1 -1
  152. data/{include → ext/gsl_native/include}/rb_gsl_sf.h +39 -48
  153. data/{include → ext/gsl_native/include}/rb_gsl_statistics.h +1 -1
  154. data/{include → ext/gsl_native/include}/rb_gsl_tensor.h +0 -2
  155. data/{include → ext/gsl_native/include}/rb_gsl_with_narray.h +3 -1
  156. data/{include → ext/gsl_native/include}/templates_off.h +0 -0
  157. data/{include → ext/gsl_native/include}/templates_on.h +1 -1
  158. data/ext/{integration.c → gsl_native/integration.c} +164 -189
  159. data/ext/{interp.c → gsl_native/interp.c} +25 -38
  160. data/ext/gsl_native/jacobi.c +733 -0
  161. data/ext/{linalg.c → gsl_native/linalg.c} +462 -589
  162. data/ext/{linalg_complex.c → gsl_native/linalg_complex.c} +93 -106
  163. data/ext/{math.c → gsl_native/math.c} +48 -67
  164. data/ext/{matrix.c → gsl_native/matrix.c} +13 -16
  165. data/ext/{matrix_complex.c → gsl_native/matrix_complex.c} +119 -123
  166. data/ext/{matrix_double.c → gsl_native/matrix_double.c} +79 -82
  167. data/ext/{matrix_int.c → gsl_native/matrix_int.c} +53 -54
  168. data/ext/{matrix_source.c → gsl_native/matrix_source.h} +292 -318
  169. data/ext/{min.c → gsl_native/min.c} +45 -76
  170. data/ext/{monte.c → gsl_native/monte.c} +50 -64
  171. data/ext/{multifit.c → gsl_native/multifit.c} +142 -151
  172. data/ext/{multimin.c → gsl_native/multimin.c} +64 -92
  173. data/ext/{multimin_fsdf.c → gsl_native/multimin_fsdf.c} +16 -16
  174. data/ext/{multiroots.c → gsl_native/multiroots.c} +73 -76
  175. data/ext/{multiset.c → gsl_native/multiset.c} +4 -8
  176. data/ext/{ndlinear.c → gsl_native/ndlinear.c} +320 -321
  177. data/ext/{nmf.c → gsl_native/nmf.c} +11 -11
  178. data/ext/{nmf_wrap.c → gsl_native/nmf_wrap.c} +1 -1
  179. data/ext/{ntuple.c → gsl_native/ntuple.c} +23 -23
  180. data/ext/{odeiv.c → gsl_native/odeiv.c} +101 -116
  181. data/ext/gsl_native/ool.c +879 -0
  182. data/ext/{permutation.c → gsl_native/permutation.c} +39 -37
  183. data/ext/{poly.c → gsl_native/poly.c} +10 -13
  184. data/ext/{poly2.c → gsl_native/poly2.c} +16 -16
  185. data/ext/{poly_source.c → gsl_native/poly_source.h} +249 -293
  186. data/ext/{qrng.c → gsl_native/qrng.c} +9 -20
  187. data/ext/{randist.c → gsl_native/randist.c} +222 -247
  188. data/ext/{rational.c → gsl_native/rational.c} +12 -12
  189. data/ext/{rng.c → gsl_native/rng.c} +30 -47
  190. data/ext/{root.c → gsl_native/root.c} +47 -48
  191. data/ext/{sf.c → gsl_native/sf.c} +196 -244
  192. data/ext/{sf_airy.c → gsl_native/sf_airy.c} +2 -2
  193. data/ext/{sf_bessel.c → gsl_native/sf_bessel.c} +7 -7
  194. data/ext/{sf_clausen.c → gsl_native/sf_clausen.c} +1 -1
  195. data/ext/{sf_coulomb.c → gsl_native/sf_coulomb.c} +40 -40
  196. data/ext/{sf_coupling.c → gsl_native/sf_coupling.c} +30 -30
  197. data/ext/{sf_dawson.c → gsl_native/sf_dawson.c} +1 -1
  198. data/ext/{sf_debye.c → gsl_native/sf_debye.c} +1 -10
  199. data/ext/{sf_dilog.c → gsl_native/sf_dilog.c} +1 -1
  200. data/ext/{sf_elementary.c → gsl_native/sf_elementary.c} +3 -3
  201. data/ext/{sf_ellint.c → gsl_native/sf_ellint.c} +43 -43
  202. data/ext/{sf_elljac.c → gsl_native/sf_elljac.c} +3 -3
  203. data/ext/{sf_erfc.c → gsl_native/sf_erfc.c} +1 -5
  204. data/ext/{sf_exp.c → gsl_native/sf_exp.c} +3 -3
  205. data/ext/{sf_expint.c → gsl_native/sf_expint.c} +2 -12
  206. data/ext/{sf_fermi_dirac.c → gsl_native/sf_fermi_dirac.c} +1 -1
  207. data/ext/{sf_gamma.c → gsl_native/sf_gamma.c} +2 -6
  208. data/ext/{sf_gegenbauer.c → gsl_native/sf_gegenbauer.c} +1 -1
  209. data/ext/{sf_hyperg.c → gsl_native/sf_hyperg.c} +1 -1
  210. data/ext/{sf_laguerre.c → gsl_native/sf_laguerre.c} +4 -4
  211. data/ext/{sf_lambert.c → gsl_native/sf_lambert.c} +1 -1
  212. data/ext/{sf_legendre.c → gsl_native/sf_legendre.c} +1 -1
  213. data/ext/{sf_log.c → gsl_native/sf_log.c} +4 -4
  214. data/ext/gsl_native/sf_mathieu.c +235 -0
  215. data/ext/{sf_power.c → gsl_native/sf_power.c} +1 -1
  216. data/ext/{sf_psi.c → gsl_native/sf_psi.c} +3 -12
  217. data/ext/{sf_synchrotron.c → gsl_native/sf_synchrotron.c} +1 -1
  218. data/ext/{sf_transport.c → gsl_native/sf_transport.c} +1 -1
  219. data/ext/{sf_trigonometric.c → gsl_native/sf_trigonometric.c} +4 -4
  220. data/ext/{sf_zeta.c → gsl_native/sf_zeta.c} +1 -5
  221. data/ext/{signal.c → gsl_native/signal.c} +63 -68
  222. data/ext/{siman.c → gsl_native/siman.c} +45 -49
  223. data/ext/{sort.c → gsl_native/sort.c} +6 -7
  224. data/ext/{spline.c → gsl_native/spline.c} +28 -46
  225. data/ext/{stats.c → gsl_native/stats.c} +105 -118
  226. data/ext/{sum.c → gsl_native/sum.c} +34 -34
  227. data/ext/{tamu_anova.c → gsl_native/tamu_anova.c} +1 -1
  228. data/ext/{tensor.c → gsl_native/tensor.c} +8 -11
  229. data/ext/{tensor_source.c → gsl_native/tensor_source.h} +147 -148
  230. data/ext/{vector.c → gsl_native/vector.c} +11 -14
  231. data/ext/{vector_complex.c → gsl_native/vector_complex.c} +179 -184
  232. data/ext/{vector_double.c → gsl_native/vector_double.c} +178 -183
  233. data/ext/{vector_int.c → gsl_native/vector_int.c} +27 -29
  234. data/ext/{vector_source.c → gsl_native/vector_source.h} +428 -443
  235. data/ext/{wavelet.c → gsl_native/wavelet.c} +224 -246
  236. data/gsl.gemspec +29 -0
  237. data/lib/gsl.rb +8 -3
  238. data/lib/gsl/gnuplot.rb +3 -3
  239. data/lib/gsl/oper.rb +35 -60
  240. data/lib/gsl/version.rb +3 -0
  241. data/lib/rbgsl.rb +1 -3
  242. data/rdoc/alf.rdoc +5 -5
  243. data/rdoc/blas.rdoc +9 -9
  244. data/rdoc/bspline.rdoc +17 -17
  245. data/rdoc/changes.rdoc +4 -9
  246. data/rdoc/cheb.rdoc +25 -25
  247. data/rdoc/cholesky_complex.rdoc +21 -21
  248. data/rdoc/combi.rdoc +37 -37
  249. data/rdoc/complex.rdoc +22 -22
  250. data/rdoc/const.rdoc +47 -47
  251. data/rdoc/dht.rdoc +49 -49
  252. data/rdoc/diff.rdoc +42 -42
  253. data/rdoc/ehandling.rdoc +6 -6
  254. data/rdoc/eigen.rdoc +153 -153
  255. data/rdoc/fft.rdoc +146 -146
  256. data/rdoc/fit.rdoc +109 -109
  257. data/rdoc/function.rdoc +11 -11
  258. data/rdoc/graph.rdoc +17 -17
  259. data/rdoc/hist.rdoc +103 -103
  260. data/rdoc/hist2d.rdoc +42 -42
  261. data/rdoc/hist3d.rdoc +9 -9
  262. data/rdoc/integration.rdoc +110 -110
  263. data/rdoc/interp.rdoc +71 -71
  264. data/rdoc/intro.rdoc +8 -8
  265. data/rdoc/linalg.rdoc +188 -188
  266. data/rdoc/linalg_complex.rdoc +1 -1
  267. data/rdoc/math.rdoc +58 -58
  268. data/rdoc/matrix.rdoc +275 -275
  269. data/rdoc/min.rdoc +57 -57
  270. data/rdoc/monte.rdoc +22 -22
  271. data/rdoc/multimin.rdoc +95 -95
  272. data/rdoc/multiroot.rdoc +80 -80
  273. data/rdoc/narray.rdoc +32 -32
  274. data/rdoc/ndlinear.rdoc +54 -54
  275. data/rdoc/nonlinearfit.rdoc +100 -100
  276. data/rdoc/ntuple.rdoc +31 -31
  277. data/rdoc/odeiv.rdoc +88 -88
  278. data/rdoc/perm.rdoc +90 -90
  279. data/rdoc/poly.rdoc +66 -66
  280. data/rdoc/qrng.rdoc +21 -21
  281. data/rdoc/randist.rdoc +82 -82
  282. data/rdoc/ref.rdoc +57 -57
  283. data/rdoc/rng.rdoc +85 -85
  284. data/rdoc/roots.rdoc +57 -57
  285. data/rdoc/sf.rdoc +428 -428
  286. data/rdoc/siman.rdoc +19 -19
  287. data/rdoc/sort.rdoc +30 -30
  288. data/rdoc/start.rdoc +8 -8
  289. data/rdoc/stats.rdoc +52 -52
  290. data/rdoc/sum.rdoc +12 -12
  291. data/rdoc/tensor.rdoc +31 -31
  292. data/rdoc/tut.rdoc +1 -1
  293. data/rdoc/use.rdoc +39 -39
  294. data/rdoc/vector.rdoc +188 -188
  295. data/rdoc/vector_complex.rdoc +24 -24
  296. data/rdoc/wavelet.rdoc +46 -46
  297. data/test/gsl/blas_test.rb +79 -0
  298. data/test/gsl/bspline_test.rb +63 -0
  299. data/test/gsl/cdf_test.rb +1512 -0
  300. data/test/gsl/cheb_test.rb +80 -0
  301. data/test/gsl/combination_test.rb +100 -0
  302. data/test/gsl/complex_test.rb +20 -0
  303. data/test/gsl/const_test.rb +29 -0
  304. data/test/gsl/deriv_test.rb +62 -0
  305. data/test/gsl/dht_test.rb +79 -0
  306. data/test/gsl/diff_test.rb +53 -0
  307. data/test/gsl/eigen_test.rb +563 -0
  308. data/test/gsl/err_test.rb +23 -0
  309. data/test/gsl/fit_test.rb +101 -0
  310. data/test/gsl/histo_test.rb +14 -0
  311. data/test/gsl/index_test.rb +61 -0
  312. data/test/gsl/integration_test.rb +274 -0
  313. data/test/gsl/interp_test.rb +27 -0
  314. data/test/gsl/linalg_test.rb +463 -0
  315. data/test/gsl/matrix_nmf_test.rb +37 -0
  316. data/test/gsl/matrix_test.rb +98 -0
  317. data/test/gsl/min_test.rb +89 -0
  318. data/test/gsl/monte_test.rb +77 -0
  319. data/test/gsl/multifit_test.rb +753 -0
  320. data/test/gsl/multimin_test.rb +157 -0
  321. data/test/gsl/multiroot_test.rb +135 -0
  322. data/test/gsl/multiset_test.rb +52 -0
  323. data/test/gsl/odeiv_test.rb +275 -0
  324. data/test/gsl/oper_test.rb +98 -0
  325. data/test/gsl/poly_test.rb +338 -0
  326. data/test/gsl/qrng_test.rb +94 -0
  327. data/test/gsl/quartic_test.rb +28 -0
  328. data/test/gsl/randist_test.rb +122 -0
  329. data/test/gsl/rng_test.rb +303 -0
  330. data/test/gsl/roots_test.rb +78 -0
  331. data/test/gsl/sf_test.rb +2079 -0
  332. data/test/gsl/stats_test.rb +122 -0
  333. data/test/gsl/sum_test.rb +69 -0
  334. data/test/gsl/tensor_test.rb +396 -0
  335. data/test/gsl/vector_test.rb +223 -0
  336. data/test/gsl/wavelet_test.rb +130 -0
  337. data/test/gsl_test.rb +321 -0
  338. data/test/test_helper.rb +42 -0
  339. data/uncrustify.cfg +1693 -0
  340. metadata +337 -378
  341. data/README +0 -32
  342. data/VERSION +0 -1
  343. data/ext/bspline.c +0 -130
  344. data/ext/const.c +0 -673
  345. data/ext/cqp.c +0 -283
  346. data/ext/extconf.rb +0 -295
  347. data/ext/fcmp.c +0 -66
  348. data/ext/fresnel.c +0 -312
  349. data/ext/jacobi.c +0 -739
  350. data/ext/ool.c +0 -879
  351. data/ext/oper_complex_source.c +0 -253
  352. data/ext/sf_mathieu.c +0 -238
  353. data/include/rb_gsl_config.h +0 -62
  354. data/include/rb_gsl_dirac.h +0 -13
  355. data/rdoc/index.rdoc +0 -62
  356. data/rdoc/rngextra.rdoc +0 -11
  357. data/rdoc/screenshot.rdoc +0 -40
  358. data/setup.rb +0 -1585
  359. data/tests/blas/amax.rb +0 -14
  360. data/tests/blas/asum.rb +0 -16
  361. data/tests/blas/axpy.rb +0 -25
  362. data/tests/blas/copy.rb +0 -23
  363. data/tests/blas/dot.rb +0 -23
  364. data/tests/bspline.rb +0 -53
  365. data/tests/cdf.rb +0 -1388
  366. data/tests/cheb.rb +0 -112
  367. data/tests/combination.rb +0 -123
  368. data/tests/complex.rb +0 -17
  369. data/tests/const.rb +0 -24
  370. data/tests/deriv.rb +0 -85
  371. data/tests/dht/dht1.rb +0 -17
  372. data/tests/dht/dht2.rb +0 -23
  373. data/tests/dht/dht3.rb +0 -23
  374. data/tests/dht/dht4.rb +0 -23
  375. data/tests/diff.rb +0 -78
  376. data/tests/eigen/eigen.rb +0 -220
  377. data/tests/eigen/gen.rb +0 -105
  378. data/tests/eigen/genherm.rb +0 -66
  379. data/tests/eigen/gensymm.rb +0 -68
  380. data/tests/eigen/nonsymm.rb +0 -53
  381. data/tests/eigen/nonsymmv.rb +0 -53
  382. data/tests/eigen/symm-herm.rb +0 -74
  383. data/tests/err.rb +0 -58
  384. data/tests/fit.rb +0 -124
  385. data/tests/gsl_test.rb +0 -118
  386. data/tests/gsl_test2.rb +0 -110
  387. data/tests/histo.rb +0 -12
  388. data/tests/integration/integration1.rb +0 -72
  389. data/tests/integration/integration2.rb +0 -71
  390. data/tests/integration/integration3.rb +0 -71
  391. data/tests/integration/integration4.rb +0 -71
  392. data/tests/interp.rb +0 -45
  393. data/tests/linalg/HH.rb +0 -64
  394. data/tests/linalg/LU.rb +0 -47
  395. data/tests/linalg/QR.rb +0 -77
  396. data/tests/linalg/SV.rb +0 -24
  397. data/tests/linalg/TDN.rb +0 -116
  398. data/tests/linalg/TDS.rb +0 -122
  399. data/tests/linalg/bidiag.rb +0 -73
  400. data/tests/linalg/cholesky.rb +0 -20
  401. data/tests/linalg/linalg.rb +0 -158
  402. data/tests/matrix/matrix_complex_test.rb +0 -36
  403. data/tests/matrix/matrix_nmf_test.rb +0 -39
  404. data/tests/matrix/matrix_test.rb +0 -48
  405. data/tests/min.rb +0 -99
  406. data/tests/monte/miser.rb +0 -31
  407. data/tests/monte/vegas.rb +0 -45
  408. data/tests/multifit/test_2dgauss.rb +0 -112
  409. data/tests/multifit/test_brown.rb +0 -90
  410. data/tests/multifit/test_enso.rb +0 -246
  411. data/tests/multifit/test_filip.rb +0 -155
  412. data/tests/multifit/test_gauss.rb +0 -97
  413. data/tests/multifit/test_longley.rb +0 -110
  414. data/tests/multifit/test_multifit.rb +0 -52
  415. data/tests/multimin.rb +0 -139
  416. data/tests/multiroot.rb +0 -131
  417. data/tests/multiset.rb +0 -52
  418. data/tests/narray/blas_dnrm2.rb +0 -20
  419. data/tests/odeiv.rb +0 -353
  420. data/tests/poly/poly.rb +0 -290
  421. data/tests/poly/special.rb +0 -65
  422. data/tests/qrng.rb +0 -131
  423. data/tests/quartic.rb +0 -29
  424. data/tests/randist.rb +0 -134
  425. data/tests/rng.rb +0 -305
  426. data/tests/roots.rb +0 -76
  427. data/tests/run-test.sh +0 -17
  428. data/tests/sf/gsl_test_sf.rb +0 -249
  429. data/tests/sf/test_airy.rb +0 -83
  430. data/tests/sf/test_bessel.rb +0 -306
  431. data/tests/sf/test_coulomb.rb +0 -17
  432. data/tests/sf/test_dilog.rb +0 -25
  433. data/tests/sf/test_gamma.rb +0 -209
  434. data/tests/sf/test_hyperg.rb +0 -356
  435. data/tests/sf/test_legendre.rb +0 -227
  436. data/tests/sf/test_mathieu.rb +0 -59
  437. data/tests/sf/test_mode.rb +0 -19
  438. data/tests/sf/test_sf.rb +0 -839
  439. data/tests/stats.rb +0 -174
  440. data/tests/stats_mt.rb +0 -16
  441. data/tests/sum.rb +0 -98
  442. data/tests/sys.rb +0 -323
  443. data/tests/tensor.rb +0 -419
  444. data/tests/vector/vector_complex_test.rb +0 -101
  445. data/tests/vector/vector_test.rb +0 -141
  446. data/tests/wavelet.rb +0 -142
@@ -0,0 +1,122 @@
1
+ require 'test_helper'
2
+
3
+ class StatsTest < GSL::TestCase
4
+
5
+ def test_stats
6
+ lew = GSL::Vector.alloc(
7
+ -213, -564, -35, -15, 141, 115, -420, -360, 203, -338, -431, 194,
8
+ -220, -513, 154, -125, -559, 92, -21, -579, -52, 99, -543, -175,
9
+ 162, -457, -346, 204, -300, -474, 164, -107, -572, -8, 83, -541,
10
+ -224, 180, -420, -374, 201, -236, -531, 83, 27, -564, -112, 131,
11
+ -507, -254, 199, -311, -495, 143, -46, -579, -90, 136, -472, -338,
12
+ 202, -287, -477, 169, -124, -568, 17, 48, -568, -135, 162, -430,
13
+ -422, 172, -74, -577, -13, 92, -534, -243, 194, -355, -465, 156,
14
+ -81, -578, -64, 139, -449, -384, 193, -198, -538, 110, -44, -577,
15
+ -6, 66, -552, -164, 161, -460, -344, 205, -281, -504, 134, -28,
16
+ -576, -118, 156, -437, -381, 200, -220, -540, 83, 11, -568, -160,
17
+ 172, -414, -408, 188, -125, -572, -32, 139, -492, -321, 205, -262,
18
+ -504, 142, -83, -574, 0, 48, -571, -106, 137, -501, -266, 190,
19
+ -391, -406, 194, -186, -553, 83, -13, -577, -49, 103, -515, -280,
20
+ 201, 300, -506, 131, -45, -578, -80, 138, -462, -361, 201, -211,
21
+ -554, 32, 74, -533, -235, 187, -372, -442, 182, -147, -566, 25,
22
+ 68, -535, -244, 194, -351, -463, 174, -125, -570, 15, 72, -550,
23
+ -190, 172, -424, -385, 198, -218, -536, 96
24
+ )
25
+
26
+ mean = lew.mean
27
+ sd = lew.sd
28
+ lag1 = lew.lag1_autocorrelation
29
+
30
+ assert_rel mean, -177.435000000000, 1e-15, 'lew gsl_stats_mean'
31
+ assert_rel sd, 277.332168044316, 1e-15, 'lew gsl_stats_sd'
32
+ assert_rel lag1, -0.307304800605679, 1e-14, 'lew autocorrelation'
33
+
34
+ rel = 1e-10
35
+
36
+ rawa = GSL::Vector.alloc(
37
+ 0.0421, 0.0941, 0.1064, 0.0242, 0.1331,
38
+ 0.0773, 0.0243, 0.0815, 0.1186, 0.0356,
39
+ 0.0728, 0.0999, 0.0614, 0.0479
40
+ )
41
+
42
+ rawb = GSL::Vector.alloc(
43
+ 0.1081, 0.0986, 0.1566, 0.1961, 0.1125,
44
+ 0.1942, 0.1079, 0.1021, 0.1583, 0.1673,
45
+ 0.1675, 0.1856, 0.1688, 0.1512
46
+ )
47
+
48
+ raww = GSL::Vector.alloc(
49
+ 0.0000, 0.0000, 0.0000, 3.000, 0.0000,
50
+ 1.0000, 1.0000, 1.0000, 0.000, 0.5000,
51
+ 7.0000, 5.0000, 4.0000, 0.123
52
+ )
53
+
54
+ assert_rel mean = rawa.mean, 0.0728, rel, 'gsl_stats_mean'
55
+
56
+ assert_rel rawa.variance_with_fixed_mean(mean), 0.00113837428571429,
57
+ rel, 'gsl_stats_variance_with_fixed_mean'
58
+
59
+ assert_rel rawa.sd_with_fixed_mean(mean), 0.0337398026922845,
60
+ rel, 'gsl_stats_sd_with_fixed_mean'
61
+
62
+ assert_rel rawb.variance, 0.00124956615384615, rel, 'gsl_stats_variance'
63
+ assert_rel rawa.sd, 0.0350134479659107, rel, 'gsl_stats_sd'
64
+ assert_rel rawa.absdev, 0.0287571428571429, rel, 'gsl_stats_absdev'
65
+ assert_rel rawa.skew, 0.0954642051479004, rel, 'gsl_stats_skew'
66
+ assert_rel rawa.kurtosis, -1.38583851548909, rel, 'gsl_stats_kurtosis'
67
+ assert_rel rawa.wmean(raww), 0.0678111523670601, rel, 'gsl_stats_wmean'
68
+ assert_rel rawa.wvariance(raww), 0.000769562962860317, rel, 'gsl_stats_wvariance'
69
+ assert_rel rawa.wsd(raww), 0.0277409978706664, rel, 'gsl_stats_wsd'
70
+ assert_rel rawa.wabsdev(raww), 0.0193205027504008, rel, 'gsl_stats_wabsdev'
71
+ assert_rel rawa.wskew(raww), -0.373631000307076, rel, 'gsl_stats_wskew'
72
+ assert_rel rawa.wkurtosis(raww), -1.48114233353963, rel, 'gsl_stats_wkurtosis'
73
+
74
+ assert_rel GSL::Stats.covariance(rawa, rawb), -0.000139021538461539, rel, 'gsl_stats_covariance'
75
+
76
+ if GSL::GSL_VERSION >= '1.9.90'
77
+ assert_rel GSL::Stats.correlation(rawa, rawb), -0.112322712666074171, rel, 'gsl_stats_correlation'
78
+ assert_rel GSL::Stats.pvariance(rawa, rawb), 0.00123775384615385, rel, 'gsl_stats_pvariance'
79
+ assert_rel GSL::Stats.ttest(rawa, rawb), -5.67026326985851, rel, 'gsl_stats_ttest'
80
+ end
81
+
82
+ assert_rel rawa.max, 0.1331, rel, 'gsl_stats_max'
83
+ assert_rel rawa.min, 0.0242, rel, 'gsl_stats_min'
84
+
85
+ min, max = rawa.minmax
86
+ assert_rel max, 0.1331, rel, 'gsl_stats_minmax: max'
87
+ assert_rel min, 0.0242, rel, 'gsl_stats_minmax: min'
88
+
89
+ assert rawa.max_index == 4, 'gsl_stats_max_index'
90
+ assert rawa.min_index == 3, 'gsl_stats_min_index'
91
+
92
+ min_index, max_index = rawa.minmax_index
93
+ assert max_index == 4, 'gsl_stats_minmax_index: max'
94
+ assert min_index == 3, 'gsl_stats_minmax_index: min'
95
+
96
+ rawa.sort!
97
+
98
+ assert_rel rawa.median_from_sorted_data, 0.07505,
99
+ rel, 'gsl_stats_median_from_sorted_data'
100
+
101
+ assert_rel rawa.subvector(0, rawa.size - 1).median_from_sorted_data, 0.0728,
102
+ rel, 'gsl_stats_median_from_sorted_data'
103
+
104
+ assert_rel rawa.quantile_from_sorted_data(0.0), 0.0242,
105
+ rel, 'gsl_stats_quantile_from_sorted_data'
106
+
107
+ assert_rel rawa.quantile_from_sorted_data(1.0), 0.1331,
108
+ rel, 'gsl_stats_quantile_from_sorted_data (100)'
109
+
110
+ assert_rel rawa.quantile_from_sorted_data(0.5), 0.07505,
111
+ rel, 'gsl_stats_quantile_from_sorted_data (50even)'
112
+
113
+ assert_rel rawa.subvector(0, rawa.size-1).quantile_from_sorted_data(0.5), 0.0728,
114
+ rel, 'gsl_stats_quantile_from_sorted_data (50odd)'
115
+ end
116
+
117
+ def test_variance_with_fixed_mean
118
+ v = GSL::Vector[1..8]
119
+ assert_raises(ArgumentError, 'check for no args') { v.variance_with_fixed_mean }
120
+ end
121
+
122
+ end
@@ -0,0 +1,69 @@
1
+ require 'test_helper'
2
+
3
+ class SumTest < GSL::TestCase
4
+
5
+ N = 50
6
+
7
+ def setup
8
+ @t = GSL::Vector.alloc(N)
9
+ N.times { |n| @t[n] = 1.0 / (n + 1.0) ** 2 }
10
+ end
11
+
12
+ def _fill_vector(x = 1.0)
13
+ @t[0] = x
14
+ 1.upto(N - 1) { |n| @t[n] = yield n, @t[n - 1] }
15
+ end
16
+
17
+ def _test_sum(expected, desc)
18
+ sum_accel, _ = GSL::Sum::Levin_utrunc.alloc(N).accel(@t)
19
+ assert_rel sum_accel, expected, 1e-8, 'trunc result, %s' % desc
20
+
21
+ sum_accel, err_est, = GSL::Sum::Levin_u.alloc(N).accel(@t)
22
+ assert_rel sum_accel, expected, 1e-8, 'full result, %s' % desc
23
+
24
+ sd_est = -Math.log10(err_est / sum_accel.abs)
25
+ sd_actual = -Math.log10(GSL::DBL_EPSILON + ((sum_accel - expected) / expected).abs)
26
+
27
+ refute sd_est > sd_actual + 1.0,
28
+ 'full significant digits, %s (%g vs %g)' % [desc, sd_est, sd_actual]
29
+ end
30
+
31
+ def test_zeta_2
32
+ _test_sum(GSL::M_PI ** 2 / 6.0, 'zeta(2)')
33
+ end
34
+
35
+ def test_exp_10(x = 10.0)
36
+ _fill_vector { |n, t| t * (x / n) }
37
+ _test_sum(Math.exp(x), 'exp(%d)' % x)
38
+ end
39
+
40
+ def test_exp_neg_10
41
+ test_exp_10(-10.0)
42
+ end
43
+
44
+ def test_log(x = 0.5)
45
+ _fill_vector(x) { |n, t| t * (x * n) / (n + 1.0) }
46
+ _test_sum(-Math.log(1 - x), "-log(#{1 - x})")
47
+ end
48
+
49
+ def test_log2
50
+ test_log(-1.0)
51
+ end
52
+
53
+ def test_asymptotic_series
54
+ m = GSL::M_PI ** 2
55
+ _fill_vector(3.0 / m) { |n, t| -t * (4.0 * (n + 1.0) - 1.0) / m }
56
+ _test_sum(0.192594048773, 'asymptotic series')
57
+ end
58
+
59
+ def test_eulers_constant
60
+ _fill_vector { |n, _| 1 / (n + 1.0) + Math.log(n / (n + 1.0)) }
61
+ _test_sum(0.5772156649015328606065120900824, "Euler's constant")
62
+ end
63
+
64
+ def test_eta
65
+ N.times { |n| @t[n] = (n % 2 == 1 ? -1 : 1) * 1.0 / GSL.sqrt(n + 1.0) }
66
+ _test_sum(0.6048986434216305, 'eta(1/2)')
67
+ end
68
+
69
+ end
@@ -0,0 +1,396 @@
1
+ require 'test_helper'
2
+
3
+ class TensorTest < GSL::TestCase
4
+
5
+ RANK = 3
6
+ DIMENSION = 5
7
+
8
+ def test_tensor
9
+ return unless GSL.const_defined?(:Tensor)
10
+
11
+ t = GSL::Tensor.alloc(RANK, DIMENSION)
12
+
13
+ assert t.rank == RANK, "#{t.class}.alloc returns valid rank"
14
+ assert t.dimension == DIMENSION, "#{t.class}_alloc returns valid dimension"
15
+
16
+ counter = 0
17
+ for i in 0...DIMENSION do
18
+ for j in 0...DIMENSION do
19
+ for k in 0...DIMENSION do
20
+ counter += 1
21
+ t.set(i, j, k, counter)
22
+ # t[i, j, k] = counter
23
+ end
24
+ end
25
+ end
26
+
27
+ status = 0
28
+ counter = 0
29
+ data = t.data # GSL::Vector::View
30
+ for i in 0...DIMENSION do
31
+ for j in 0...DIMENSION do
32
+ for k in 0...DIMENSION do
33
+ counter += 1
34
+ if data[DIMENSION * DIMENSION * i + DIMENSION * j + k] != counter
35
+ status += 1
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ assert status.zero?, "#{t.class}#set writes into array"
42
+
43
+ status = 0
44
+ counter = 0
45
+ data = t.data
46
+ for i in 0...DIMENSION do
47
+ for j in 0...DIMENSION do
48
+ for k in 0...DIMENSION do
49
+ counter += 1
50
+ # if t.get(i, j, k) != counter
51
+ if t[i, j, k] != counter
52
+ status += 1
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ assert status.zero?, "#{t.class}#get reads from array"
59
+
60
+ t = GSL::Tensor.calloc(RANK, DIMENSION)
61
+
62
+ counter = 0
63
+ for i in 0...DIMENSION do
64
+ for j in 0...DIMENSION do
65
+ for k in 0...DIMENSION do
66
+ counter += 1
67
+ t.set(i, j, k, counter)
68
+ end
69
+ end
70
+ end
71
+
72
+ exp_max = t[0, 0, 0]
73
+ exp_min = t[0, 0, 0]
74
+ exp_imax = exp_jmax = exp_kmax = 0
75
+ exp_imin = exp_jmin = exp_kmin = 0
76
+
77
+ for i in 0...DIMENSION do
78
+ for j in 0...DIMENSION do
79
+ for k in 0...DIMENSION do
80
+ value = t[i, j, k]
81
+ if value > exp_max
82
+ exp_max = value
83
+ exp_imax = i; exp_jmax = j; exp_kmax = k
84
+ end
85
+ if value < exp_min
86
+ exp_min = t[i, j, k]
87
+ exp_imin = i; exp_jmin = j; exp_kmin = k
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ max = t.max
94
+ assert max == exp_max, "#{t.class}#max returns correct maximum value"
95
+ min = t.min
96
+ assert min == exp_min, "#{t.class}#min returns correct minimum value"
97
+
98
+ min, max = t.minmax
99
+ assert max == exp_max, "#{t.class}#minmax returns correct maximum value"
100
+ assert min == exp_min, "#{t.class}#minmax returns correct minimum value"
101
+
102
+ imax = t.max_index
103
+ status = 0
104
+ if imax[0] != exp_imax; status += 1; end
105
+ if imax[1] != exp_jmax; status += 1; end
106
+ if imax[2] != exp_kmax; status += 1; end
107
+ assert status.zero?, "#{t.class}#max_index returns correct maximum indices"
108
+
109
+ imin = t.min_index
110
+ status = 0
111
+ if imin[0] != exp_imin; status += 1; end
112
+ if imin[1] != exp_jmin; status += 1; end
113
+ if imin[2] != exp_kmin; status += 1; end
114
+ assert status.zero?, "#{t.class}#min_index returns correct minimum indices"
115
+
116
+
117
+ imin, imax = t.minmax_index
118
+ status = 0
119
+ if imin[0] != exp_imin; status += 1; end
120
+ if imin[1] != exp_jmin; status += 1; end
121
+ if imin[2] != exp_kmin; status += 1; end
122
+ if imax[0] != exp_imax; status += 1; end
123
+ if imax[1] != exp_jmax; status += 1; end
124
+ if imax[2] != exp_kmax; status += 1; end
125
+ assert status.zero?, "#{t.class}#minmax_index returns correct indices"
126
+
127
+ ##### Operations
128
+ a = GSL::Tensor.new(RANK, DIMENSION)
129
+ b = GSL::Tensor.new(RANK, DIMENSION)
130
+ for i in 0...DIMENSION do
131
+ for j in 0...DIMENSION do
132
+ for k in 0...DIMENSION do
133
+ a[i, j, k] = 3 + i + 5 * j + 2 * k
134
+ b[i, j, k] = 3 + 2 * i + 4 * j + k
135
+ end
136
+ end
137
+ end
138
+
139
+ # Addition
140
+ c = a + b
141
+ #c = a.add(b)
142
+ status = 0
143
+ for i in 0...DIMENSION do
144
+ for j in 0...DIMENSION do
145
+ for k in 0...DIMENSION do
146
+ r = c[i, j, k]
147
+ x = a[i, j, k]
148
+ y = b[i, j, k]
149
+ z = x + y
150
+ status += 1 if r != z
151
+ end
152
+ end
153
+ end
154
+ assert status.zero?, "#{t.class}#add tensor addition"
155
+
156
+ # Subtraction
157
+ c = a - b
158
+ # c = a.sub(b)
159
+ status = 0
160
+ for i in 0...DIMENSION do
161
+ for j in 0...DIMENSION do
162
+ for k in 0...DIMENSION do
163
+ r = c[i, j, k]
164
+ x = a[i, j, k]
165
+ y = b[i, j, k]
166
+ z = x - y
167
+ status += 1 if r != z
168
+ end
169
+ end
170
+ end
171
+ assert status.zero?, "#{t.class}#sub tensor subtraction"
172
+
173
+ # Element multiplication
174
+ c = a.mul_elements(b)
175
+ status = 0
176
+ for i in 0...DIMENSION do
177
+ for j in 0...DIMENSION do
178
+ for k in 0...DIMENSION do
179
+ r = c[i, j, k]
180
+ x = a[i, j, k]
181
+ y = b[i, j, k]
182
+ z = x * y
183
+ status += 1 if r != z
184
+ end
185
+ end
186
+ end
187
+ assert status.zero?, "#{t.class}#mul_elements element multiplication"
188
+
189
+ # Element division
190
+ c = a.div_elements(b)
191
+ status = 0
192
+ for i in 0...DIMENSION do
193
+ for j in 0...DIMENSION do
194
+ for k in 0...DIMENSION do
195
+ r = c[i, j, k]
196
+ x = a[i, j, k]
197
+ y = b[i, j, k]
198
+ z = x / y
199
+ if (r - z).abs > 2 * GSL::FLT_EPSILON * z.abs; status += 1; end
200
+ end
201
+ end
202
+ end
203
+ assert status.zero?, "#{t.class}#div_elements element division"
204
+
205
+ ### Tensor product
206
+ c = a * b
207
+ status = 0
208
+ for i in 0...DIMENSION do
209
+ for j in 0...DIMENSION do
210
+ for k in 0...DIMENSION do
211
+ for l in 0...DIMENSION do
212
+ for m in 0...DIMENSION do
213
+ for n in 0...DIMENSION do
214
+ r = c[i, j, k, l, m, n]
215
+ x = a[i, j, k]
216
+ y = b[l, m, n]
217
+ z = x * y
218
+ if r != z; status += 1; end
219
+ end
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
225
+ assert status.zero?, "#{t.class}#product tensorial product"
226
+
227
+ ### Index contraction
228
+ tt = a.contract(0, 1)
229
+ assert tt.rank == RANK - 2, "#{t.class}.contract returns valid rank"
230
+ assert tt.dimension == DIMENSION, "#{t.class}_contract returns valid dimension"
231
+
232
+ ### Swap indices
233
+ a_102 = a.swap_indices(0, 1)
234
+ a_210 = a.swap_indices(0, 2)
235
+ a_021 = a.swap_indices(1, 2)
236
+ status = 0
237
+ for i in 0...DIMENSION do
238
+ for j in 0...DIMENSION do
239
+ for k in 0...DIMENSION do
240
+ x = a[i, j, k]
241
+ x_102 = a_102[j, i, k]
242
+ x_210 = a_210[k, j, i]
243
+ x_021 = a_021[i, k, j]
244
+ if x != x_102 or x != x_210 or x != x_021; status += 1; end
245
+ end
246
+ end
247
+ end
248
+ assert status.zero?, "#{t.class}#swap_indices swap indices"
249
+
250
+ ### Test text IO
251
+ file = 'tensor_test.txt'
252
+
253
+ t = GSL::Tensor.alloc(RANK, DIMENSION)
254
+ counter = 0
255
+ for i in 0...DIMENSION do
256
+ for j in 0...DIMENSION do
257
+ for k in 0...DIMENSION do
258
+ counter += 1
259
+ t[i, j, k] = counter
260
+ end
261
+ end
262
+ end
263
+
264
+ t.fprintf(file, '%g')
265
+ tt = GSL::Tensor.alloc(RANK, DIMENSION)
266
+ status = 0
267
+ tt.fscanf(file)
268
+ counter = 0
269
+ data = tt.data
270
+ for i in 0...DIMENSION do
271
+ for j in 0...DIMENSION do
272
+ for k in 0...DIMENSION do
273
+ counter += 1
274
+ if data[DIMENSION * DIMENSION * i + DIMENSION * j + k] != counter
275
+ status += 1
276
+ end
277
+ end
278
+ end
279
+ end
280
+ assert status.zero?, "#{t.class}#fprintf and fscanf"
281
+ File.delete(file)
282
+
283
+ ### Test binary IO
284
+ file = 'tensor_test.dat'
285
+ t.fwrite(file)
286
+ tt = GSL::Tensor.alloc(RANK, DIMENSION)
287
+ status = 0
288
+ tt.fread(file)
289
+ counter = 0
290
+ data = tt.data
291
+ for i in 0...DIMENSION do
292
+ for j in 0...DIMENSION do
293
+ for k in 0...DIMENSION do
294
+ counter += 1
295
+ if data[DIMENSION * DIMENSION * i + DIMENSION * j + k] != counter
296
+ status += 1
297
+ end
298
+ end
299
+ end
300
+ end
301
+ assert status.zero?, "#{t.class}#fwrite and fread"
302
+ File.delete(file)
303
+
304
+ ### Trap
305
+ i = j = k = 0
306
+ t = GSL::Tensor.calloc(RANK, DIMENSION)
307
+ assert_nothing_raised("#{t.class}#set traps 1st index above upper bound") {
308
+ t[DIMENSION + 1, 0, 0] = 1.2
309
+ }
310
+
311
+ assert_nothing_raised("#{t.class}#set traps 2nd index above upper bound") {
312
+ t[0, DIMENSION + 1, 0] = 1.2
313
+ }
314
+
315
+ assert_nothing_raised("#{t.class}#set traps 3rd index above upper bound") {
316
+ t[0, 0, DIMENSION + 1] = 1.2
317
+ }
318
+
319
+ assert_nothing_raised("#{t.class}#set traps 2nd index at upper bound") {
320
+ t[0, DIMENSION, 0] = 1.2
321
+ }
322
+
323
+ assert_nothing_raised("#{t.class}#set traps 2nd index below lower bound") {
324
+ t[0, i - 1, 0] = 1.2
325
+ }
326
+
327
+ assert_nothing_raised("#{t.class}#get traps 1st index above upper bound") {
328
+ t[DIMENSION + 1, 0, 0]
329
+ }
330
+
331
+ assert_nothing_raised("#{t.class}#get traps 2nd index above upper bound") {
332
+ t[0, DIMENSION + 1, 0]
333
+ }
334
+
335
+ assert_nothing_raised("#{t.class}#get traps 3rd index above upper bound") {
336
+ t[0, 0, DIMENSION + 1]
337
+ }
338
+
339
+ assert_nothing_raised("#{t.class}#get traps 2nd index at upper bound") {
340
+ t[0, DIMENSION, 0]
341
+ }
342
+
343
+ assert_nothing_raised("#{t.class}#get traps 2nd index below lower bound") {
344
+ t[0, i - 1, 0]
345
+ }
346
+
347
+ #####
348
+ # Vector and Tensor, subtensors
349
+ #v = GSL::Vector.new(0...125)
350
+ v = GSL::Vector.indgen(125)
351
+ t = v.to_tensor(3, 5)
352
+ assert t.rank == RANK, "#{v.class}.to_tensor(#{RANK}, #{DIMENSION}) returns valid rank"
353
+ assert t.dimension == DIMENSION, "#{v.class}.to_tensor(#{RANK}, #{DIMENSION}) returns valid dimension"
354
+
355
+ m0_exp = GSL::Matrix[0...25, 5, 5]
356
+ m1_exp = GSL::Matrix[25...50, 5, 5]
357
+ m2_exp = GSL::Matrix[50...75, 5, 5]
358
+ m3_exp = GSL::Matrix[75...100, 5, 5]
359
+ m4_exp = GSL::Matrix[100...125, 5, 5]
360
+
361
+ # Create tensors of rank 2
362
+ t0 = t.subtensor(0)
363
+ t1 = t[1]
364
+ t2 = t.subtensor(2)
365
+ t3 = t[3]
366
+ t4 = t.subtensor(4)
367
+
368
+ # 2-tensors can be compared directly with matrices
369
+ assert t0 == m0_exp, "#{t.class}#subtensor(0) returns valid tensor"
370
+ assert t1 == m1_exp, "#{t.class}#subtensor(1) returns valid tensor"
371
+ assert t2 == m2_exp, "#{t.class}#subtensor(2) returns valid tensor"
372
+ assert t3 == m3_exp, "#{t.class}#subtensor(3) returns valid tensor"
373
+ assert t4 == m4_exp, "#{t.class}#subtensor(4) returns valid tensor"
374
+
375
+ v0_exp = GSL::Vector[100...105]
376
+ v1_exp = GSL::Vector[105...110]
377
+ v2_exp = GSL::Vector[110...115]
378
+ v3_exp = GSL::Vector[115...120]
379
+ v4_exp = GSL::Vector[120...125]
380
+
381
+ # Create tensors of rank1
382
+ v0 = t[4, 0]
383
+ v1 = t[4][1]
384
+ v2 = t.subtensor(4, 2)
385
+ v3 = t4[3]
386
+ v4 = t4.subtensor(4)
387
+
388
+ # 1-tensors can be compared directly with vectors
389
+ assert v0 == v0_exp, "#{t.class}#subtensor(4,0) returns valid tensor"
390
+ assert v1 == v1_exp, "#{t.class}#subtensor(4,1) returns valid tensor"
391
+ assert v2 == v2_exp, "#{t.class}#subtensor(4,2) returns valid tensor"
392
+ assert v3 == v3_exp, "#{t.class}#subtensor(4,3) returns valid tensor"
393
+ assert v4 == v4_exp, "#{t.class}#subtensor(4,4) returns valid tensor"
394
+ end
395
+
396
+ end