gecoder-with-gecode 0.9.0-x86-mswin32-60

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 (203) hide show
  1. data/CHANGES +137 -0
  2. data/COPYING +17 -0
  3. data/LGPL-LICENSE +458 -0
  4. data/README +58 -0
  5. data/Rakefile +14 -0
  6. data/example/equation_system.rb +15 -0
  7. data/example/example_helper.rb +1 -0
  8. data/example/magic_sequence.rb +43 -0
  9. data/example/money.rb +36 -0
  10. data/example/queens.rb +42 -0
  11. data/example/send_more_money.rb +43 -0
  12. data/example/send_most_money.rb +58 -0
  13. data/example/square_tiling.rb +84 -0
  14. data/example/sudoku-set.rb +106 -0
  15. data/example/sudoku.rb +56 -0
  16. data/lib/gecode.dll +0 -0
  17. data/lib/gecoder.rb +5 -0
  18. data/lib/gecoder/bindings.rb +96 -0
  19. data/lib/gecoder/bindings/bindings.rb +2029 -0
  20. data/lib/gecoder/interface.rb +9 -0
  21. data/lib/gecoder/interface/binding_changes.rb +9 -0
  22. data/lib/gecoder/interface/branch.rb +163 -0
  23. data/lib/gecoder/interface/constraints.rb +471 -0
  24. data/lib/gecoder/interface/constraints/bool/boolean.rb +251 -0
  25. data/lib/gecoder/interface/constraints/bool/channel.rb +7 -0
  26. data/lib/gecoder/interface/constraints/bool/linear.rb +200 -0
  27. data/lib/gecoder/interface/constraints/bool_enum/channel.rb +68 -0
  28. data/lib/gecoder/interface/constraints/bool_enum/extensional.rb +106 -0
  29. data/lib/gecoder/interface/constraints/bool_enum/relation.rb +55 -0
  30. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +84 -0
  31. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +155 -0
  32. data/lib/gecoder/interface/constraints/extensional_regexp.rb +101 -0
  33. data/lib/gecoder/interface/constraints/fixnum_enum/element.rb +63 -0
  34. data/lib/gecoder/interface/constraints/fixnum_enum/operation.rb +65 -0
  35. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +42 -0
  36. data/lib/gecoder/interface/constraints/int/arithmetic.rb +150 -0
  37. data/lib/gecoder/interface/constraints/int/channel.rb +51 -0
  38. data/lib/gecoder/interface/constraints/int/domain.rb +80 -0
  39. data/lib/gecoder/interface/constraints/int/linear.rb +143 -0
  40. data/lib/gecoder/interface/constraints/int/relation.rb +141 -0
  41. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +63 -0
  42. data/lib/gecoder/interface/constraints/int_enum/channel.rb +86 -0
  43. data/lib/gecoder/interface/constraints/int_enum/count.rb +66 -0
  44. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +64 -0
  45. data/lib/gecoder/interface/constraints/int_enum/element.rb +64 -0
  46. data/lib/gecoder/interface/constraints/int_enum/equality.rb +37 -0
  47. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +187 -0
  48. data/lib/gecoder/interface/constraints/int_enum/sort.rb +135 -0
  49. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +95 -0
  50. data/lib/gecoder/interface/constraints/int_var_constraints.rb +230 -0
  51. data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
  52. data/lib/gecoder/interface/constraints/selected_set/select.rb +120 -0
  53. data/lib/gecoder/interface/constraints/selected_set_constraints.rb +75 -0
  54. data/lib/gecoder/interface/constraints/set/cardinality.rb +65 -0
  55. data/lib/gecoder/interface/constraints/set/channel.rb +51 -0
  56. data/lib/gecoder/interface/constraints/set/connection.rb +130 -0
  57. data/lib/gecoder/interface/constraints/set/domain.rb +156 -0
  58. data/lib/gecoder/interface/constraints/set/include.rb +36 -0
  59. data/lib/gecoder/interface/constraints/set/operation.rb +118 -0
  60. data/lib/gecoder/interface/constraints/set/relation.rb +155 -0
  61. data/lib/gecoder/interface/constraints/set_elements/relation.rb +116 -0
  62. data/lib/gecoder/interface/constraints/set_elements_constraints.rb +97 -0
  63. data/lib/gecoder/interface/constraints/set_enum/channel.rb +45 -0
  64. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +43 -0
  65. data/lib/gecoder/interface/constraints/set_enum/operation.rb +69 -0
  66. data/lib/gecoder/interface/constraints/set_enum/select.rb +79 -0
  67. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +84 -0
  68. data/lib/gecoder/interface/constraints/set_var_constraints.rb +243 -0
  69. data/lib/gecoder/interface/enum_matrix.rb +64 -0
  70. data/lib/gecoder/interface/enum_wrapper.rb +205 -0
  71. data/lib/gecoder/interface/model.rb +453 -0
  72. data/lib/gecoder/interface/model_sugar.rb +84 -0
  73. data/lib/gecoder/interface/search.rb +197 -0
  74. data/lib/gecoder/interface/variables.rb +306 -0
  75. data/lib/gecoder/version.rb +4 -0
  76. data/specs/bool_var.rb +81 -0
  77. data/specs/branch.rb +185 -0
  78. data/specs/constraints/bool/boolean.rb +317 -0
  79. data/specs/constraints/bool/boolean_properties.rb +51 -0
  80. data/specs/constraints/bool/linear.rb +213 -0
  81. data/specs/constraints/bool_enum/bool_enum_relation.rb +117 -0
  82. data/specs/constraints/bool_enum/channel.rb +102 -0
  83. data/specs/constraints/bool_enum/extensional.rb +225 -0
  84. data/specs/constraints/constraint_helper.rb +234 -0
  85. data/specs/constraints/constraint_receivers.rb +103 -0
  86. data/specs/constraints/constraints.rb +26 -0
  87. data/specs/constraints/fixnum_enum/element.rb +58 -0
  88. data/specs/constraints/fixnum_enum/operation.rb +67 -0
  89. data/specs/constraints/int/arithmetic.rb +149 -0
  90. data/specs/constraints/int/channel.rb +101 -0
  91. data/specs/constraints/int/domain.rb +106 -0
  92. data/specs/constraints/int/linear.rb +183 -0
  93. data/specs/constraints/int/linear_properties.rb +97 -0
  94. data/specs/constraints/int/relation.rb +84 -0
  95. data/specs/constraints/int_enum/arithmetic.rb +72 -0
  96. data/specs/constraints/int_enum/channel.rb +57 -0
  97. data/specs/constraints/int_enum/count.rb +72 -0
  98. data/specs/constraints/int_enum/distinct.rb +80 -0
  99. data/specs/constraints/int_enum/element.rb +61 -0
  100. data/specs/constraints/int_enum/equality.rb +29 -0
  101. data/specs/constraints/int_enum/extensional.rb +224 -0
  102. data/specs/constraints/int_enum/sort.rb +167 -0
  103. data/specs/constraints/operands.rb +264 -0
  104. data/specs/constraints/property_helper.rb +443 -0
  105. data/specs/constraints/reification_sugar.rb +69 -0
  106. data/specs/constraints/selected_set/select.rb +56 -0
  107. data/specs/constraints/selected_set/select_properties.rb +157 -0
  108. data/specs/constraints/set/cardinality.rb +58 -0
  109. data/specs/constraints/set/cardinality_properties.rb +46 -0
  110. data/specs/constraints/set/channel.rb +77 -0
  111. data/specs/constraints/set/connection.rb +176 -0
  112. data/specs/constraints/set/domain.rb +197 -0
  113. data/specs/constraints/set/include.rb +36 -0
  114. data/specs/constraints/set/operation.rb +132 -0
  115. data/specs/constraints/set/relation.rb +117 -0
  116. data/specs/constraints/set_elements/relation.rb +84 -0
  117. data/specs/constraints/set_enum/channel.rb +80 -0
  118. data/specs/constraints/set_enum/distinct.rb +59 -0
  119. data/specs/constraints/set_enum/operation.rb +111 -0
  120. data/specs/constraints/set_enum/select.rb +73 -0
  121. data/specs/distribution.rb +14 -0
  122. data/specs/enum_matrix.rb +43 -0
  123. data/specs/enum_wrapper.rb +179 -0
  124. data/specs/examples.rb +17 -0
  125. data/specs/int_var.rb +163 -0
  126. data/specs/logging.rb +24 -0
  127. data/specs/model.rb +325 -0
  128. data/specs/model_sugar.rb +30 -0
  129. data/specs/search.rb +383 -0
  130. data/specs/selected_set.rb +39 -0
  131. data/specs/set_elements.rb +34 -0
  132. data/specs/set_var.rb +82 -0
  133. data/specs/spec_helper.rb +265 -0
  134. data/tasks/all_tasks.rb +1 -0
  135. data/tasks/dependencies.txt +22 -0
  136. data/tasks/distribution.rake +194 -0
  137. data/tasks/rcov.rake +18 -0
  138. data/tasks/specs.rake +21 -0
  139. data/tasks/svn.rake +16 -0
  140. data/tasks/website.rake +51 -0
  141. data/vendor/gecode/win32/lib/libgecodeint.dll +0 -0
  142. data/vendor/gecode/win32/lib/libgecodekernel.dll +0 -0
  143. data/vendor/gecode/win32/lib/libgecodeminimodel.dll +0 -0
  144. data/vendor/gecode/win32/lib/libgecodesearch.dll +0 -0
  145. data/vendor/gecode/win32/lib/libgecodeset.dll +0 -0
  146. data/vendor/gecode/win32/lib/libgecodesupport.dll +0 -0
  147. data/vendor/rust/README +28 -0
  148. data/vendor/rust/bin/cxxgenerator.rb +93 -0
  149. data/vendor/rust/include/rust_checks.hh +116 -0
  150. data/vendor/rust/include/rust_conversions.hh +102 -0
  151. data/vendor/rust/rust.rb +67 -0
  152. data/vendor/rust/rust/attribute.rb +51 -0
  153. data/vendor/rust/rust/bindings.rb +172 -0
  154. data/vendor/rust/rust/class.rb +337 -0
  155. data/vendor/rust/rust/constants.rb +48 -0
  156. data/vendor/rust/rust/container.rb +110 -0
  157. data/vendor/rust/rust/cppifaceparser.rb +129 -0
  158. data/vendor/rust/rust/cwrapper.rb +72 -0
  159. data/vendor/rust/rust/cxxclass.rb +96 -0
  160. data/vendor/rust/rust/element.rb +81 -0
  161. data/vendor/rust/rust/enum.rb +63 -0
  162. data/vendor/rust/rust/function.rb +407 -0
  163. data/vendor/rust/rust/namespace.rb +61 -0
  164. data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
  165. data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
  166. data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
  167. data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
  168. data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
  169. data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
  170. data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
  171. data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
  172. data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +100 -0
  173. data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
  174. data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
  175. data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
  176. data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
  177. data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
  178. data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
  179. data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
  180. data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
  181. data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
  182. data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
  183. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
  184. data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
  185. data/vendor/rust/rust/type.rb +98 -0
  186. data/vendor/rust/test/Makefile +4 -0
  187. data/vendor/rust/test/constants.rb +36 -0
  188. data/vendor/rust/test/cppclass.cc +45 -0
  189. data/vendor/rust/test/cppclass.hh +67 -0
  190. data/vendor/rust/test/cppclass.rb +59 -0
  191. data/vendor/rust/test/cwrapper.c +74 -0
  192. data/vendor/rust/test/cwrapper.h +41 -0
  193. data/vendor/rust/test/cwrapper.rb +56 -0
  194. data/vendor/rust/test/dummyclass.hh +31 -0
  195. data/vendor/rust/test/lib/extension-test.rb +98 -0
  196. data/vendor/rust/test/operators.cc +41 -0
  197. data/vendor/rust/test/operators.hh +39 -0
  198. data/vendor/rust/test/operators.rb +39 -0
  199. data/vendor/rust/test/test-constants.rb +43 -0
  200. data/vendor/rust/test/test-cppclass.rb +82 -0
  201. data/vendor/rust/test/test-cwrapper.rb +80 -0
  202. data/vendor/rust/test/test-operators.rb +42 -0
  203. metadata +393 -0
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Gecode::SelectedSet::SelectedSetOperand do
4
+ before do
5
+ @model = Gecode::Model.new
6
+ set_enum = @model.set_var_array(5, [], 0..9)
7
+ set = @model.set_var([], 0..4)
8
+ @operand = Gecode::SelectedSet::SelectedSetOperand.new(
9
+ set_enum, set)
10
+ end
11
+
12
+ it 'should implement #model' do
13
+ @operand.model.should be_kind_of(Gecode::Model)
14
+ end
15
+
16
+ it 'should implement #to_selected_set' do
17
+ enum, set = @operand.to_selected_set
18
+ enum.should be_respond_to(:to_set_enum)
19
+ set.should be_respond_to(:to_set_var)
20
+ @model.solve!
21
+ set_var = set.to_set_var
22
+ ((set_var.lower_bound == []) &&
23
+ (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
24
+ be_true)
25
+ enum.each do |element|
26
+ set_var = element.to_set_var
27
+ ((set_var.lower_bound == []) &&
28
+ (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
29
+ be_true)
30
+ end
31
+ end
32
+
33
+ it 'should implement #must' do
34
+ receiver = @operand.must
35
+ receiver.should be_kind_of(
36
+ Gecode::SelectedSet::SelectedSetConstraintReceiver)
37
+ end
38
+ end
39
+
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Gecode::SelectedSet::SelectedSetOperand do
4
+ before do
5
+ @model = Gecode::Model.new
6
+ @set = @model.set_var([], 0..4)
7
+ @operand = Gecode::SetElements::SetElementsOperand.new(@set)
8
+ end
9
+
10
+ it 'should implement #model' do
11
+ @operand.model.should be_kind_of(Gecode::Model)
12
+ end
13
+
14
+ it 'should implement #to_set_elements' do
15
+ set = @operand.to_set_elements
16
+ set.should be_respond_to(:to_set_var)
17
+ @model.solve!
18
+ set_var = set.to_set_var
19
+ ((set_var.lower_bound == []) &&
20
+ (set_var.upper_bound == Gecode::Model::LARGEST_SET_BOUND)).should_not(
21
+ be_true)
22
+ end
23
+
24
+ it 'should implement #must' do
25
+ receiver = @operand.must
26
+ receiver.should be_kind_of(
27
+ Gecode::SetElements::SetElementsConstraintReceiver)
28
+ end
29
+
30
+ it 'should be produces by SetOperand#elements' do
31
+ @set.elements.should be_respond_to(:to_set_elements)
32
+ end
33
+ end
34
+
data/specs/set_var.rb ADDED
@@ -0,0 +1,82 @@
1
+ require File.dirname(__FILE__) + '/constraints/property_helper'
2
+
3
+ describe Gecode::SetVar, '(not assigned)' do
4
+ before do
5
+ @model = Gecode::Model.new
6
+ @operand = @var = @model.set_var(1..3, 0..4)
7
+ end
8
+
9
+ it 'should not be assigned' do
10
+ @var.should_not be_assigned
11
+ end
12
+
13
+ it 'should give glb and lub ranges when inspecting' do
14
+ @var.inspect.should include('lub-range')
15
+ @var.inspect.should include('glb-range')
16
+ end
17
+
18
+ it 'should allow inspection even when the bounds are too large to display' do
19
+ var = @model.set_var
20
+ var.inspect.should include('too large')
21
+ end
22
+
23
+ it 'should report the correct bounds' do
24
+ @var.lower_bound.sort.to_a.should == (1..3).to_a
25
+ @var.upper_bound.sort.to_a.should == (0..4).to_a
26
+ end
27
+
28
+ it 'should report correct bounds on upper bound' do
29
+ @var.upper_bound.min.should == 0
30
+ @var.upper_bound.max.should == 4
31
+ end
32
+
33
+ it 'should report correct bounds on lower bound' do
34
+ @var.lower_bound.min.should == 1
35
+ @var.lower_bound.max.should == 3
36
+ end
37
+
38
+ it 'should raise error when trying to access assigned value' do
39
+ lambda{ @var.value }.should raise_error(RuntimeError)
40
+ end
41
+
42
+ it 'should not raise error when enumerating over bound multiple times' do
43
+ # For C0 coverage.
44
+ lower_bound = @var.lower_bound
45
+ lambda do
46
+ lower_bound.each{}
47
+ lower_bound.each{}
48
+ end.should_not raise_error
49
+ end
50
+
51
+ it_should_behave_like 'set var operand'
52
+ end
53
+
54
+ describe Gecode::SetVar, '(assigned)' do
55
+ before do
56
+ @model = Gecode::Model.new
57
+ @operand = @var = @model.set_var(1, 1)
58
+ @model.solve!
59
+ end
60
+
61
+ it 'should be assigned' do
62
+ @var.should be_assigned
63
+ end
64
+
65
+ it "should give it's value when inspecting" do
66
+ @var.inspect.should include('[1]')
67
+ @var.inspect.should_not include('lub-range')
68
+ end
69
+
70
+ it 'should report the correct bounds' do
71
+ @var.upper_bound.to_a.should == [1]
72
+ @var.lower_bound.to_a.should == [1]
73
+ @var.value.to_a.should == [1]
74
+ end
75
+
76
+ it 'should allow inspection even when the bounds are too large to display' do
77
+ var = @model.set_var(0..10**4, 0..10**4)
78
+ var.inspect.should include('too large')
79
+ end
80
+
81
+ it_should_behave_like 'set var operand'
82
+ end
@@ -0,0 +1,265 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require File.dirname(__FILE__) + '/../lib/gecoder'
4
+
5
+ module CustomVarMatchers
6
+ class HaveDomain
7
+ def initialize(expected)
8
+ @expected = expected
9
+ end
10
+
11
+ def matches?(target)
12
+ @target = target
13
+ if @expected.kind_of? Range
14
+ last = @expected.end
15
+ last -= 1 if @expected.exclude_end?
16
+ return @target.range? && @expected.begin == @target.min &&
17
+ last == @target.max
18
+ else
19
+ @expected = @expected.to_a
20
+ return false unless @target.size == @expected.size
21
+ @expected.each do |element|
22
+ return false unless @target.include? element
23
+ end
24
+ return true
25
+ end
26
+ return false
27
+ end
28
+
29
+ def failure_message
30
+ "expected #{@target.inspect} to have domain #{@expected.inspect}"
31
+ end
32
+
33
+ def negative_failure_message
34
+ "expected #{@target.inspect} not to have domain #{@expected.inspect}"
35
+ end
36
+ end
37
+
38
+ # Tests whether a variable has the expected domain.
39
+ def have_domain(expected)
40
+ HaveDomain.new(expected)
41
+ end
42
+
43
+ class HaveBounds
44
+ def initialize(expected_glb, expected_lub)
45
+ @expected_glb = expected_glb.to_a
46
+ @expected_lub = expected_lub.to_a
47
+ end
48
+
49
+ def matches?(target)
50
+ @target = target
51
+ return @target.lower_bound.size == @expected_glb.size &&
52
+ @target.upper_bound.size == @expected_lub.size &&
53
+ @target.lower_bound.to_a == @expected_glb &&
54
+ @target.upper_bound.to_a == @expected_lub
55
+ end
56
+
57
+ def failure_message
58
+ "expected #{@target.inspect} to have greatest lower bound " +
59
+ "#{@expected_glb.inspect} and least upper bound #{@expected_lub.inspect}"
60
+ end
61
+
62
+ def negative_failure_message
63
+ "expected #{@target.inspect} to not have greatest lower bound " +
64
+ "#{@expected_glb.inspect} and least upper bound #{@expected_lub.inspect}"
65
+ end
66
+ end
67
+
68
+ # Tests whether a set variable has the expected bounds.
69
+ def have_bounds(expected_glb, expected_lub)
70
+ HaveBounds.new(expected_glb, expected_lub)
71
+ end
72
+ end
73
+
74
+ Spec::Runner.configure do |config|
75
+ config.include(CustomVarMatchers)
76
+ end
77
+
78
+
79
+ # Help methods for the GecodeR specs.
80
+ module GecodeR::Specs
81
+ module SetHelper
82
+ module_function
83
+
84
+ # Returns the arguments that should be used in a partial mock to expect the
85
+ # specified constant set (possibly an array of arguments).
86
+ def expect_constant_set(constant_set)
87
+ if constant_set.kind_of? Range
88
+ return constant_set.first, constant_set.last
89
+ elsif constant_set.kind_of? Fixnum
90
+ constant_set
91
+ else
92
+ an_instance_of(Gecode::Raw::IntSet)
93
+ end
94
+ end
95
+ end
96
+
97
+ module GeneralHelper
98
+ module_function
99
+
100
+ # Produces a base operand that can be used to mock specific types of
101
+ # operands.
102
+ def general_operand_base(model)
103
+ mock_op_class = Class.new
104
+ mock_op_class.class_eval do
105
+ attr :model
106
+
107
+ def bind
108
+ raise 'Bind should not be called directly for an operand.'
109
+ end
110
+ alias_method :bind_array, :bind
111
+ end
112
+ op = mock_op_class.new
113
+ op.instance_eval do
114
+ @model = model
115
+ end
116
+ return op
117
+ end
118
+
119
+ # Produces a general int operand. The method returns two objects:
120
+ # the operand itself and the variable it returns when #to_int_var
121
+ # is called.
122
+ def general_int_operand(model)
123
+ op = general_operand_base(model)
124
+
125
+ int_var = model.int_var
126
+ class <<op
127
+ include Gecode::Int::IntOperand
128
+ attr :model
129
+ end
130
+ op.stub!(:to_int_var).and_return int_var
131
+
132
+ return op, int_var
133
+ end
134
+
135
+ # Produces a general bool operand. The method returns two objects:
136
+ # the operand itself and the variable it returns when #to_bool_var
137
+ # is called.
138
+ def general_bool_operand(model)
139
+ op = general_operand_base(model)
140
+
141
+ bool_var = model.bool_var
142
+ class <<op
143
+ include Gecode::Bool::BoolOperand
144
+ attr :model
145
+ end
146
+ op.stub!(:to_bool_var).and_return bool_var
147
+
148
+ return op, bool_var
149
+ end
150
+
151
+ # Produces a general set operand. The method returns two objects:
152
+ # the operand itself and the variable it returns when #to_set_var
153
+ # is called.
154
+ def general_set_operand(model)
155
+ op = general_operand_base(model)
156
+
157
+ set_var = model.set_var
158
+ class <<op
159
+ include Gecode::Set::SetOperand
160
+ attr :model
161
+ end
162
+ op.stub!(:to_set_var).and_return set_var
163
+
164
+ return op, set_var
165
+ end
166
+
167
+ # Produces a general int enum operand. The method returns two objects:
168
+ # the operand itself and the variable it returns when #to_int_enum
169
+ # is called.
170
+ def general_int_enum_operand(model)
171
+ op = general_operand_base(model)
172
+
173
+ int_enum = model.int_var_array(5)
174
+ class <<op
175
+ include Gecode::IntEnum::IntEnumOperand
176
+ attr :model
177
+ end
178
+ op.stub!(:to_int_enum).and_return int_enum
179
+
180
+ return op, int_enum
181
+ end
182
+
183
+ # Produces a general bool enum operand. The method returns two objects:
184
+ # the operand itself and the variable it returns when #to_bool_enum
185
+ # is called.
186
+ def general_bool_enum_operand(model)
187
+ op = general_operand_base(model)
188
+
189
+ bool_enum = model.bool_var_array(5)
190
+ class <<op
191
+ include Gecode::BoolEnum::BoolEnumOperand
192
+ attr :model
193
+ end
194
+ op.stub!(:to_bool_enum).and_return bool_enum
195
+
196
+ return op, bool_enum
197
+ end
198
+
199
+ # Produces a general set enum operand. The method returns two objects:
200
+ # the operand itself and the variable it returns when #to_set_enum
201
+ # is called.
202
+ def general_set_enum_operand(model)
203
+ op = general_operand_base(model)
204
+
205
+ set_enum = model.set_var_array(5)
206
+ class <<op
207
+ include Gecode::SetEnum::SetEnumOperand
208
+ attr :model
209
+ end
210
+ op.stub!(:to_set_enum).and_return set_enum
211
+
212
+ return op, set_enum
213
+ end
214
+
215
+ # Produces a general selected set operand. The method returns two objects:
216
+ # the operand itself and the array of variables corresponding to the
217
+ # operands it returns when # #to_selected_set is called.
218
+ def general_selected_set_operand(model)
219
+ set_enum, set_enum_var = general_set_enum_operand(model)
220
+ set, set_var = general_set_operand(model)
221
+ op = Gecode::SelectedSet::SelectedSetOperand.new(
222
+ set_enum, set)
223
+ return op, [set_enum_var, set_var]
224
+ end
225
+
226
+ # Produces a general set elements operand. The method returns two
227
+ # objects: the operand itself and the set var corresponding to the
228
+ # operands it returns when # #to_selected_set is called.
229
+ def general_set_elements_operand(model)
230
+ set, set_var = general_set_operand(model)
231
+ op = Gecode::SetElements::SetElementsOperand.new(set)
232
+ return op, set_var
233
+ end
234
+
235
+ # Produces a general fixnum enum operand. The method returns two objects:
236
+ # the operand itself and the variable it returns when #to_fixnum_enum
237
+ # is called.
238
+ def general_fixnum_enum_operand(model)
239
+ op = general_operand_base(model)
240
+
241
+ fixnum_enum = model.wrap_enum([1, -4, 9, 4, 0])
242
+ class <<op
243
+ include Gecode::FixnumEnum::FixnumEnumOperand
244
+ attr :model
245
+ end
246
+ op.stub!(:to_fixnum_enum).and_return fixnum_enum
247
+
248
+ return op, fixnum_enum
249
+ end
250
+
251
+ # Produces an array of general operands of the specified types.
252
+ # Returns an array of operands and an array of their variables.
253
+ def produce_general_arguments(property_types)
254
+ operands = []
255
+ variables = []
256
+ property_types.each do |type|
257
+ op, var = eval "general_#{type}_operand(@model)"
258
+ operands << op
259
+ variables << var
260
+ end
261
+ return operands, variables
262
+ end
263
+ end
264
+ end
265
+ include GecodeR::Specs::GeneralHelper
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
@@ -0,0 +1,22 @@
1
+ Doing the full "release" task requires a number of gems:
2
+
3
+ # To run the Rake scripts.
4
+ rake
5
+
6
+ # To generate the website.
7
+ webgen
8
+ coderay
9
+
10
+ # To run the specs and produce a report for the website.
11
+ rspec
12
+ rcov
13
+
14
+ # To release files to RubyForge.
15
+ meta_project
16
+ rubyforge
17
+
18
+
19
+
20
+ To precompile the Windows gem you need to set up a cross-compilation
21
+ environment. See the following notes for instructions:
22
+ http://rubyforge.org/pipermail/gecoder-devel/2008-January/000039.html