test/fit.rb in compsci-0.3.0.1 vs test/fit.rb in compsci-0.3.1.1

- old
+ new

@@ -1,8 +1,10 @@ require 'compsci/fit' require 'minitest/autorun' +Minitest::Test.parallelize_me! + include CompSci def noise # range: -0.5 to 0.5 rand - 0.5 end @@ -12,19 +14,21 @@ @xs = [1, 2, 5, 10, 20, 50, 100, 200, 500] end describe "Fit.sigma" do it "must answer correctly" do - Fit.sigma([1, 2, 3]).must_equal 6 - Fit.sigma([1, 2, 3]) { |n| n ** 2 }.must_equal 14 + expect(Fit.sigma([1, 2, 3])).must_equal 6 + expect(Fit.sigma([1, 2, 3]) { |n| n ** 2 }).must_equal 14 end end describe "Fit.error" do it "must calculate r^2" do - Fit.error([[1, 1], [2, 2], [3, 3]]) { |x| x }.must_equal 1.0 - Fit.error([[1, 1], [2, 2], [3, 4]]) { |x| x }.must_be_close_to 0.785 + expect(Fit.error([[1, 1], [2, 2], [3, 3]]) { |x| x }).must_equal 1.0 + expect(Fit.error([[1, 1], [2, 2], [3, 4]]) { |x| + x + }).must_be_close_to 0.785 end end # y = a # Note: Thinking about dropping this. @@ -33,25 +37,25 @@ # describe "Fit.constant" do it "must stuff" do [0, 1, 10, 100, 1000, 9999].each { |a| y_bar, variance = Fit.constant(@xs, @xs.map { |x| a }) - y_bar.must_equal a - variance.must_equal 0 + expect(y_bar).must_equal a + expect(variance).must_equal 0 } end end # y = a + b*ln(x) describe "Fit.logarithmic" do it "must accept logarithmic data" do [-9999, -2000, -500, -0.01, 0.01, 500, 2000, 9999].each { |a| [-9999, -2000, -500, -0.01, 0.01, 500, 2000, 9999].each { |b| ary = Fit.logarithmic(@xs, @xs.map { |x| a + b * Math.log(x) }) - ary[0].must_be_close_to a - ary[1].must_be_close_to b - ary[2].must_equal 1.0 + expect(ary[0]).must_be_close_to a + expect(ary[1]).must_be_close_to b + expect(ary[2]).must_equal 1.0 } } end end @@ -59,65 +63,65 @@ describe "Fit.linear" do it "must accept linear data" do [-9999, -2000, -500, -0.01, 0.01, 500, 2000, 9999].each { |a| [-9999, -2000, -500, -0.01, 0.01, 500, 2000, 9999].each { |b| ary = Fit.linear(@xs, @xs.map { |x| a + b * x }) - ary[0].must_be_close_to a - ary[1].must_be_close_to b - ary[2].must_equal 1.0 + expect(ary[0]).must_be_close_to a + expect(ary[1]).must_be_close_to b + expect(ary[2]).must_equal 1.0 } } end it "must accept constant data" do [0, 1, 10, 100, 1000, 9999].each { |a| ary = Fit.linear(@xs, @xs.map { |x| a }) - ary[0].must_equal a - ary[1].must_equal 0 - ary[2].nan?.must_equal true + expect(ary[0]).must_equal a + expect(ary[1]).must_equal 0 + expect(ary[2].nan?).must_equal true } end # note, this test can possibly fail depending on the uniformity of # rand's output for our sample # it "must accept noisy constant data" do r2s = [] [0, 1, 10, 100, 1000, 9999].each { |a| ary = Fit.linear(@xs, @xs.map { |x| a + noise() }) - ary[0].must_be_close_to a, 0.4 - ary[1].must_be_close_to 0, 0.05 + expect(ary[0]).must_be_close_to a, 0.4 + expect(ary[1]).must_be_close_to 0, 0.05 r2s << ary[2] } mean_r2 = Fit.sigma(r2s) / r2s.size - mean_r2.must_be_close_to 0.15, 0.15 + expect(mean_r2).must_be_close_to 0.15, 0.15 end it "must reject x^2" do skip "it does not reject x^2 at r^2 < 0.99" xs = [1, 10, 100, 1000] _a, _b, r2 = Fit.linear(xs, xs.map { |x| x**2 }) - r2.must_be :<, 0.99 + expect(r2).must_be :<, 0.99 end it "must reject x^3" do skip "it does not reject x^3 at r^2 < 0.99" xs = [1, 10, 100, 1000] _a, _b, r2 = Fit.linear(xs, xs.map { |x| x**3 }) - r2.must_be :<, 0.99 + expect(r2).must_be :<, 0.99 end end # y = ae^(bx) describe "Fit.exponential" do it "must accept exponential data" do [0.001, 7.5, 500, 1000, 5000, 9999].each { |a| [-1.4, -1.1, -0.1, 0.01, 0.5, 0.75].each { |b| ary = Fit.exponential(@xs, @xs.map { |x| a * Math::E**(b * x) }) - ary[0].must_be_close_to a - ary[1].must_be_close_to b - ary[2].must_equal 1.0 + expect(ary[0]).must_be_close_to a + expect(ary[1]).must_be_close_to b + expect(ary[2]).must_equal 1.0 } } end end @@ -126,12 +130,12 @@ it "must accept power data" do [0.01, 7.5, 500, 1000, 5000, 9999].each { |a| [-114, -100, -10, -0.5, -0.1, 0.1, 0.75, 10, 50, 60].each { |b| next if b == -114 # Fit.error warning: Bignum out of Float range ary = Fit.power(@xs, @xs.map { |x| a * x**b }) - ary[0].must_be_close_to a - ary[1].must_be_close_to b - ary[2].must_equal 1.0 + expect(ary[0]).must_be_close_to a + expect(ary[1]).must_be_close_to b + expect(ary[2]).must_equal 1.0 } } end end end