dydx 0.1.4 → 0.1.25
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.
- checksums.yaml +4 -4
- data/Gemfile +0 -3
- data/README.md +124 -61
- data/Rakefile +8 -5
- data/dydx.gemspec +13 -13
- data/lib/dydx.rb +25 -23
- data/lib/dydx/algebra.rb +76 -8
- data/lib/dydx/algebra/formula.rb +38 -71
- data/lib/dydx/algebra/inverse.rb +12 -19
- data/lib/dydx/algebra/operator/common_parts.rb +3 -0
- data/lib/dydx/algebra/operator/formula.rb +4 -0
- data/lib/dydx/algebra/operator/general.rb +4 -0
- data/lib/dydx/algebra/operator/inverse.rb +4 -0
- data/lib/dydx/algebra/operator/num.rb +4 -0
- data/lib/dydx/algebra/operator/parts/base.rb +2 -2
- data/lib/dydx/algebra/operator/parts/formula.rb +38 -63
- data/lib/dydx/algebra/operator/parts/general.rb +31 -84
- data/lib/dydx/algebra/operator/parts/interface.rb +22 -0
- data/lib/dydx/algebra/operator/parts/inverse.rb +4 -4
- data/lib/dydx/algebra/operator/parts/num.rb +11 -16
- data/lib/dydx/algebra/operator/parts/symbol.rb +2 -2
- data/lib/dydx/algebra/operator/symbol.rb +15 -0
- data/lib/dydx/algebra/set.rb +34 -271
- data/lib/dydx/algebra/set/base.rb +9 -0
- data/lib/dydx/algebra/set/cos.rb +22 -0
- data/lib/dydx/algebra/set/e.rb +16 -0
- data/lib/dydx/algebra/set/fixnum.rb +14 -0
- data/lib/dydx/algebra/set/float.rb +14 -0
- data/lib/dydx/algebra/set/log.rb +22 -0
- data/lib/dydx/algebra/set/num.rb +26 -0
- data/lib/dydx/algebra/set/pi.rb +16 -0
- data/lib/dydx/algebra/set/sin.rb +21 -0
- data/lib/dydx/algebra/set/symbol.rb +14 -0
- data/lib/dydx/algebra/set/tan.rb +17 -0
- data/lib/dydx/delta.rb +1 -1
- data/lib/dydx/function.rb +1 -1
- data/lib/dydx/helper.rb +61 -55
- data/lib/dydx/integrand.rb +10 -22
- data/lib/dydx/version.rb +1 -1
- data/spec/dydx_spec.rb +29 -10
- data/spec/lib/algebra/formula_spec.rb +38 -44
- data/spec/lib/algebra/operator/parts/base_spec.rb +5 -5
- data/spec/lib/algebra/operator/parts/formula_spec.rb +50 -57
- data/spec/lib/algebra/operator/parts/inverse_spec.rb +8 -8
- data/spec/lib/algebra/set/cos_spec.rb +18 -0
- data/spec/lib/algebra/set/e_spec.rb +27 -0
- data/spec/lib/algebra/set/fixnum_spec.rb +65 -0
- data/spec/lib/algebra/set/float_spec.rb +65 -0
- data/spec/lib/algebra/set/log_spec.rb +15 -0
- data/spec/lib/algebra/set/num_spec.rb +23 -0
- data/spec/lib/algebra/set/pi_spec.rb +25 -0
- data/spec/lib/algebra/set/sin_spec.rb +14 -0
- data/spec/lib/algebra/set/symbol_spec.rb +22 -0
- data/spec/lib/algebra/set/tan_spec.rb +13 -0
- data/spec/lib/delta_spec.rb +8 -32
- data/spec/lib/function_spec.rb +34 -60
- data/spec/lib/helper_spec.rb +49 -47
- data/spec/lib/integrand_spec.rb +15 -13
- data/spec/spec_helper.rb +1 -2
- metadata +39 -9
- data/.pryrc +0 -2
- data/.rubocop.yml +0 -25
- data/spec/lib/algebra/set_spec.rb +0 -263
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Dydx::Algebra::Set::Log do
         | 
