gecoder 0.6.0 → 0.6.1

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 (45) hide show
  1. data/CHANGES +9 -1
  2. data/Rakefile +3 -0
  3. data/example/send_most_money.rb +58 -0
  4. data/ext/missing.cpp +26 -1
  5. data/ext/missing.h +2 -0
  6. data/ext/vararray.cpp +31 -11
  7. data/ext/vararray.h +6 -0
  8. data/lib/gecoder/bindings.rb +5 -5
  9. data/lib/gecoder/bindings/bindings.rb +52 -0
  10. data/lib/gecoder/interface/binding_changes.rb +16 -11
  11. data/lib/gecoder/interface/constraints.rb +28 -15
  12. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +8 -17
  13. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +8 -3
  14. data/lib/gecoder/interface/constraints/int/arithmetic.rb +10 -15
  15. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +10 -16
  16. data/lib/gecoder/interface/constraints/int_enum/element.rb +6 -11
  17. data/lib/gecoder/interface/constraints/int_var_constraints.rb +2 -1
  18. data/lib/gecoder/interface/constraints/set/cardinality.rb +4 -7
  19. data/lib/gecoder/interface/constraints/set/connection.rb +13 -22
  20. data/lib/gecoder/interface/model.rb +52 -41
  21. data/lib/gecoder/interface/search.rb +29 -24
  22. data/lib/gecoder/interface/variables.rb +27 -15
  23. data/lib/gecoder/version.rb +1 -1
  24. data/specs/constraints/arithmetic.rb +27 -17
  25. data/specs/constraints/bool_enum.rb +4 -2
  26. data/specs/constraints/boolean.rb +5 -2
  27. data/specs/constraints/cardinality.rb +28 -8
  28. data/specs/constraints/connection.rb +58 -37
  29. data/specs/constraints/constraints.rb +2 -2
  30. data/specs/constraints/count.rb +3 -3
  31. data/specs/constraints/element.rb +5 -5
  32. data/specs/constraints/int_domain.rb +4 -2
  33. data/specs/constraints/set_domain.rb +8 -4
  34. data/specs/constraints/set_relation.rb +10 -5
  35. data/specs/int_var.rb +3 -3
  36. data/specs/model.rb +10 -9
  37. data/specs/search.rb +54 -5
  38. data/specs/spec_helper.rb +2 -0
  39. data/tasks/distribution.rake +8 -1
  40. data/tasks/specs.rake +0 -1
  41. data/vendor/rust/rust/class.rb +6 -1
  42. data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +3 -3
  43. data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +15 -1
  44. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +2 -0
  45. metadata +51 -21
@@ -33,7 +33,7 @@ describe Gecode::Constraints::Int::CompositeStub, ' (not subclassed)' do
33
33
 
34
34
  it 'should raise error when calling #constrain_equal' do
35
35
  lambda do
36
- @con.instance_eval{ constrain_equal(nil, {}) }
36
+ @con.instance_eval{ constrain_equal(nil, {}, false) }
37
37
  end.should raise_error(NoMethodError)
38
38
  end
39
39
  end
@@ -60,7 +60,7 @@ describe Gecode::Constraints::CompositeExpression do
60
60
  it 'should raise error if a method doesn\'t exist' do
61
61
  expression = Gecode::Constraints::CompositeExpression.new(
62
62
  Gecode::Constraints::Int::Expression, Gecode::FreeIntVar,
63
- Gecode::Model.new, {:lhs => nil, :negate => false}){}
63
+ lambda{ }, Gecode::Model.new, {:lhs => nil, :negate => false}){}
64
64
  lambda do
65
65
  expression.this_method_does_not_exist
66
66
  end.should raise_error(NoMethodError)
@@ -24,8 +24,8 @@ describe Gecode::Constraints::IntEnum::Count do
24
24
  # Creates an expectation corresponding to the specified input.
25
25
  @expect = lambda do |element, relation, target, strength, reif_var|
26
26
  @model.allow_space_access do
