OSDN Git Service

refactored spec for complex_number_arithmetic generator
[mint/mint-lib.git] / spec / generator / fractional_arithmetic_spec.rb
1 # -*- coding: utf-8 -*-
2
3 require File.dirname(__FILE__) + '/../spec_helper.rb'
4
5 module Mint::Generator
6
7   describe FractionalArithmetic do
8
9     subject{ FractionalArithmetic.new }
10
11     before(:all) { @opt_pattern = %r! [+\-*]|div ! }
12
13     it_should_behave_like 'Arithmetic'
14
15     it do
16       subject.should_receive(:fraction)
17       subject.__send__(:operand)
18     end
19
20     context 'create expression' do
21       (1..100).to_a.shuffle[1, 10].each do |n|
22         context n do
23           before do
24             settings = {
25               :minus => true,
26               :numerator_min   => 1, :numerator_max   => 100,
27               :denominator_min => 2, :denominator_max => 100,
28               :term_number => n,
29             }
30             @problems = subject.generate(settings)
31           end
32           it { @problems.should have(1).problem }
33           it { @problems.first.split(@opt_pattern).should have(n).operands }
34           it { @problems.first.scan(@opt_pattern).should have(n-1).operator }
35           it { @problems.first.split(@opt_pattern).each {|operand| operand.should match(%r!/!) } }
36         end
37       end
38     end
39
40     context 'need parenthesis' do
41       %w[ * div ].each do |operator|
42         context operator do
43           before do
44             settings = { :operators => [operator], :minus => false }
45             @problems = subject.generate(settings)
46           end
47           it { @problems.first.split(operator)[1].should match(/\(.*\)/) }
48         end
49       end
50     end
51   end
52 end
53