| 4 | 
            +
              it{ expect(log(1)).to eq(_(0)) }
         | 
| 5 | 
            +
              it{ expect(log(e)).to eq(_(1)) }
         | 
| 6 | 
            +
              it{ expect(log(e ^ :n)).to eq(:n) }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe '#to_s' do
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
              describe '#differentiate' do
         | 
| 11 | 
            +
                it{ expect(log(:x).d(:x).to_s).to eq('( 1 / x )') }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
              describe 'Calculate' do
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Dydx::Algebra::Set::Num do
         | 
| 4 | 
            +
              it{ expect(_(1)).to eq(_(1)) }
         | 
| 5 | 
            +
              it{ expect(_(-1)).to eq(_(-1)) }
         | 
| 6 | 
            +
              it{ expect(e0).to eq(e0) }
         | 
| 7 | 
            +
              it{ expect(e1).to eq(e1) }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              describe '#to_s' do
         | 
| 10 | 
            +
                it{ expect(_(1).to_s).to eq('1') }
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              describe '#differentiate' do
         | 
| 14 | 
            +
                it{ expect(_(1).d(:x).to_s).to eq(_(0).to_s) }
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              describe '#==' do
         | 
| 18 | 
            +
                it{ expect(_(1) == _(1)).to be_true }
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              describe 'Calculate' do
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Dydx::Algebra::Set::Pi do
         | 
| 4 | 
            +
              it{ expect(pi).to eq(pi) }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              describe '#to_s' do
         | 
| 7 | 
            +
                it{ expect(pi.to_s).to eq('pi') }
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              describe '#differentiate' do
         | 
| 11 | 
            +
                it{ expect(pi.d(:x).to_s).to eq(_(0).to_s) }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              describe 'Calculate' do
         | 
| 15 | 
            +
                context 'With Fixnum' do
         | 
| 16 | 
            +
                  it{ expect(pi + 0).to eq(pi) }
         | 
| 17 | 
            +
                  it{ expect(pi - 0).to eq(pi) }
         | 
| 18 | 
            +
                  it{ expect((pi * 0).to_s).to eq('0') }
         | 
| 19 | 
            +
                  it{ expect(pi * 1).to eq(pi) }
         | 
| 20 | 
            +
                  it{ expect{(pi / 0).to_s}.to raise_error(ZeroDivisionError) }
         | 
| 21 | 
            +
                  it{ expect(pi / 1).to eq(pi) }
         | 
| 22 | 
            +
                  it{ expect((pi ^ 0).to_s).to eq('1') }
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Dydx::Algebra::Set::Sin do
         | 
| 4 | 
            +
              it{ expect(sin(pi)).to eq(_(0)) }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              describe '#to_s' do
         | 
| 7 | 
            +
                it{ expect(sin(:x).to_s).to eq('sin( x )') }
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
              describe '#differentiate' do
         | 
| 10 | 
            +
                it{ expect(sin(:x).d.to_s).to eq('cos( x )') }
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              describe 'Calculate' do
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Symbol do
         | 
| 4 | 
            +
              describe '#to_s' do
         | 
| 5 | 
            +
                it{ expect(:x.to_s).to eq('x') }
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
              describe '#differentiate' do
         | 
| 8 | 
            +
                it{ expect(:x.d(:x).to_s).to eq('1') }
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
              describe 'Calculate' do
         | 
| 11 | 
            +
                context 'With Fixnum' do
         | 
| 12 | 
            +
                it{ expect(:x + 0).to eq(:x) }
         | 
| 13 | 
            +
                it{ expect(:x - 0).to eq(:x) }
         | 
| 14 | 
            +
                it{ expect((:x * 0).to_s).to eq('0') }
         | 
| 15 | 
            +
                it{ expect(:x * 1).to eq(:x) }
         | 
| 16 | 
            +
                it{ expect{(:x / 0).to_s}.to raise_error(ZeroDivisionError) }
         | 