27
- target = target.bind if target.respond_to? :bind
28
- element = element.bind if element.respond_to? :bind
27
+ target = an_instance_of(Gecode::Raw::IntVar) if target.respond_to? :bind
28
+ element = an_instance_of(Gecode::Raw::IntVar) if element.respond_to? :bind
29
29
  if reif_var.nil?
30
30
  Gecode::Raw.should_receive(:count).once.with(
31
31
  an_instance_of(Gecode::Raw::Space),
@@ -40,7 +40,7 @@ describe Gecode::Constraints::IntEnum::Count do
40
40
  Gecode::Raw.should_receive(:rel).once.with(
41
41
  an_instance_of(Gecode::Raw::Space),
42
42
  an_instance_of(Gecode::Raw::IntVar), relation,
43
- target, reif_var.bind, strength)
43
+ target, an_instance_of(Gecode::Raw::BoolVar), strength)
44
44
  end
45
45
  end
46
46
  end
@@ -10,9 +10,9 @@ class ElementSampleProblem < Gecode::Model
10
10
  def initialize
11
11
  prices = [17, 63, 45, 63]
12
12
  @fixnum_prices = wrap_enum(prices)
13
- @prices = int_var_array(4, *prices)
13
+ @prices = int_var_array(4, prices)
14
14
  @store = int_var(0...prices.size)
15
- @price = int_var(*prices)
15
+ @price = int_var(prices)
16
16
  branch_on wrap_enum([@store])
17
17
  end
18
18
  end
@@ -28,11 +28,11 @@ describe Gecode::Constraints::IntEnum::Element do
28
28
  # Creates an expectation corresponding to the specified input.
29
29
  @expect = lambda do |element, relation, target, strength, reif_var, negated|
30
30
  @model.allow_space_access do
31
- target = target.bind if target.respond_to? :bind
32
- element = element.bind if element.respond_to? :bind
31
+ target = an_instance_of(Gecode::Raw::IntVar) if target.respond_to? :bind
32
+ element = an_instance_of(Gecode::Raw::IntVar) if element.respond_to? :bind
33
33
  if reif_var.nil?
34
34
  if !negated and relation == Gecode::Raw::IRT_EQ and
35
- target.kind_of? Gecode::Raw::IntVar
35
+ !target.kind_of? Fixnum
36
36
  Gecode::Raw.should_receive(:element).once.with(
37
37
  an_instance_of(Gecode::Raw::Space),
38
38
  an_instance_of(Gecode::Raw::IntVarArray),
@@ -19,11 +19,13 @@ describe Gecode::Constraints::Int::Domain do
19
19
  if reif_var.nil?
20
20
  Gecode::Raw.should_receive(:dom).once.with(
21
21
  an_instance_of(Gecode::Raw::Space),
22
- @x.bind, an_instance_of(Gecode::Raw::IntSet), strength)
22
+ an_instance_of(Gecode::Raw::IntVar),
23
+ an_instance_of(Gecode::Raw::IntSet), strength)
23
24
  else
24
25
  Gecode::Raw.should_receive(:dom).once.with(
25
26
  an_instance_of(Gecode::Raw::Space),
26
- @x.bind, an_instance_of(Gecode::Raw::IntSet),
27
+ an_instance_of(Gecode::Raw::IntVar),
28
+ an_instance_of(Gecode::Raw::IntSet),
27
29
  an_instance_of(Gecode::Raw::BoolVar), strength)
28
30
  end
29
31
  end
@@ -18,9 +18,11 @@ describe Gecode::Constraints::Set::Domain do
18
18
  if reif_var.nil? and !negated
19
19
  Gecode::Raw.should_receive(:dom).once.with(
20
20
  an_instance_of(Gecode::Raw::Space),
21
- @set.bind, relation_type, *expect_constant_set(rhs))
21
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
22
+ *expect_constant_set(rhs))
22
23
  else
23
- params = [@model.active_space, @set.bind, relation_type]
24
+ params = [an_instance_of(Gecode::Raw::Space),
25
+ an_instance_of(Gecode::Raw::SetVar), relation_type]
24
26
  params << expect_constant_set(rhs)
25
27
  params << an_instance_of(Gecode::Raw::BoolVar)
