OSDN Git Service

solver supports new factory
authorTomohiro Nishimura <tomohiro68@gmail.com>
Fri, 12 Feb 2010 11:03:44 +0000 (20:03 +0900)
committerTomohiro Nishimura <tomohiro68@gmail.com>
Fri, 12 Feb 2010 11:03:44 +0000 (20:03 +0900)
19 files changed:
lib/mint/factory.rb
lib/mint/solver.rb
lib/mint/solver/base.rb [moved from lib/mint/solver/engines/base.rb with 77% similarity]
lib/mint/solver/engines.rb [deleted file]
lib/mint/solver/maxima.rb [moved from lib/mint/solver/engines/maxima.rb with 87% similarity]
lib/mint/solver/maxima/arithmetic.rb [moved from lib/mint/solver/engines/maxima/arithmetic.rb with 59% similarity]
lib/mint/solver/maxima/base.rb [moved from lib/mint/solver/engines/maxima/base.rb with 74% similarity]
lib/mint/solver/maxima/expantion.rb [moved from lib/mint/solver/engines/maxima/expantion.rb with 59% similarity]
lib/mint/solver/maxima/factorization.rb [moved from lib/mint/solver/engines/maxima/factorization.rb with 60% similarity]
lib/mint/solver/maxima/fraction.rb [moved from lib/mint/solver/engines/maxima/fraction.rb with 59% similarity]
lib/mint/solver/maxima/partional_fraction_expansion.rb [moved from lib/mint/solver/engines/maxima/partional_fraction_expansion.rb with 63% similarity]
spec/factory_spec.rb
spec/solver/base_spec.rb [moved from spec/solver/engines/base_spec.rb with 82% similarity]
spec/solver/maxima/arithmetic_spec.rb [moved from spec/solver/engines/maxima/arithmetic_spec.rb with 75% similarity]
spec/solver/maxima/base_spec.rb [moved from spec/solver/engines/maxima/base_spec.rb with 92% similarity]
spec/solver/maxima/expantion_spec.rb [moved from spec/solver/engines/maxima/expantion_spec.rb with 66% similarity]
spec/solver/maxima/factorization_spec.rb [moved from spec/solver/engines/maxima/factorization_spec.rb with 65% similarity]
spec/solver/maxima/fraction_spec.rb [moved from spec/solver/engines/maxima/fraction_spec.rb with 73% similarity]
spec/solver/maxima/partional_fraction_expansion_spec.rb [moved from spec/solver/engines/maxima/partional_fraction_expansion_spec.rb with 63% similarity]

index 3edd944..281830a 100644 (file)
@@ -29,16 +29,16 @@ module Mint
 
     class Factory < Mint::FactoryBase
       def self.create(type, context = Maxima)
-        context.const_get(constantize(type)).new(amount)
+        context.const_get(constantize(type)).new
       rescue NameError
         nil
       end
     end
 
     module Maxima
-      class Solver
+      class Factory
         def self.create(type)
-          Solver::Factory.create(type)
+          Solver::Factory.create(type, Maxima)
         end
       end
     end
index 9aa8d3c..ffdfc50 100644 (file)
@@ -2,28 +2,11 @@
 
 module Mint
   module Solver
-
-    @@_current_engine = nil
-
-    class << self
-      def current_engine
-        @@_current_engine
-      end
-
-      def set_engine(engine)
-        @@_current_engine = engine
-      end
-
-      def clear_engine
-        @@_current_engine = nil
-      end
-
-      def solve(problem)
-        current_engine.solve(problem)
-      end
-    end
   end
 end
 
-require 'solver/engines'
+dir = File.dirname(__FILE__) + '/solver/*'
+Dir[dir].each do |solver|
+  require solver
+end
 
similarity index 77%
rename from lib/mint/solver/engines/base.rb
rename to lib/mint/solver/base.rb
index 28b5d99..5edeac1 100644 (file)
@@ -1,9 +1,10 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine
+module Mint::Solver
+
   class Base
 
-    def self.solve(problem)
+    def solve(problem)
       unless problem.instance_of?(Mint::Expression)
         raise 'need to Mint::Expression'
       end
@@ -12,7 +13,7 @@ module Mint::Solver::Engine
     end
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       raise 'you must overwrite this method.'
     end
   end
diff --git a/lib/mint/solver/engines.rb b/lib/mint/solver/engines.rb
deleted file mode 100644 (file)
index ce3ae24..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*-
-
-module Mint::Solver
-  module Engine
-  end
-end
-
-# mint/solver/engines/base must be required first
-require File.dirname(__FILE__) + '/engines/base'
-solvers = File.dirname(__FILE__) + '/engines/*'
-Dir[solvers].each do |engine|
-  require engine
-end
-
similarity index 87%
rename from lib/mint/solver/engines/maxima.rb
rename to lib/mint/solver/maxima.rb
index 8728b61..8812c35 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine
+module Mint::Solver
   module Maxima
   end
 end
similarity index 59%
rename from lib/mint/solver/engines/maxima/arithmetic.rb
rename to lib/mint/solver/maxima/arithmetic.rb
index daa9bdd..3fea101 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
   class Arithmetic < Base
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       maxima(problem)
     end
   end
similarity index 74%
rename from lib/mint/solver/engines/maxima/base.rb
rename to lib/mint/solver/maxima/base.rb
index 41104ae..20236df 100644 (file)
@@ -1,31 +1,31 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
-  class Base < Mint::Solver::Engine::Base
+  class Base < Mint::Solver::Base
 
     private
-    def self.maxima(expression)
+    def maxima(expression)
       result = exec_maxima(expression)
       result.match(/^\(%o2\)\s+(.*)$/)[1]
     end
 