| 17 | 
            +
                it{ expect(:x / 1).to eq(:x) }
         | 
| 18 | 
            +
                it{ expect((:x ^ 0).to_s).to eq('1') }
         | 
| 19 | 
            +
                it{ expect(:x ^ 1).to eq(:x) }
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/spec/lib/delta_spec.rb
    CHANGED
    
    | @@ -1,35 +1,11 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe Dydx | 
| 4 | 
            -
              it | 
| 5 | 
            -
              it | 
| 6 | 
            -
              it | 
| 7 | 
            -
              it | 
| 8 | 
            -
              it | 
| 9 | 
            -
              it | 
| 10 | 
            -
              it | 
| 11 | 
            -
             | 
| 12 | 
            -
              before { reset }
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              it 'ex1' do
         | 
| 15 | 
            -
                $y = x ** n
         | 
| 16 | 
            -
                expect(dy/dx).to eq( n * ( x ** ( n - 1 ) ) )
         | 
| 17 | 
            -
                expect(d/dx($y)).to eq( n * ( x ** ( n - 1 ) ) )
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
              it 'ex2' do
         | 
| 21 | 
            -
                $y = x ** (x * 2)
         | 
| 22 | 
            -
                expect(dy/dx).to eq(( 2 * x ) * ( x ** ( ( 2 * x ) - 1 ) ))
         | 
| 23 | 
            -
                expect(d/dx($y)).to eq(( 2 * x ) * ( x ** ( ( 2 * x ) - 1 ) ))
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              it 'ex3' do
         | 
| 27 | 
            -
                $y = (t ** 2) / 2
         | 
| 28 | 
            -
                expect(dy/dt).to eq(t)
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              it 'ex4' do
         | 
| 32 | 
            -
                $y = 2 * (e ** (2 * z))
         | 
| 33 | 
            -
                expect(dy/dz).to eq(4 * ( e ** ( 2 * z ) ))
         | 
| 34 | 
            -
              end
         | 
| 3 | 
            +
            describe Dydx:Delta do
         | 
| 4 | 
            +
              it{ expect(d.class).to eq(Delta) }
         | 
| 5 | 
            +
              it{ expect(dx.class).to eq(Delta) }
         | 
| 6 | 
            +
              it{ expect(dx.var).to eq(:x) }
         | 
| 7 | 
            +
              it{ expect(dx(y).class).to eq(Delta) }
         | 
| 8 | 
            +
              it{ expect(dx(y).var).to eq(:x) }
         | 
| 9 | 
            +
              it{ expect(dx(y).function).to eq(:y) }
         | 
| 10 | 
            +
              it{ expect{dxy}.to raise_error(NameError) }
         | 
| 35 11 | 
             
            end
         | 
    
        data/spec/lib/function_spec.rb
    CHANGED
    
    | @@ -1,65 +1,39 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe Dydx | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
              it  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
               | 
| 14 | 
            -
             | 
| 15 | 
            -
              it  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
               | 
| 30 | 
            -
             | 
| 31 | 
            -
              it  | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                 | 
| 36 | 
            -
                expect(g(2, 3)).to eq(15)
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
              it 'ex4' do
         | 
| 40 | 
            -
                f(a, b) <= (a + b) * b
         | 
| 41 | 
            -
                h(a, b, c) <= d/db(f(a, b))
         | 
| 42 | 
            -
                expect(h(a, b, c)).to eq(( a + ( 2 * b ) ))
         | 
| 43 | 
            -
                expect(h(a, b, c).algebra).to eq(( a + ( 2 * b ) ))
         | 
| 44 | 
            -
              end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
              it 'ex5' do
         | 
| 3 | 
            +
            describe Dydx:Function do
         | 
| 4 | 
            +
              # TODO: refactor
         | 
| 5 | 
            +
              it{ expect(f(x, y)).to eq(f(x, y)) }
         | 
| 6 | 
            +
              it{ expect(f(x, y)).to eq($f) }
         | 