26
28
  Gecode::Raw.should_receive(:dom).once.with(*params.flatten)
@@ -98,9 +100,11 @@ describe Gecode::Constraints::Set::Domain, ' (equality)' do
98
100
  if reif_var.nil?
99
101
  Gecode::Raw.should_receive(:dom).once.with(
100
102
  an_instance_of(Gecode::Raw::Space),
101
- @set.bind, relation_type, *expect_constant_set(rhs))
103
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
104
+ *expect_constant_set(rhs))
102
105
  else
103
- params = [@model.active_space, @set.bind, relation_type]
106
+ params = [an_instance_of(Gecode::Raw::Space),
107
+ an_instance_of(Gecode::Raw::SetVar), relation_type]
104
108
  params << expect_constant_set(rhs)
105
109
  params << an_instance_of(Gecode::Raw::BoolVar)
106
110
  Gecode::Raw.should_receive(:dom).once.with(*params.flatten)
@@ -14,11 +14,13 @@ describe Gecode::Constraints::Set::Relation do
14
14
  if reif_var.nil? and !negated
15
15
  Gecode::Raw.should_receive(:rel).once.with(
16
16
  an_instance_of(Gecode::Raw::Space),
17
- @set.bind, relation_type, @set2.bind)
17
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
18
+ an_instance_of(Gecode::Raw::SetVar))
18
19
  else
19
20
  Gecode::Raw.should_receive(:rel).once.with(
20
21
  an_instance_of(Gecode::Raw::Space),
21
- @set.bind, relation_type, @set2.bind,
22
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
23
+ an_instance_of(Gecode::Raw::SetVar),
22
24
  an_instance_of(Gecode::Raw::BoolVar))
23
25
  end
24
26
  end
@@ -65,11 +67,13 @@ describe Gecode::Constraints::Set::Relation, ' (equality)' do
65
67
  if reif_var.nil?
66
68
  Gecode::Raw.should_receive(:rel).once.with(
67
69
  an_instance_of(Gecode::Raw::Space),
68
- @set.bind, relation_type, @set2.bind)
70
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
71
+ an_instance_of(Gecode::Raw::SetVar))
69
72
  else
70
73
  Gecode::Raw.should_receive(:rel).once.with(
71
74
  an_instance_of(Gecode::Raw::Space),
72
- @set.bind, relation_type, @set2.bind,
75
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
76
+ an_instance_of(Gecode::Raw::SetVar),
73
77
  an_instance_of(Gecode::Raw::BoolVar))
74
78
  end
75
79
  end
@@ -134,7 +138,8 @@ describe Gecode::Constraints::Set::Relation, ' (elements)' do
134
138
  rhs = rhs.bind if rhs.respond_to? :bind
135
139
  Gecode::Raw.should_receive(:rel).once.with(
136
140
  an_instance_of(Gecode::Raw::Space),
137
- @set.bind, relation_type, rhs)
141
+ an_instance_of(Gecode::Raw::SetVar), relation_type,
142
+ an_instance_of(Gecode::Raw::IntVar))
138
143
  end
139
144
  end
140
145
 
data/specs/int_var.rb CHANGED
@@ -75,7 +75,7 @@ describe Gecode::FreeIntVar, ' (with non-range domain of size > 1)' do
75
75
  before do
76
76
  @domain = [-3, -2, -1, 1]
77
77
  model = Gecode::Model.new
78
- @var = model.int_var(*@domain)
78
+ @var = model.int_var(@domain)
79
79
  end
80
80
 
81
81
  it_should_behave_like 'non-empty int variable'
@@ -113,7 +113,7 @@ end
113
113
 
114
114
  describe Gecode::FreeIntVar, ' (assigned)' do
115
115
  before do
116
- @domain = [1]
116
+ @domain = 1
117
117
  model = Gecode::Model.new
118
118
  @var = model.int_var(*@domain)
119
119
  end
@@ -131,7 +131,7 @@ describe Gecode::FreeIntVar, ' (not assigned)' do
131
131
  before do
132
132
  @domain = 1..2