-    def self.expand(expression)
+    def expand(expression)
       maxima("expand(#{expression})")
     end
 
-    def self.factor(expression)
+    def factor(expression)
       maxima("factor(#{expression})")
     end
 
-    def self.partfrac(expression)
+    def partfrac(expression)
       unless x = expression.match(/([a-zA-Z])/)
         raise 'invalid fractional expression'
       end
       maxima("partfrac(#{expression}, #{x[0]})")
     end
 
-    def self.exec_maxima(expression)
+    def exec_maxima(expression)
       require 'open3'
       command = "maxima -r 'display2d:false; #{expression};'"
       Open3.popen3(command) do |sin, sout, serr|
similarity index 59%
rename from lib/mint/solver/engines/maxima/expantion.rb
rename to lib/mint/solver/maxima/expantion.rb
index 277bc2c..2858474 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
   class Expantion < Base
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       expand(problem)
     end
   end
similarity index 60%
rename from lib/mint/solver/engines/maxima/factorization.rb
rename to lib/mint/solver/maxima/factorization.rb
index 2df9130..6a613d2 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
   class Factorization < Base
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       factor(problem)
     end
   end
similarity index 59%
rename from lib/mint/solver/engines/maxima/fraction.rb
rename to lib/mint/solver/maxima/fraction.rb
index ece2b9e..75b8b61 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
   class Fraction < Base
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       maxima(problem)
     end
   end
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-module Mint::Solver::Engine::Maxima
+module Mint::Solver::Maxima
 
   class PartilanFractionExpansion < Base
 
     private
-    def self.solve_problem(problem)
+    def solve_problem(problem)
       partfrac(problem)
     end
   end
index e58e6bb..21e8138 100644 (file)
@@ -41,9 +41,8 @@ module Mint
         context Maxima do
 
           it 'can generate solver' do
-            pending 'not implemented yet'
-            solver = Factory.create(:ordinary_arithmetic)
-            solver.should be_an_instance_of(OrdinaryArithmetic)
+            solver = Factory.create(:fraction)
+            solver.should be_an_instance_of(Fraction)
           end
         end
       end
similarity index 82%
rename from spec/solver/engines/base_spec.rb
rename to spec/solver/base_spec.rb
index d1612c1..e74f0f7 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../spec_helper.rb'
 
-module Mint
+module Mint::Solver
 
-  describe Solver::Engine::Base do
+  describe Base do
 
-    subject { Solver::Engine::Base }
+    subject { Base.new }
 
     describe 'core functions' do
       context 'solve problem' do
similarity index 75%
rename from spec/solver/engines/maxima/arithmetic_spec.rb
rename to spec/solver/maxima/arithmetic_spec.rb
index 22e72a4..5880b25 100644 (file)
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
 
-module Mint::Solver::Engine
-  describe Maxima::Arithmetic do
-    subject { Maxima::Arithmetic }
+module Mint::Solver::Maxima
+
+  describe Arithmetic do
+
+    subject { Arithmetic.new }
 
     [
       ['-92.92 - (-0.45)', '-92.47'],
similarity index 92%
rename from spec/solver/engines/maxima/base_spec.rb
rename to spec/solver/maxima/base_spec.rb
index a22d350..24d6a16 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
 
-module Mint::Solver::Engine
+module Mint::Solver::Maxima
 
-  describe Maxima::Base do
+  describe Base do
 
-    subject { Maxima::Base }
+    subject { Base.new }
 
     it 'uses maxima' do
       answer = subject.__send__(:maxima, '2 + 3')
similarity index 66%
rename from spec/solver/engines/maxima/expantion_spec.rb
rename to spec/solver/maxima/expantion_spec.rb
index 23daf22..5de1113 100644 (file)
@@ -1,10 +1,13 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Mint::Solver::Maxima
+
+  describe Expantion do
+
+    subject { Expantion.new }
 
-module Mint::Solver::Engine
-  describe Maxima::Expantion do
-    subject { Maxima::Expantion }
     [
       ['(2a + 1)(3a - 2)', '6a^2 - a - 2'],
     ].each do |exp, ans|
similarity index 65%
rename from spec/solver/engines/maxima/factorization_spec.rb
rename to spec/solver/maxima/factorization_spec.rb
index 73ecaa4..13a9591 100644 (file)
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
 
-module Mint::Solver::Engine
-  describe Maxima::Factorization do
-    subject { Maxima::Factorization }
+module Mint::Solver::Maxima
+
+  describe Factorization do
+
+    subject { Factorization.new }
     [
       ['6a^2 - a - 2', '(2a + 1)(3a - 2)'],
     ].each do |exp, ans|
similarity index 73%
rename from spec/solver/engines/maxima/fraction_spec.rb
rename to spec/solver/maxima/fraction_spec.rb
index 8424039..ef4bffe 100644 (file)
@@ -1,10 +1,13 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Mint::Solver::Maxima
+
+  describe Fraction do
+
+    subject { Fraction.new }
 
-module Mint::Solver::Engine
-  describe Maxima::Fraction do
-    subject { Maxima::Fraction }
     [
       ['-70/71 div 84/50', '-125/213'],
       ['25/66 * 60/93', '250/1023'],
@@ -1,10 +1,13 @@
 # -*- coding: utf-8 -*-
 
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Mint::Solver::Maxima
+
+  describe PartilanFractionExpansion do
+
+    subject { PartilanFractionExpansion.new }
 
-module Mint::Solver::Engine
-  describe Maxima::PartilanFractionExpansion do
-    subject { Maxima::PartilanFractionExpansion }
     [
       ['1/(x + 1)(x + 2)', '1 / (x + 1) - 1 / (x + 2)'],
     ].each do |exp, ans|