| 7 | 
            +
              it{ expect(f(x, y).algebra).to be_nil }
         | 
| 8 | 
            +
              it{ expect(f(x, y).vars).to eq([:x, :y]) }
         | 
| 9 | 
            +
              it{ expect{f(x, y, z)}.to raise_error(ArgumentError) }
         | 
| 10 | 
            +
              it{ expect{f(x)}.to raise_error(ArgumentError) }
         | 
| 11 | 
            +
              it{ expect(f(x, y) <= x * y ).to eq(f(x, y)) }
         | 
| 12 | 
            +
              it{ expect(f(x, y)).to eq(f(x, y)) }
         | 
| 13 | 
            +
              it{ expect(f(x, y)).to eq($f) }
         | 
| 14 | 
            +
              it{ expect(f(x, y).algebra).to eq(x * y) }
         | 
| 15 | 
            +
              it{ expect(f(x, y)).to eq(x * y) }
         | 
| 16 | 
            +
              it{ expect(eval(f(x, y).to_s)).to eq(f(x, y)) }
         | 
| 17 | 
            +
              it{ expect(f(x, y)).to eq(eval(f(x, y).to_s)) }
         | 
| 18 | 
            +
              it{ expect(f(a, b)).to eq(a * b) }
         | 
| 19 | 
            +
              it{ expect(f(2, 3)).to eq(6) }
         | 
| 20 | 
            +
              it{ expect(f(a + b, c)).to eq((a + b) * c) }
         | 
| 21 | 
            +
              it{ expect(d/dx(f(x, y))).to eq(y) }
         | 
| 22 | 
            +
              it{ expect(d/dy(f(x, y))).to eq(x) }
         | 
| 23 | 
            +
              it{ expect(d/dz(f(x, y))).to eq(0) }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              it{ expect(g(a, b) <= f(a + b, b)).to eq(g(a, b)) }
         | 
| 26 | 
            +
              it{ expect(g(a, b)).to eq($g) }
         | 
| 27 | 
            +
              it{ expect(g(2, 3)).to eq(15) }
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              it{ expect(h(a, b, c) <= d/db(g(a, b))).to eq(h(a, b, c)) }
         | 
| 30 | 
            +
              it{ expect(h(a, b, c) <= d/db(g(a, b))).to eq($h) }
         | 
| 31 | 
            +
              it{ expect(h(a, b, c)).to eq(( ( 2 * b ) + a )) }
         | 