133
133
  model = Gecode::Model.new
134
- @var = model.int_var(*@domain)
134
+ @var = model.int_var(@domain)
135
135
  end
136
136
 
137
137
  it 'should not be assigned' do
data/specs/model.rb CHANGED
@@ -10,10 +10,16 @@ describe Gecode::Model, ' (integer creation)' do
10
10
  @model.int_var(range).should have_domain(range)
11
11
  end
12
12
 
13
- # This currently fails, see specs/int_var for an explanation.
13
+ it 'should allow the creation of int variables without specified domain' do
14
+ var = @model.int_var
15
+ var.should be_range
16
+ var.min.should == Gecode::Raw::Limits::Int::INT_MIN
17
+ var.max.should == Gecode::Raw::Limits::Int::INT_MAX
18
+ end
19
+
14
20
  it 'should allow the creation of int variables with non-range domains' do
15
21
  domain = [1, 3, 5]
16
- @model.int_var(*domain).should have_domain(domain)
22
+ @model.int_var(domain).should have_domain(domain)
17
23
  end
18
24
 
19
25
  it 'should allow the creation of int variables with single element domains' do
@@ -21,11 +27,6 @@ describe Gecode::Model, ' (integer creation)' do
21
27
  @model.int_var(domain).should have_domain([domain])
22
28
  end
23
29
 
24
- it 'should not accept empty domains' do
25
- lambda{ @model.int_var }.should raise_error(ArgumentError)
26
- lambda{ @model.int_var_array(1) }.should raise_error(ArgumentError)
27
- end
28
-
29
30
  it 'should allow the creation of int-var arrays with range domains' do
30
31
  range = 0..3
31
32
  count = 5
@@ -37,7 +38,7 @@ describe Gecode::Model, ' (integer creation)' do
37
38
  it 'should allow the creation of int-var arrays with non-range domains' do
38
39
  domain = [1,3,5]
39
40
  count = 5
40
- vars = @model.int_var_array(count, *domain)
41
+ vars = @model.int_var_array(count, domain)
41
42
  vars.size.should equal(count)
42
43
  vars.each{ |var| var.should have_domain(domain) }
43
44
  end
@@ -56,7 +57,7 @@ describe Gecode::Model, ' (integer creation)' do
56
57
  domain = [1,3,5]
57
58
  rows = 5
58
59
  columns = 4
59
- vars = @model.int_var_matrix(rows, columns, *domain)
60
+ vars = @model.int_var_matrix(rows, columns, domain)
60
61
  vars.row_size.should equal(rows)
61
62
  vars.column_size.should equal(columns)
62
63
  vars.each{ |var| var.should have_domain(domain) }
data/specs/search.rb CHANGED
@@ -33,6 +33,26 @@ class SampleOptimizationProblem < Gecode::Model
33
33
  end
34
34
  end
35
35
 
36
+ class SampleOptimizationProblem2 < Gecode::Model
37
+ attr :money
38
+
39
+ def initialize
40
+ @money = int_var_array(3, 0..9)
41
+ @money.must_be.distinct
42
+ @money.to_number.must < 500 # Otherwise it takes some time.
43
+
44
+ branch_on @money, :variable => :smallest_size, :value => :min
45
+ end
46
+ end
47
+
48
+ class Array
49
+ # Computes a number of the specified base using the array's elements as
50
+ # digits.
51
+ def to_number(base = 10)
52
+ inject{ |result, variable| variable + result * base }
53
+ end
54
+ end
55
+
36
56
  describe Gecode::Model, ' (with multiple solutions)' do
37
57
  before do
38
58
  @domain = 0..3
@@ -175,12 +195,8 @@ describe Gecode::Model, ' (without constraints)' do
175
195
  end
176
196
 
177
197
  describe Gecode::Model, '(optimization search)' do
178
- before do
179
- @model = SampleOptimizationProblem.new
180
- end
181
-
182
198
  it 'should optimize the solution' do
183
- solution = @model.optimize! do |model, best_so_far|
199
+ solution = SampleOptimizationProblem.new.optimize! do |model, best_so_far|
184
200
  model.z.must > best_so_far.z.value
