gecoder 0.5.0 → 0.6.0

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.
Files changed (61) hide show
  1. data/CHANGES +16 -3
  2. data/example/magic_sequence.rb +1 -1
  3. data/example/queens.rb +1 -1
  4. data/example/send_more_money.rb +1 -1
  5. data/example/sudoku.rb +1 -1
  6. data/ext/missing.cpp +18 -4
  7. data/ext/missing.h +8 -0
  8. data/lib/gecoder/bindings.rb +30 -3
  9. data/lib/gecoder/bindings/bindings.rb +22 -0
  10. data/lib/gecoder/interface/binding_changes.rb +81 -107
  11. data/lib/gecoder/interface/branch.rb +65 -14
  12. data/lib/gecoder/interface/constraints.rb +1 -0
  13. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +16 -12
  14. data/lib/gecoder/interface/constraints/int/arithmetic.rb +7 -3
  15. data/lib/gecoder/interface/constraints/int/linear.rb +19 -16
  16. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +8 -4
  17. data/lib/gecoder/interface/constraints/int_enum/channel.rb +14 -6
  18. data/lib/gecoder/interface/constraints/int_enum/element.rb +7 -5
  19. data/lib/gecoder/interface/constraints/int_enum/sort.rb +1 -4
  20. data/lib/gecoder/interface/constraints/set/cardinality.rb +6 -3
  21. data/lib/gecoder/interface/constraints/set/connection.rb +136 -0
  22. data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
  23. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +61 -0
  24. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +32 -0
  25. data/lib/gecoder/interface/constraints/set_var_constraints.rb +1 -0
  26. data/lib/gecoder/interface/enum_wrapper.rb +12 -3
  27. data/lib/gecoder/interface/model.rb +77 -56
  28. data/lib/gecoder/interface/search.rb +74 -5
  29. data/lib/gecoder/interface/variables.rb +117 -15
  30. data/lib/gecoder/version.rb +1 -1
  31. data/specs/binding_changes.rb +9 -5
  32. data/specs/bool_var.rb +8 -12
  33. data/specs/branch.rb +85 -19
  34. data/specs/constraints/arithmetic.rb +99 -71
  35. data/specs/constraints/bool_enum.rb +26 -18
  36. data/specs/constraints/boolean.rb +53 -49
  37. data/specs/constraints/cardinality.rb +33 -26
  38. data/specs/constraints/channel.rb +77 -6
  39. data/specs/constraints/connection.rb +352 -0
  40. data/specs/constraints/constraints.rb +10 -1
  41. data/specs/constraints/count.rb +79 -39
  42. data/specs/constraints/distinct.rb +128 -9
  43. data/specs/constraints/element.rb +26 -19
  44. data/specs/constraints/equality.rb +2 -1
  45. data/specs/constraints/int_domain.rb +19 -12
  46. data/specs/constraints/int_relation.rb +12 -6
  47. data/specs/constraints/linear.rb +30 -30
  48. data/specs/constraints/reification_sugar.rb +8 -4
  49. data/specs/constraints/set_domain.rb +24 -18
  50. data/specs/constraints/set_relation.rb +38 -23
  51. data/specs/constraints/sort.rb +12 -10
  52. data/specs/enum_wrapper.rb +9 -3
  53. data/specs/int_var.rb +8 -4
  54. data/specs/logging.rb +24 -0
  55. data/specs/model.rb +25 -7
  56. data/specs/search.rb +41 -1
  57. data/specs/set_var.rb +36 -7
  58. data/specs/spec_helper.rb +3 -10
  59. data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +1 -1
  60. metadata +12 -3
  61. data/specs/tmp +0 -22
@@ -3,9 +3,12 @@ require File.dirname(__FILE__) + '/constraint_helper'
3
3
 
4
4
  class DistinctSampleProblem < Gecode::Model
5
5
  attr :vars
6
+ attr :sets
6
7
 
7
8
  def initialize
8
9
  @vars = int_var_array(2, 1)
10
+ @sets = set_var_array(2, [], 0..2)
11
+ branch_on wrap_enum(@sets)
9
12
  end
10
13
  end
11
14
 
@@ -17,13 +20,15 @@ describe Gecode::Constraints::IntEnum::Distinct do
17
20
  @model.solve!
18
21
  end
19
22
  @expect_options = lambda do |strength, reif_var|
