###################################################
# #
# This is test script for 'algebraic-parser.rb' #
# #
###################################################
require "algebra/algebraic-parser.rb"
class A
def self.indeterminate(str)
case str
when "x"; 7
when "y"; 11
when /\d+/; eval($&)
else
raise
end
end
def self.ground
Fixnum
end
end
p AlgebraicParser.eval("x * y - x^2 + x/8", A) #=> 7*11 - 7**2 + 7/8 = 28
require "algebra/rational"
class B < A
def self.indeterminate(str)
case str
when /\d+/; Rational(eval($&))
else
super
end
end
end
puts AlgebraicParser.eval("x * y - x^2 + x/8", B)
#=> 7*11 - 7**2 + 7/8 = 231/8
p AlgebraicParser.eval("2^(-8+4-2+(3-1)^3)^2", Integer) #=> 16
require "algebra/m-polynomial"
include Algebra
F = MPolynomial(Rational)
p AlgebraicParser.eval("- (2*y)**3 + x", F) #=> -8y^3 + x
F.variables.clear
p AlgebraicParser.eval("x; y; - (2*y)**3 + x", F) #=> x - 8y^3
syntax highlighted by Code2HTML, v. 0.9.1