Commit 6eb07c9
Changed files (1)
spec
practice
spec/practice/expression_spec.rb
@@ -76,9 +76,48 @@ class Multiply < Struct.new(:left, :right)
end
end
+class Boolean < Struct.new(:value)
+ def to_s
+ value.to_s
+ end
+
+ def inspect
+ "<<#{self}>>"
+ end
+
+ def reducible?
+ false
+ end
+end
+
+class LessThan < Struct.new(:left, :right)
+ def to_s
+ "#{left} < #{right}"
+ end
+
+ def inspect
+ "<<#{self}>>"
+ end
+
+ def reducible?
+ true
+ end
+
+ def reduce
+ if left.reducible?
+ LessThan.new(left.reduce, right)
+ elsif right.reducible?
+ LessThan.new(left, right.reduce)
+ else
+ Boolean.new(left.value < right.value)
+ end
+ end
+end
+
describe "expressions" do
it "can do math" do
machine = Machine.new(Add.new(Multiply.new(Number.new(1), Number.new(2)), Multiply.new(Number.new(3), Number.new(4))))
- p machine.run
+ result = machine.run
+ p result
end
end