| 32 | 
            +
              it{ expect(h(a, b, c).algebra).to eq(( ( 2 * b ) + a )) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              it 'ex.4' do
         | 
| 35 | 
            +
                $f = nil
         | 
| 47 36 | 
             
                f(x) <= log(x)
         | 
| 48 | 
            -
                expect(f( | 
| 49 | 
            -
                expect(f(0)).to eq(-oo)
         | 
| 50 | 
            -
                expect(f(y)).to eq(log(y))
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                g(x) <= d/dx(f(x))
         | 
| 53 | 
            -
                expect(g(1)).to eq(1)
         | 
| 54 | 
            -
              end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
              it 'ex6' do
         | 
| 57 | 
            -
                f(x) <= sin(x)
         | 
| 58 | 
            -
                expect(f(pi)).to eq(0)
         | 
| 59 | 
            -
                expect(f(pi / 2)).to eq(1)
         | 
| 60 | 
            -
                expect(f(y)).to eq(sin(y))
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                g(x) <= d/dx(f(x))
         | 
| 63 | 
            -
                expect(g(pi)).to eq(-1)
         | 
| 37 | 
            +
                expect(f(a)).to eq(log(a))
         | 
| 64 38 | 
             
              end
         | 
| 65 39 | 
             
            end
         | 
    
        data/spec/lib/helper_spec.rb
    CHANGED
    
    | @@ -3,63 +3,65 @@ require 'spec_helper' | |
| 3 3 | 
             
            describe Helper do
         | 
| 4 4 | 
             
              include Helper
         | 
| 5 5 | 
             
              context '#is_n?' do
         | 
| 6 | 
            -
                it | 
| 7 | 
            -
                it | 
| 8 | 
            -
                it | 
| 9 | 
            -
                it | 
| 10 | 
            -
                it | 
| 11 | 
            -
                it | 
| 12 | 
            -
                it | 
| 13 | 
            -
                it | 
| 6 | 
            +
                it{ expect(0.is_0?).to be_true }
         | 
| 7 | 
            +
                it{ expect(_(0).is_0?).to be_true }
         | 
| 8 | 
            +
                it{ expect(inverse(0, :+).is_0?).to be_true }
         | 
| 9 | 
            +
                it{ expect(1.is_1?).to be_true }
         | 
| 10 | 
            +
                it{ expect(_(1).is_1?).to be_true }
         | 
| 11 | 
            +
                it{ expect(inverse(1, :*).is_1?).to be_true }
         | 
| 12 | 
            +
                it{ expect(-1.is_minus1?).to be_true }
         | 
| 13 | 
            +
                it{ expect(_(-1).is_minus1?).to be_true }
         | 
| 14 14 | 
             
              end
         | 
| 15 15 |  | 
| 16 | 
            -
              context '# | 
| 17 | 
            -
                it | 
| 16 | 
            +
              context '#is_multiple_of' do
         | 
| 17 | 
            +
                it{ expect(0.is_multiple_of(:x).to_s).to eq('0') }
         | 
| 18 | 
            +
                it{ expect(_(0).is_multiple_of(:y).to_s).to eq('0')}
         | 
| 18 19 |  | 
| 19 | 
            -
                it | 
| 20 | 
            -
                it | 
| 21 | 
            -
                it { expect(_(4).multiple_of?(_(2))).to be(true) }
         | 
| 20 | 
            +
                it{ expect(:x.is_multiple_of(:x).to_s).to eq('1') }
         | 
| 21 | 
            +
                it{ expect(:x.is_multiple_of(:y)).to be_false }
         | 
| 22 22 |  | 
| 23 | 
            -
                it | 
| 24 | 
            -
                it | 
| 25 | 
            -
             | 
| 26 | 
            -
                it { expect((x * y).multiple_of?(x)).to be(true) }
         | 
| 27 | 
            -
                it { expect((x * y).multiple_of?(x)).to be(true) }
         | 
| 28 | 
            -
                it { expect((x * y).multiple_of?(z)).to be(false) }
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              context '#like_term?' do
         | 
| 32 | 
            -
                it { expect(x.like_term?(x)).to be true }
         | 
| 33 | 
            -
                it { expect((2 * x).like_term?((3 * x))).to be true }
         | 
| 23 | 
            +
                it{ expect((:x * :y).is_multiple_of(:x)).to eq(:y) }
         | 
| 24 | 
            +
                it{ expect((:x * :y).is_multiple_of(:y)).to eq(:x) }
         | 
| 25 | 
            +
                it{ expect((:x * :y).is_multiple_of(:z)).to be_false }
         | 
| 34 26 | 
             
              end
         | 
| 35 27 |  | 
| 36 28 | 
             
              context '#combinable?' do
         | 
| 37 | 
            -
                it | 
| 38 | 
            -
                it | 
| 39 | 
            -
                it | 
| 40 | 
            -
                it | 
| 41 | 
            -
                it | 
| 42 | 
            -
                it | 
| 43 | 
            -
                it | 
| 44 | 
            -
                it | 
| 45 | 
            -
                it | 
| 46 | 
            -
                it | 
| 47 | 
            -
                it | 
| 29 | 
            +
                it{ expect(:x.combinable?(:x, :+)).to be_true }
         | 
| 30 | 
            +
                it{ expect(:x.combinable?(2 * :x, :+)).to be_true }
         | 
| 31 | 
            +
                it{ expect((2 * :x).combinable?(:x, :+)).to be_true }
         | 
| 32 | 
            +
                it{ expect((2 * :x).combinable?(2 * :x, :+)).to be_true }
         | 
| 33 | 
            +
                it{ expect(:x.combinable?(:y, :+)).to be_false }
         | 
| 34 | 
            +
                it{ expect(1.combinable?(2, :+)).to be_true }
         | 
| 35 | 
            +
                it{ expect(:x.combinable?(:x, :*)).to be_true }
         | 
| 36 | 
            +
                it{ expect(:x.combinable?(:y, :*)).to be_false }
         | 
| 37 | 
            +
                it{ expect(1.combinable?(2, :*)).to be_true }
         | 
| 38 | 
            +
                it{ expect(0.combinable?(:x, :^)).to be_true }
         | 
| 39 | 
            +
                it{ expect(1.combinable?(:y, :^)).to be_true }
         | 
| 48 40 | 
             
              end
         | 
| 49 41 |  | 
| 50 42 | 
             
              context '#distributive?' do
         | 
| 51 | 
            -
                it | 
| 52 | 
            -
                it | 
| 53 | 
            -
                it | 
| 54 | 
            -
                it | 
| 55 | 
            -
                it | 
| 56 | 
            -
                it | 
| 57 | 
            -
                it | 
| 58 | 
            -
                it | 
| 43 | 
            +
                it{ expect(distributive?(:+, :*)).to be_true }
         | 
| 44 | 
            +
                it{ expect(distributive?(:+, :/)).to be_true }
         | 
| 45 | 
            +
                it{ expect(distributive?(:-, :*)).to be_true }
         | 
| 46 | 
            +
                it{ expect(distributive?(:-, :/)).to be_true }
         | 
| 47 | 
            +
                it{ expect(distributive?(:*, :^)).to be_true }
         | 
| 48 | 
            +
                it{ expect(distributive?(:/, :^)).to be_true }
         | 
| 49 | 
            +
                it{ expect(distributive?(:*, :+)).to be_false }
         | 
| 50 | 
            +
                it{ expect(distributive?(:^, :*)).to be_false }
         | 
| 59 51 | 
             
              end
         | 
| 60 52 |  | 
| 61 | 
            -
               | 
| 62 | 
            -
               | 
| 63 | 
            -
               | 
| 64 | 
            -
               | 
| 53 | 
            +
              let(:addition)      { (:x + :y) }
         | 
| 54 | 
            +
              let(:subtraction)   { (:x - :y) }
         | 
| 55 | 
            +
              let(:multiplication){ (:x * :y) }
         | 
| 56 | 
            +
              let(:division)      { (:x / :y) }
         | 
| 57 | 
            +
              let(:exponentiation){ (:x ^ :y) }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              it{ expect(addition.addition?).to be_true }
         | 
| 60 | 
            +
              it{ expect(multiplication.multiplication?).to be_true }
         | 
| 61 | 
            +
              it{ expect(exponentiation.exponentiation?).to be_true }
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              it{ expect(inverse(:x, :+).inverse?(:+, :x)).to be_true }
         | 
| 64 | 
            +
              it{ expect(:x.inverse?(:+, inverse(:x, :+))).to be_true }
         | 
| 65 | 
            +
              it{ expect(inverse(:x, :*).inverse?(:*, :x)).to be_true }
         | 
| 66 | 
            +
              it{ expect(:x.inverse?(:*, inverse(:x, :*))).to be_true }
         | 
| 65 67 | 
             
            end
         | 
    
        data/spec/lib/integrand_spec.rb
    CHANGED
    
    | @@ -1,29 +1,31 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe Dydx | 
| 4 | 
            -
              before  | 
| 3 | 
            +
            describe Dydx:Integrand do
         | 
| 4 | 
            +
              before(:each) do
         | 
| 5 | 
            +
                reset
         | 
| 6 | 
            +
              end
         | 
| 5 7 |  | 
| 6 8 | 
             
              it 'ex1' do
         | 
| 7 9 | 
             
                f(x, y) <= x * y
         | 
| 8 10 | 
             
                integrand = S(f(x, y), dx)
         | 
| 9 11 | 
             
                expect(integrand.function).to eq(f(x, y))
         | 
| 10 12 | 
             
                expect(integrand.var).to eq(:x)
         | 
| 11 | 
            -
                expect | 
| 13 | 
            +
                expect{integrand[4, 3]}.to raise_error(ArgumentError)
         | 
| 12 14 | 
             
              end
         | 
| 13 15 |  | 
| 14 16 | 
             
              it 'ex2' do
         | 
| 15 17 | 
             
                f(x) <= x * x
         | 
| 16 | 
            -
                expect(S(f(x), dx)[0, 1]).to eq(0. | 
| 18 | 
            +
                expect(S(f(x), dx)[0, 1]).to eq(0.3333333333333334)
         | 
| 17 19 | 
             
              end
         | 
| 18 20 |  | 
| 19 21 | 
             
              it 'ex3' do
         | 
| 20 22 | 
             
                f(x) <= sin(x)
         | 
| 21 | 
            -
                expect(S(f(x), dx)[0,  | 
| 23 | 
            +
                expect(S(f(x), dx)[0, Math::PI/2]).to eq(1.000000000021139)
         | 
| 22 24 | 
             
              end
         | 
| 23 25 |  | 
| 24 26 | 
             
              it 'ex4' do
         | 
| 25 27 | 
             
                f(x) <= cos(x)
         | 
| 26 | 
            -
                expect(S(f(x), dx)[0,  | 
| 28 | 
            +
                expect(S(f(x), dx)[0, Math::PI]).to eq(7.440786129085082e-17)
         | 
| 27 29 | 
             
              end
         | 
| 28 30 |  | 
| 29 31 | 
             
              it 'ex5' do
         | 
| @@ -32,20 +34,20 @@ describe Dydx::Integrand do | |
| 32 34 | 
             
              end
         | 
| 33 35 |  | 
| 34 36 | 
             
              it 'ex6' do
         | 
| 35 | 
            -
                f(x) <= e  | 
| 37 | 
            +
                f(x) <= e ^ (- (x ^ 2))
         | 
| 36 38 | 
             
                expect(f(0)).to eq(1)
         | 
| 37 | 
            -
                expect(f(1)).to eq(1.0 | 
| 39 | 
            +
                expect(f(1)).to eq(1.0/Math::E)
         | 
| 38 40 | 
             
                expect(f(1000)).to eq(0)
         | 
| 39 | 
            -
                expect(S(f(x), dx)[-1000, 1000, 3000]).to eq(1. | 
| 41 | 
            +
                expect(S(f(x), dx)[-1000, 1000, 3000]).to eq(1.7724538506374117)
         | 
| 40 42 | 
             
              end
         | 
| 41 43 |  | 
| 42 44 | 
             
              it 'ex7' do
         | 
| 43 | 
            -
                f(x) <= (1.0 / ( 2.0 * Math::PI )  | 
| 44 | 
            -
                expect(S(f(x), dx)[-1000, 1000]).to eq( | 
| 45 | 
            +
                f(x) <= (1.0 / ( ( 2.0 * Math::PI ) ^ 0.5 ) ) * ( e ^ (- (x ^ 2) / 2) )
         | 
| 46 | 
            +
                expect(S(f(x), dx)[-1000, 1000, 1000]).to eq(0.9952054164466917)
         | 
| 45 47 | 
             
              end
         | 
| 46 48 |  | 
| 47 49 | 
             
              it 'ex8' do
         | 
| 48 | 
            -
                f(x) <= (1.0 / ( 2.0 *  | 
| 49 | 
            -
                expect(S(f(x), dx)[-oo, oo]).to eq( | 
| 50 | 
            +
                f(x) <= (1.0 / ( ( 2.0 * pi ) ^ 0.5 ) ) * ( e ^ (- (x ^ 2) / 2) )
         | 
| 51 | 
            +
                expect(S(f(x), dx)[-oo, oo, 1000]).to eq(0.9952054164466917)
         | 
| 50 52 | 
             
              end
         | 
| 51 53 | 
             
            end
         |