185
201
  end
186
202
  solution.should_not be_nil
@@ -189,9 +205,42 @@ describe Gecode::Model, '(optimization search)' do
189
205
  solution.z.value.should == 25
190
206
  end
191
207
 
208
+ it 'should not be bothered by garbage collecting' do
209
+ # This goes through 400+ spaces.
210
+ solution = SampleOptimizationProblem2.new.optimize! do |model, best_so_far|
211
+ model.money.to_number.must > best_so_far.money.values.to_number
212
+ end
213
+ solution.should_not be_nil
214
+ solution.money.values.to_number.should == 498
215
+ end
216
+
192
217
  it 'should raise error if no constrain proc has been defined' do
193
218
  lambda do
194
219
  Gecode::Model.constrain(nil, nil)
195
220
  end.should raise_error(NotImplementedError)
196
221
  end
222
+
223
+ it 'should not have problems with variables being created in the optimization block' do
224
+ solution = SampleOptimizationProblem.new.optimize! do |model, best_so_far|
225
+ tmp = model.int_var(0..25)
226
+ tmp.must == model.z
227
+ tmp.must > best_so_far.z.value
228
+ end
229
+ solution.should_not be_nil
230
+ solution.x.value.should == 5
231
+ solution.y.value.should == 5
232
+ solution.z.value.should == 25
233
+ end
234
+
235
+ it 'should not have problems with variables being created in the optimization block (2)' do
236
+ solution = SampleOptimizationProblem.new.optimize! do |model, best_so_far|
237
+ tmp = model.int_var(0..25)
238
+ tmp.must == model.z
239
+ (tmp + tmp).must > best_so_far.z.value*2
240
+ end
241
+ solution.should_not be_nil
242
+ solution.x.value.should == 5
243
+ solution.y.value.should == 5
244
+ solution.z.value.should == 25
245
+ end
197
246
  end
data/specs/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'rubygems'
2
+ require 'spec'
1
3
  require File.dirname(__FILE__) + '/../lib/gecoder'
2
4
 
3
5
  module CustomVarMatchers
@@ -15,6 +15,11 @@ spec = Gem::Specification.new do |s|
15
15
  s.name = PKG_NAME
16
16
  s.version = GecodeR::VERSION
17
17
  s.summary = 'Ruby interface to Gecode, an environment for constraint programming.'
18
+ s.description = <<-end_description
19
+ Gecode/R is a Ruby interface to the Gecode constraint programming library.
20
+ Gecode/R is intended for people with no previous experience of constraint
21
+ programming, aiming to be easy to pick up and use.
22
+ end_description
18
23
 
19
24
  s.files = FileList[
20
25
  '[A-Z]*',
@@ -28,14 +33,16 @@ spec = Gem::Specification.new do |s|
28
33
  ].to_a
29
34
  s.require_path = 'lib'
30
35
  s.extensions << 'ext/extconf.rb'
36
+ s.requirements << 'Gecode 1.3.1'
31
37
 
32
38
  s.has_rdoc = true
33
39
  s.rdoc_options = rd.options
34
40
  s.extra_rdoc_files = rd.rdoc_files
41
+ s.test_files = FileList['specs/**/*.rb']
35
42
 
36
43
  s.autorequire = 'gecoder'
37
44
  s.author = ["Gecode/R Development Team"]
38
- s.email = "gecoder-devel@rubyforge.org"
45
+ s.email = "gecoder-users@rubyforge.org"
39
46
  s.homepage = "http://gecoder.rubyforge.org"
40
47
  s.rubyforge_project = "gecoder"
41
48
  end
data/tasks/specs.rake CHANGED
@@ -4,7 +4,6 @@ spec_files = FileList['specs/**/*.rb']
4
4
 
5
5
  desc 'Run all specs'
6
6
  Spec::Rake::SpecTask.new('specs') do |t|
7
- t.spec_opts = ["--format", "specdoc"]
8
7
  t.libs = ['lib']
9
8
  t.spec_files = spec_files
10
9
  end
