$:.push "work" # for pre-install test

require "xmp"
require "benchmark"
require "num/basicnumarray"

xmp <<EOS
size = 10000
bna = BasicNumArray.new(Float, size)
bna.setall(Math::PI)
bna.size
bna[0]
bna[1]
bna[1] = 200
bna[1]
bna.coerce(bna)
bna.coerce(1)
a = 100000000
(bna + a)[0]
(a + bna)[0]
(a / bna)[1]
(a ** bna)[1]

bna.sin[100]
bna.acos[100]
bna.acosh[100]
bna.asin[100]
bna.asinh[100]
bna.atan[100]
bna.atanh[100]
bna.cbrt[100]
bna.ceil[100]
bna.cos[100]
bna.cosh[100]
bna.erf[100]
bna.erfc[100]
bna.exp[100]
bna.expm1[100]
bna.fabs[100]
bna.floor[100]
bna.j0[100]
bna.j1[100]
bna.lgamma[100]
bna.log[100]
bna.log10[100]
bna.log1p[100]
bna.rint[100]
bna.sin[100]
bna.sinh[100]
bna.sqrt[100]
bna.tan[100]
bna.tanh[100]
bna.y0[100]
bna.y1[100]

include Math
sin(bna[100])
sin(bna)[100]
cos(bna[100])
cos(bna)[100]
tan(bna[100])
tan(bna)[100]
exp(bna[100])
exp(bna)[100]
log(bna[100])
log(bna)[100]
log10(bna[100])
log10(bna)[100]
sqrt(bna[100])
sqrt(bna)[100]
EOS

puts "\n# Benchmark"
n = 100000
puts "# Adding 1 to #{n} sized array"

Benchmark::bm(6) {|x|
  bna = BasicNumArray.new(Float, n)
  bna.setall(0.1)
  ary = Array.new(n, 0.1)
  x.report("Array"){ary.collect{|i| i + 1}}
  x.report("BNA"){bna + 1}
}