20
- Gecode::Raw.should_receive(:distinct).once.with(@model.active_space,
23
+ Gecode::Raw.should_receive(:distinct).once.with(
24
+ an_instance_of(Gecode::Raw::Space),
21
25
  an_instance_of(Gecode::Raw::IntVarArray), strength)
22
26
  end
23
27
  end
24
28
 
25
29
  it 'should translate into a distinct constraint' do
26
- Gecode::Raw.should_receive(:distinct).once.with(@model.active_space,
30
+ Gecode::Raw.should_receive(:distinct).once.with(
31
+ an_instance_of(Gecode::Raw::Space),
27
32
  anything, Gecode::Raw::ICL_DEF)
28
33
  @invoke_options.call({})
29
34
  end
@@ -53,10 +58,12 @@ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
53
58
  end
54
59
  @expect_options = lambda do |strength, reif_var|
55
60
  if reif_var.nil?
56
- Gecode::Raw.should_receive(:distinct).once.with(@model.active_space,
61
+ Gecode::Raw.should_receive(:distinct).once.with(
62
+ an_instance_of(Gecode::Raw::Space),
57
63
  anything, an_instance_of(Gecode::Raw::IntVarArray), strength)
58
64
  else
59
- Gecode::Raw.should_receive(:distinct).once.with(@model.active_space,
65
+ Gecode::Raw.should_receive(:distinct).once.with(
66
+ an_instance_of(Gecode::Raw::Space),
60
67
  anything, an_instance_of(Gecode::Raw::IntVarArray), strength,
61
68
  an_instance_of(Gecode::Raw::BoolVar))
62
69
  end
@@ -64,7 +71,8 @@ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
64
71
  end
65
72
 
66
73
  it 'should translate into a distinct constraint with offsets' do
67
- Gecode::Raw.should_receive(:distinct).once.with(@model.active_space,
74
+ Gecode::Raw.should_receive(:distinct).once.with(
75
+ an_instance_of(Gecode::Raw::Space),
68
76
  anything, anything, Gecode::Raw::ICL_DEF)
69
77
  @invoke_options.call({})
70
78
  end
@@ -72,8 +80,8 @@ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
72
80
  it 'should consider offsets when making variables distinct' do
73
81
  @model.vars.with_offsets(-1,0).must_be.distinct
74
82
  x,y = @model.solve!.vars
75
- x.val.should equal(1)
76
- y.val.should equal(1)
83
+ x.value.should equal(1)
84
+ y.value.should equal(1)
77
85
  end
78
86
 
79
87
  # This tests two distinct in conjunction. It's here because of a bug found.
@@ -86,8 +94,8 @@ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
86
94
  it 'should accept an array as offsets' do
87
95
  @model.vars.with_offsets([-1,0]).must_be.distinct
88
96
  x,y = @model.solve!.vars
89
- x.val.should equal(1)
90
- y.val.should equal(1)
97
+ x.value.should equal(1)
98
+ y.value.should equal(1)
91
99
  end
92
100
 
93
101
  it 'should not allow negation' do
@@ -96,4 +104,115 @@ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
96
104
  end
97
105
 
98
106
  it_should_behave_like 'constraint with strength option'
107
+ end
108
+
109
+ describe Gecode::Constraints::SetEnum::Distinct do
110
+ before do
111
+ @model = DistinctSampleProblem.new
112
+ @sets = @model.sets
113
+ @size = 1
114
+
115
+ @invoke_options = lambda do |hash|
116
+ @sets.must_be.distinct(hash.update(:size => @size))
117
+ @model.solve!
118
+ end
119
+ @expect_options = lambda do |strength, reif_var|
120
+ Gecode::Raw.should_receive(:distinct).once.with(
121
+ an_instance_of(Gecode::Raw::Space),
122
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
123
+ end
124
+ end
125
+
126
+ it 'should translate into a distinct constraint' do
127
+ Gecode::Raw.should_receive(:distinct).once.with(
128
+ an_instance_of(Gecode::Raw::Space),
129
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
130
+ @sets.must_be.distinct(:size => @size)
131
+ @model.solve!
132
+ end
133
+
134
+ it 'should constrain sets to be distinct' do
135
+ @sets.must_be.distinct(:size => @size)
136
+ @sets[0].must_be.superset_of 0
137
+ solution = @model.solve!
138
+ solution.should_not be_nil
139
+ set1, set2 = solution.sets
140
+ set1.value.size.should == @size
141
+ set2.value.size.should == @size
142
+ set1.value.should_not == set2.value
143
+ end
144
+
145
+ it 'should not allow negation' do
146
+ lambda{ @sets.must_not_be.distinct(:size => @size) }.should raise_error(
147
+ Gecode::MissingConstraintError)
148
+ end
149
+
150
+ it 'should not allow options other than :size' do
151
+ lambda do
152
+ @sets.must_be.distinct(:size => @size, :foo => 17)
153
+ end.should raise_error(ArgumentError)
154
+ end
155
+
156
+ it 'should raise error if :size is not specified' do
157
+ lambda{ @sets.must_be.distinct }.should raise_error(ArgumentError)
158
+ end
159
+
160
+ it_should_behave_like 'non-reifiable set constraint'
161
+ end
162
+
163
+ describe Gecode::Constraints::SetEnum::Distinct, ' (at most one)' do
164
+ before do
165
+ @model = DistinctSampleProblem.new
166
+ @sets = @model.sets
167
+ @size = 2
168
+
169
+ @invoke_options = lambda do |hash|
170
+ @sets.must.at_most_share_one_element hash.update(:size => @size)
171
+ @model.solve!
172
+ end
173
+ @expect_options = lambda do |strength, reif_var|
174
+ Gecode::Raw.should_receive(:atmostOne).once.with(
175
+ an_instance_of(Gecode::Raw::Space),
176
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
177
+ end
178
+ end
179
+
180
+ it 'should translate into a atmostOne constraint' do
181
+ Gecode::Raw.should_receive(:atmostOne).once.with(
182
+ an_instance_of(Gecode::Raw::Space),
183
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
184
+ @sets.must.at_most_share_one_element(:size => @size)
185
+ @model.solve!
186
+ end
187
+
188
+ it 'should constrain sets to have at most one element in common' do
189
+ @sets.must.at_most_share_one_element(:size => @size)
190
+ @sets[0].must_not_be.superset_of 0
191
+ solution = @model.solve!
192
+ solution.should_not be_nil
193
+ set1, set2 = solution.sets
194
+ set1.value.size.should == @size
195
+ set2.value.size.should == @size
196
+ (set1.value.to_a & set2.value.to_a).size.should <= 1
197
+ end
198
+
199
+ it 'should not allow negation' do
200
+ lambda do
201
+ @sets.must_not.at_most_share_one_element(:size => @size)
202
+ end.should raise_error(Gecode::MissingConstraintError)
203
+ end
204
+
205
+ it 'should not allow options other than :size' do
206
+ lambda do
207
+ @sets.must.at_most_share_one_element(:size => @size, :foo => 17)
208
+ end.should raise_error(ArgumentError)
209
+ end
210
+
211
+ it 'should raise error if :size is not specified' do
212
+ lambda do
213
+ @sets.must.at_most_share_one_element
214
+ end.should raise_error(ArgumentError)
215
+ end
216
+
217
+ it_should_behave_like 'non-reifiable set constraint'
99
218
  end
@@ -27,28 +27,35 @@ describe Gecode::Constraints::IntEnum::Element do
27
27
 
28
28
  # Creates an expectation corresponding to the specified input.
29
29
  @expect = lambda do |element, relation, target, strength, reif_var, negated|
30
- target = target.bind if target.respond_to? :bind
31
- element = element.bind if element.respond_to? :bind
32
- if reif_var.nil?
33
- if !negated and relation == Gecode::Raw::IRT_EQ and
34
- target.kind_of? Gecode::Raw::IntVar
35
- Gecode::Raw.should_receive(:element).once.with(@model.active_space,
36
- an_instance_of(Gecode::Raw::IntVarArray),
37
- element, target, strength)
30
+ @model.allow_space_access do
31
+ target = target.bind if target.respond_to? :bind
32
+ element = element.bind if element.respond_to? :bind
33
+ if reif_var.nil?
34
+ if !negated and relation == Gecode::Raw::IRT_EQ and
35
+ target.kind_of? Gecode::Raw::IntVar
36
+ Gecode::Raw.should_receive(:element).once.with(
37
+ an_instance_of(Gecode::Raw::Space),
38
+ an_instance_of(Gecode::Raw::IntVarArray),
39
+ element, target, strength)
40
+ else
41
+ Gecode::Raw.should_receive(:element).once.with(
42
+ an_instance_of(Gecode::Raw::Space),
43
+ an_instance_of(Gecode::Raw::IntVarArray),
44
+ element, an_instance_of(Gecode::Raw::IntVar), strength)
45
+ Gecode::Raw.should_receive(:rel).once.with(
46
+ an_instance_of(Gecode::Raw::Space),
47
+ an_instance_of(Gecode::Raw::IntVar), relation, target, strength)
48
+ end
38
49
  else
39
- Gecode::Raw.should_receive(:element).once.with(@model.active_space,
50
+ Gecode::Raw.should_receive(:element).once.with(
51
+ an_instance_of(Gecode::Raw::Space),
40
52
  an_instance_of(Gecode::Raw::IntVarArray),
41
53
  element, an_instance_of(Gecode::Raw::IntVar), strength)
42
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
43
- an_instance_of(Gecode::Raw::IntVar), relation, target, strength)
54
+ Gecode::Raw.should_receive(:rel).once.with(
55
+ an_instance_of(Gecode::Raw::Space),
56
+ an_instance_of(Gecode::Raw::IntVar), relation, target,
57
+ an_instance_of(Gecode::Raw::BoolVar), strength)
44
58
  end
45
- else
46
- Gecode::Raw.should_receive(:element).once.with(@model.active_space,
47
- an_instance_of(Gecode::Raw::IntVarArray),
48
- element, an_instance_of(Gecode::Raw::IntVar), strength)
49
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
50
- an_instance_of(Gecode::Raw::IntVar), relation, target,
51
- an_instance_of(Gecode::Raw::BoolVar), strength)
52
59
  end
53
60
  end
54
61
 
@@ -83,7 +90,7 @@ describe Gecode::Constraints::IntEnum::Element do
83
90
 
84
91
  it 'should handle fixnum enums as enumeration' do
85
92
  @fixnum_prices[@store].must == @fixnum_prices[2]
86
- @model.solve!.store.val.should equal(2)
93
+ @model.solve!.store.value.should equal(2)
87
94
  end
88
95
 
89
96
  it 'should translate reification when using equality' do
@@ -10,7 +10,8 @@ describe Gecode::Constraints::IntEnum::Equality do
10
10
  @model.solve!
11
11
  end
12
12
  @expect_options = lambda do |strength, reif_var|
13
- Gecode::Raw.should_receive(:eq).once.with(@model.active_space,
13
+ Gecode::Raw.should_receive(:eq).once.with(
14
+ an_instance_of(Gecode::Raw::Space),
14
15
  anything, strength)
15
16
  end
16
17
  end
@@ -15,28 +15,35 @@ describe Gecode::Constraints::Int::Domain do
15
15
  @model.solve!
16
16
  end
17
17
  @expect_options = lambda do |strength, reif_var|
18
- if reif_var.nil?
19
- Gecode::Raw.should_receive(:dom).once.with(@model.active_space,
20
- @x.bind, an_instance_of(Gecode::Raw::IntSet), strength)
21
- else
22
- Gecode::Raw.should_receive(:dom).once.with(@model.active_space,
23
- @x.bind, an_instance_of(Gecode::Raw::IntSet),
24
- an_instance_of(Gecode::Raw::BoolVar), strength)
18
+ @model.allow_space_access do
19
+ if reif_var.nil?
20
+ Gecode::Raw.should_receive(:dom).once.with(
21
+ an_instance_of(Gecode::Raw::Space),
22
+ @x.bind, an_instance_of(Gecode::Raw::IntSet), strength)
23
+ else
24
+ Gecode::Raw.should_receive(:dom).once.with(
25
+ an_instance_of(Gecode::Raw::Space),
26
+ @x.bind, an_instance_of(Gecode::Raw::IntSet),
27
+ an_instance_of(Gecode::Raw::BoolVar), strength)
28
+ end
25
29
  end
26
30
  end
27
31
  end
28
32
 
29
33
  it 'should translate domain constraints with range domains' do
30
- Gecode::Raw.should_receive(:dom).once.with(@model.active_space,
31
- @x.bind, @range_domain.first, @range_domain.last, Gecode::Raw::ICL_DEF)
34
+ Gecode::Raw.should_receive(:dom).once.with(
35
+ an_instance_of(Gecode::Raw::Space),
36
+ an_instance_of(Gecode::Raw::IntVar), @range_domain.first,
37
+ @range_domain.last, Gecode::Raw::ICL_DEF)
32
38
  @x.must_be.in @range_domain
33
39
  @model.solve!
34
40
  end
35
41
 
36
42
  it 'should translate domain constraints with three dot range domains' do
37
- Gecode::Raw.should_receive(:dom).once.with(@model.active_space,
38
- @x.bind, @three_dot_range_domain.first, @three_dot_range_domain.last,
39
- Gecode::Raw::ICL_DEF)
43
+ Gecode::Raw.should_receive(:dom).once.with(
44
+ an_instance_of(Gecode::Raw::Space),
45
+ an_instance_of(Gecode::Raw::IntVar), @three_dot_range_domain.first,
46
+ @three_dot_range_domain.last, Gecode::Raw::ICL_DEF)
40
47
  @x.must_be.in @three_dot_range_domain
41
48
  @model.solve!
42
49
  end
@@ -15,11 +15,13 @@ describe Gecode::Constraints::Int::Linear, ' (simple ones)' do
15
15
  end
16
16
  @expect_options = lambda do |strength, reif_var|
17
17
  if reif_var.nil?
18
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
18
+ Gecode::Raw.should_receive(:rel).once.with(
19
+ an_instance_of(Gecode::Raw::Space),
19
20
  anything, Gecode::Raw::IRT_GR, anything,
20
21
  strength)
21
22
  else
22
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
23
+ Gecode::Raw.should_receive(:rel).once.with(
24
+ an_instance_of(Gecode::Raw::Space),
23
25
  an_instance_of(Gecode::Raw::IntVar), Gecode::Raw::IRT_GR, anything,
24
26
  an_instance_of(Gecode::Raw::BoolVar), strength)
25
27
  end
@@ -28,7 +30,8 @@ describe Gecode::Constraints::Int::Linear, ' (simple ones)' do
28
30
 
29
31
  Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
30
32
  it "should translate #{relation} with constant to simple relation" do
31
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
33
+ Gecode::Raw.should_receive(:rel).once.with(
34
+ an_instance_of(Gecode::Raw::Space),
32
35
  an_instance_of(Gecode::Raw::IntVar), type, @int, Gecode::Raw::ICL_DEF)
33
36
  @x.must.send(relation, @int)
34
37
  @model.solve!
@@ -37,7 +40,8 @@ describe Gecode::Constraints::Int::Linear, ' (simple ones)' do
37
40
 
38
41
  Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
39
42
  it "should translate negated #{relation} with constant to simple relation" do
40
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
43
+ Gecode::Raw.should_receive(:rel).once.with(
44
+ an_instance_of(Gecode::Raw::Space),
41
45
  an_instance_of(Gecode::Raw::IntVar), type, @int, Gecode::Raw::ICL_DEF)
42
46
  @x.must_not.send(relation, @int)
43
47
  @model.solve!
@@ -46,7 +50,8 @@ describe Gecode::Constraints::Int::Linear, ' (simple ones)' do
46
50
 
47
51
  Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
48
52
  it "should translate #{relation} with variables to simple relation" do
49
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
53
+ Gecode::Raw.should_receive(:rel).once.with(
54
+ an_instance_of(Gecode::Raw::Space),
50
55
  an_instance_of(Gecode::Raw::IntVar), type,
51
56
  an_instance_of(Gecode::Raw::IntVar), Gecode::Raw::ICL_DEF)
52
57
  @x.must.send(relation, @y)
@@ -56,7 +61,8 @@ describe Gecode::Constraints::Int::Linear, ' (simple ones)' do
56
61
 
57
62
  Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
58
63
  it "should translate negated #{relation} with variable to simple relation" do
59
- Gecode::Raw.should_receive(:rel).once.with(@model.active_space,
64
+ Gecode::Raw.should_receive(:rel).once.with(
65
+ an_instance_of(Gecode::Raw::Space),
60
66
  an_instance_of(Gecode::Raw::IntVar), type,
61
67
  an_instance_of(Gecode::Raw::IntVar), Gecode::Raw::ICL_DEF)
62
68
  @x.must_not.send(relation, @y)
@@ -37,51 +37,51 @@ describe Gecode::Constraints::Int::Linear do
37
37
  it 'should handle addition with a variable' do
38
38
  (@x + @y).must == 0
39
39
  sol = @model.solve!
40
- x = sol.x.val
41
- y = sol.y.val
40
+ x = sol.x.value
41
+ y = sol.y.value
42
42
  (x + y).should be_zero
43
43
  end
44
44
 
45
45
  it 'should handle addition with multiple variables' do
46
46
  (@x + @y + @z).must == 0
47
47
  sol = @model.solve!
48
- x = sol.x.val
49
- y = sol.y.val
50
- z = sol.z.val
48
+ x = sol.x.value
49
+ y = sol.y.value
50
+ z = sol.z.value
51
51
  (x + y + z).should be_zero
52
52
  end
53
53
 
54
54
  it 'should handle subtraction with a variable' do
55
55
  (@x - @y).must == 0
56
56
  sol = @model.solve!
57
- x = sol.x.val
58
- y = sol.y.val
57
+ x = sol.x.value
58
+ y = sol.y.value
59
59
  (x - y).should be_zero
60
60
  end
61
61
 
62
62
  it 'should handle non-zero constants as right hand side' do
63
63
  (@x + @y).must == 1
64
64
  sol = @model.solve!
65
- x = sol.x.val
66
- y = sol.y.val
65
+ x = sol.x.value
66
+ y = sol.y.value
67
67
  (x + y).should equal(1)
68
68
  end
69
69
 
70
70
  it 'should handle variables as right hand side' do
71
71
  (@x + @y).must == @z
72
72
  sol = @model.solve!
73
- x = sol.x.val
74
- y = sol.y.val
75
- z = sol.z.val
73
+ x = sol.x.value
74
+ y = sol.y.value
75
+ z = sol.z.value
76
76
  (x + y).should equal(z)
77
77
  end
78
78
 
79
79
  it 'should handle linear expressions as right hand side' do
80
80
  (@x + @y).must == @z + @y
81
81
  sol = @model.solve!
82
- x = sol.x.val
83
- y = sol.y.val
84
- z = sol.z.val
82
+ x = sol.x.value
83
+ y = sol.y.value
84
+ z = sol.z.value
85
85
  (x + y).should equal(z + y)
86
86
  end
87
87
 
@@ -92,49 +92,49 @@ describe Gecode::Constraints::Int::Linear do
92
92
  it 'should handle coefficients other than 1' do
93
93
  (@x * 2 + @y).must == 0
94
94
  sol = @model.solve!
95
- x = sol.x.val
96
- y = sol.y.val
95
+ x = sol.x.value
96
+ y = sol.y.value
97
97
  (2*x + y).should equal(0)
98
98
  end
99
99
 
100
100
  it 'should handle addition with constants' do
101
101
  (@y + 2).must == 1
102
102
  sol = @model.solve!
103
- y = sol.y.val
103
+ y = sol.y.value
104
104
  (y + 2).should equal(1)
105
105
  end
106
106
 
107
107
  it 'should handle subtraction with a constant' do
108
108
  (@x - 2).must == 0
109
109
  sol = @model.solve!
110
- x = sol.x.val
110
+ x = sol.x.value
111
111
  (x - 2).should be_zero
112
112
  end
113
113
 
114
114
  it 'should a single variable as left hande side' do
115
115
  @x.must == @y + @z
116
116
  sol = @model.solve!
117
- x = sol.x.val
118
- y = sol.y.val
119
- z = sol.z.val
117
+ x = sol.x.value
118
+ y = sol.y.value
119
+ z = sol.z.value
120
120
  x.should equal(y + z)
121
121
  end
122
122
 
123
123
  it 'should handle parenthesis' do
124
124
  (@x - (@y + @z)).must == 1
125
125
  sol = @model.solve!
126
- x = sol.x.val
127
- y = sol.y.val
128
- z = sol.z.val
126
+ x = sol.x.value
127
+ y = sol.y.value
128
+ z = sol.z.value
129
129
  (x - (y + z)).should equal(1)
130
130
  end
131
131
 
132
132
  it 'should handle multiplication of parenthesis' do
133
133
  (((@x + @y*10)*10 + @z)*10).must == 0
134
134
  sol = @model.solve!
135
- x = sol.x.val
136
- y = sol.y.val
137
- z = sol.z.val
135
+ x = sol.x.value
136
+ y = sol.y.value
137
+ z = sol.z.value
138
138
  (((x + y*10)*10 + z)*10).should equal(0)
139
139
  end
140
140
 
@@ -145,7 +145,7 @@ describe Gecode::Constraints::Int::Linear do
145
145
  (@x + @y).must.send(relation, 1)
146
146
  sol = @model.solve!
147
147
  sol.should_not be_nil
148
- (sol.x.val + sol.y.val).should.send(relation, 1)
148
+ (sol.x.value + sol.y.value).should.send(relation, 1)
149
149
  end
150
150
  end
151
151
 
@@ -154,7 +154,7 @@ describe Gecode::Constraints::Int::Linear do
154
154
  (@x + @y).must_not.send(relation, 1)
155
155
  sol = @model.solve!
156
156
  sol.should_not be_nil
157
- (sol.x.val + sol.y.val).should_not.send(relation, 1)
157
+ (sol.x.value + sol.y.value).should_not.send(relation, 1)
158
158
  end
159
159
  end
160
160