@@ -28,8 +28,9 @@ require 'rust/type'
28
28
  module Rust
29
29
  class Class < Container
30
30
  attr_accessor :bindname
31
+ attr_accessor :function_mark
31
32
  attr_reader :name, :cname
32
- attr_reader :varname, :varcname, :ptrmap, :function_free, :parent_varname
33
+ attr_reader :varname, :varcname, :ptrmap, :function_free, :function_map_free, :parent_varname
33
34
 
34
35
  # Rust::Namespace object for the class, used to get the proper C++
35
36
  # name.
@@ -52,6 +53,8 @@ module Rust
52
53
 
53
54
  @ptrmap = "#{type.valid_name}Map"
54
55
  @function_free = "#{varname}_free"
56
+ @function_map_free = "#{varname}_free_map_entry"
57
+ @function_mark = "#{varname}_mark"
55
58
 
56
59
  @cname = @namespace.cname ? "#{@namespace.cname}::#{@name}" : @name
57
60
 
@@ -69,6 +72,8 @@ module Rust
69
72
  add_expansion 'bind_name', '@bindname'
70
73
  add_expansion 'class_ptrmap', 'ptrmap'
71
74
  add_expansion 'class_free_function', '@function_free'
75
+ add_expansion 'class_map_free_function', '@function_map_free'
76
+ add_expansion 'class_mark_function', '@function_mark'
72
77
  add_expansion 'parent_varname', '@parent_varname'
73
78
  end
74
79
 
@@ -69,11 +69,11 @@ VALUE cxx2ruby(!c_class_name!* instance, bool free) {
69
69
  VALUE rval;
70
70
  if( !free )
71
71
  {
72
- rval = Data_Wrap_Struct(klass, 0, 0, (void*)instance);
72
+ rval = Data_Wrap_Struct(klass, 0, !class_map_free_function!, (void*)instance);
73
73
  }
74
74
  else
75
75
  {
76
- rval = Data_Wrap_Struct(klass, 0, !class_free_function!, (void*)instance);
76
+ rval = Data_Wrap_Struct(klass, !class_mark_function!, !class_free_function!, (void*)instance);
77
77
  }
78
78
 
79
79
  !class_ptrmap![rval] = instance;
@@ -87,5 +87,5 @@ VALUE cxx2ruby(!c_class_name!* instance, bool free) {
87
87
  }
88
88
 
89
89
  static VALUE !class_varname!_alloc(VALUE self) {
90
- return Data_Wrap_Struct(self, 0, !class_free_function!, 0);
90
+ return Data_Wrap_Struct(self, !class_mark_function!, !class_free_function!, 0);
91
91
  }
@@ -3,10 +3,24 @@
3
3
  T!class_ptrmap! !class_ptrmap!;
4
4
 
5
5
  static void !class_varname!_free(void *p) {
6
+ !class_map_free_function!(p);
7
+ delete (!c_class_name!*)p;
8
+ }
9
+
10
+ static void !class_varname!_free_map_entry(void *p) {
11
+ #ifdef DEBUG
12
+ fprintf(stderr, "rust: Freeing %p (!class_varname!) \\n", p);
13
+ #endif
14
+
6
15
  T!class_ptrmap!::iterator it, eend = !class_ptrmap!.end();
7
16
  for(it = !class_ptrmap!.begin(); it != eend; it++)
8
17
  if ( (*it).second == (!c_class_name!*)p ) {
9
18
  !class_ptrmap!.erase(it); break;
10
19
  }
11
- delete (!c_class_name!*)p;
20
+ }
21
+
22
+ static void !class_varname!_mark(void *p) {
23
+ #ifdef DEBUG
24
+ fprintf(stderr, "rust: Marking %p (!class_varname!) \\n", p);
25
+ #endif
12
26
  }
@@ -3,3 +3,5 @@
3
3
  typedef std::map<VALUE, !c_class_name!*> T!class_ptrmap!;
4
4
  extern T!class_ptrmap! !class_ptrmap!;
5
5
  static void !class_varname!_free(void *p);
6
+ static void !class_varname!_mark(void *p);
7
+ static void !class_varname!_free_map_entry(void *p);
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: gecoder
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.6.0
7
- date: 2007-07-18 00:00:00 +02:00
6
+ version: 0.6.1
7
+ date: 2007-07-23 00:00:00 +02:00
8
8
  summary: Ruby interface to Gecode, an environment for constraint programming.
9
9
  require_paths:
10
10
  - lib
11
- email: gecoder-devel@rubyforge.org
11
+ email: gecoder-users@rubyforge.org
12
12
  homepage: http://gecoder.rubyforge.org
13
13
  rubyforge_project: gecoder
14
- description:
14
+ description: Gecode/R is a Ruby interface to the Gecode constraint programming library. Gecode/R is intended for people with no previous experience of constraint programming, aiming to be easy to pick up and use.
15
15
  autorequire: gecoder
16
16
  default_executable:
17
17
  bindir: bin
@@ -51,8 +51,8 @@ files:
51
51
  - lib/gecoder/interface/constraints/int_var_constraints.rb
52
52
  - lib/gecoder/interface/constraints/int_enum_constraints.rb
53
53
  - lib/gecoder/interface/constraints/bool_enum_constraints.rb
54
- - lib/gecoder/interface/constraints/set_var_constraints.rb
55
54
  - lib/gecoder/interface/constraints/set_enum_constraints.rb
55
+ - lib/gecoder/interface/constraints/set_var_constraints.rb
56
56
  - lib/gecoder/interface/constraints/bool/boolean.rb
57
57
  - lib/gecoder/interface/constraints/int/linear.rb
58
58
  - lib/gecoder/interface/constraints/int/domain.rb
@@ -65,12 +65,12 @@ files:
65
65
  - lib/gecoder/interface/constraints/int_enum/sort.rb
66
66
  - lib/gecoder/interface/constraints/int_enum/arithmetic.rb
67
67
  - lib/gecoder/interface/constraints/bool_enum/boolean.rb
68
- - lib/gecoder/interface/constraints/set/domain.rb
69
- - lib/gecoder/interface/constraints/set/relation.rb
70
- - lib/gecoder/interface/constraints/set/connection.rb
71
- - lib/gecoder/interface/constraints/set/cardinality.rb
72
68
  - lib/gecoder/interface/constraints/set_enum/distinct.rb
73
69
  - lib/gecoder/interface/constraints/set_enum/channel.rb
70
+ - lib/gecoder/interface/constraints/set/connection.rb
71
+ - lib/gecoder/interface/constraints/set/relation.rb
72
+ - lib/gecoder/interface/constraints/set/cardinality.rb
73
+ - lib/gecoder/interface/constraints/set/domain.rb
74
74
  - lib/gecoder/bindings/bindings.rb
75
75
  - example/example_helper.rb
76
76
  - example/raw_bindings.rb
@@ -78,6 +78,7 @@ files:
78
78
  - example/queens.rb
79
79
  - example/sudoku.rb
80
80
  - example/magic_sequence.rb
81
+ - example/send_most_money.rb
81
82
  - vendor/rust
82
83
  - vendor/rust/test
83
84
  - vendor/rust/include
@@ -160,22 +161,22 @@ files:
160
161
  - specs/set_var.rb
161
162
  - specs/logging.rb
162
163
  - specs/constraints/linear.rb
163
- - specs/constraints/set_relation.rb
164
164
  - specs/constraints/distinct.rb
165
165
  - specs/constraints/constraint_helper.rb
166
166
  - specs/constraints/constraints.rb
167
167
  - specs/constraints/boolean.rb
168
168
  - specs/constraints/reification_sugar.rb
169
+ - specs/constraints/bool_enum.rb
169
170
  - specs/constraints/equality.rb
170
171
  - specs/constraints/channel.rb
171
172
  - specs/constraints/element.rb
172
173
  - specs/constraints/count.rb
173
174
  - specs/constraints/sort.rb
174
175
  - specs/constraints/arithmetic.rb
175
- - specs/constraints/bool_enum.rb
176
176
  - specs/constraints/int_domain.rb
177
177
  - specs/constraints/set_domain.rb
178
178
  - specs/constraints/int_relation.rb
179
+ - specs/constraints/set_relation.rb
179
180
  - specs/constraints/connection.rb
180
181
  - specs/constraints/cardinality.rb
181
182
  - ext/missing.h
@@ -183,8 +184,37 @@ files:
183
184
  - ext/vararray.cpp
184
185
  - ext/missing.cpp
185
186
  - ext/vararray.h
186
- test_files: []
187
-
187
+ test_files:
188
+ - specs/search.rb
189
+ - specs/model.rb
190
+ - specs/branch.rb
191
+ - specs/binding_changes.rb
192
+ - specs/spec_helper.rb
193
+ - specs/enum_wrapper.rb
194
+ - specs/int_var.rb
195
+ - specs/bool_var.rb
196
+ - specs/enum_matrix.rb
197
+ - specs/set_var.rb
198
+ - specs/logging.rb
199
+ - specs/constraints/linear.rb
200
+ - specs/constraints/distinct.rb
201
+ - specs/constraints/constraint_helper.rb
202
+ - specs/constraints/constraints.rb
203
+ - specs/constraints/boolean.rb
204
+ - specs/constraints/reification_sugar.rb
205
+ - specs/constraints/bool_enum.rb
206
+ - specs/constraints/equality.rb
207
+ - specs/constraints/channel.rb
208
+ - specs/constraints/element.rb
209
+ - specs/constraints/count.rb
210
+ - specs/constraints/sort.rb
211
+ - specs/constraints/arithmetic.rb
212
+ - specs/constraints/int_domain.rb
213
+ - specs/constraints/set_domain.rb
214
+ - specs/constraints/int_relation.rb
215
+ - specs/constraints/set_relation.rb
216
+ - specs/constraints/connection.rb
217
+ - specs/constraints/cardinality.rb
188
218
  rdoc_options:
189
219
  - --title
190
220
  - Gecode/R
@@ -211,8 +241,8 @@ extra_rdoc_files:
211
241
  - lib/gecoder/interface/constraints/int_var_constraints.rb
212
242
  - lib/gecoder/interface/constraints/int_enum_constraints.rb
213
243
  - lib/gecoder/interface/constraints/bool_enum_constraints.rb
214
- - lib/gecoder/interface/constraints/set_var_constraints.rb
215
244
  - lib/gecoder/interface/constraints/set_enum_constraints.rb
245
+ - lib/gecoder/interface/constraints/set_var_constraints.rb
216
246
  - lib/gecoder/interface/constraints/bool/boolean.rb
217
247
  - lib/gecoder/interface/constraints/int/linear.rb
218
248
  - lib/gecoder/interface/constraints/int/domain.rb
@@ -225,18 +255,18 @@ extra_rdoc_files:
225
255
  - lib/gecoder/interface/constraints/int_enum/sort.rb
226
256
  - lib/gecoder/interface/constraints/int_enum/arithmetic.rb
227
257
  - lib/gecoder/interface/constraints/bool_enum/boolean.rb
228
- - lib/gecoder/interface/constraints/set/domain.rb
229
- - lib/gecoder/interface/constraints/set/relation.rb
230
- - lib/gecoder/interface/constraints/set/connection.rb
231
- - lib/gecoder/interface/constraints/set/cardinality.rb
232
258
  - lib/gecoder/interface/constraints/set_enum/distinct.rb
233
259
  - lib/gecoder/interface/constraints/set_enum/channel.rb
260
+ - lib/gecoder/interface/constraints/set/connection.rb
261
+ - lib/gecoder/interface/constraints/set/relation.rb
262
+ - lib/gecoder/interface/constraints/set/cardinality.rb
263
+ - lib/gecoder/interface/constraints/set/domain.rb
234
264
  - lib/gecoder/bindings/bindings.rb
235
265
  executables: []
236
266
 
237
267
  extensions:
238
268
  - ext/extconf.rb
239
- requirements: []
240
-
269
+ requirements:
270
+ - Gecode 1.3.1
241
271
  dependencies: []
242
272