gecoder-with-gecode 0.8.3 → 0.9.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.
- data/CHANGES +15 -0
- data/README +6 -2
- data/example/equation_system.rb +15 -0
- data/example/magic_sequence.rb +7 -7
- data/example/money.rb +36 -0
- data/example/queens.rb +7 -8
- data/example/send_most_money.rb +1 -1
- data/example/square_tiling.rb +2 -2
- data/example/sudoku-set.rb +11 -12
- data/example/sudoku.rb +40 -45
- data/ext/extconf.rb +0 -0
- data/ext/gecode-2.1.1/LICENSE +0 -0
- data/ext/gecode-2.1.1/configure +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/configure +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/heap.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/myspace.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/warner.cc +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/warner.hh +0 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.vis +0 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/array.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/array.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/bool/base.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/bool/eq.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/bool/eqv.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/bool/lq.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/bool/or.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/branch/select-view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/branch.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/branch.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/base.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-multi.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-multi.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-single.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-single.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel/val.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/channel.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/circuit.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/circuit.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/count/int.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/count/rel.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/count/view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/bilink.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/bnd.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/combptr.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/edge.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/node.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/val.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/dom/range.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/dom/spec.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/dom.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/dom.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/element/int.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/element/view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/element.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/element.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/exception.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/dfa.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/layered-graph.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/gccbndsup.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/lbc.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/ubc.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/gcc.hh +0 -0
- data/ext/gecode-2.1.1/gecode/int/int-set.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/int-set.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-int.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-scale.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-nary.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-ter.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/linear/post.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/propagator.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/rel/lq-le.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/unshare.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var/bool.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.vis +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/delta.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/int.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/int.vis +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/bool.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/constint.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/int.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/iter.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/minus.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/offset.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/print.cc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/rtest.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/scale.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view/zero.icc +0 -0
- data/ext/gecode-2.1.1/gecode/int/view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-add.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-append.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-array.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-cache.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-compl.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-diff.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-empty.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-inter.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-minmax.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-minus.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-offset.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-operations.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-scale.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-singleton-append.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-singleton.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-union.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-values.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-array.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-offset.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-ranges.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-singleton.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter/values-unique.icc +0 -0
- data/ext/gecode-2.1.1/gecode/iter.hh +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/advisor.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/array.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/branching.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/exception.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/macros.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/modevent.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/propagator.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/shared-array.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/var.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel/view.icc +0 -0
- data/ext/gecode-2.1.1/gecode/kernel.hh +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.cc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.icc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-rel.icc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/lin-expr.icc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/lin-rel.icc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel/reg.cc +0 -0
- data/ext/gecode-2.1.1/gecode/minimodel.hh +0 -0
- data/ext/gecode-2.1.1/gecode/search/bab.cc +0 -0
- data/ext/gecode-2.1.1/gecode/search/bab.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/dfs.cc +0 -0
- data/ext/gecode-2.1.1/gecode/search/dfs.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/engine-ctrl.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/lds.cc +0 -0
- data/ext/gecode-2.1.1/gecode/search/lds.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/options.cc +0 -0
- data/ext/gecode-2.1.1/gecode/search/options.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/restart.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/statistics.icc +0 -0
- data/ext/gecode-2.1.1/gecode/search/stop.cc +0 -0
- data/ext/gecode-2.1.1/gecode/search/stop.icc +0 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/set.vis +0 -0
- data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/cast.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/exception.cc +0 -0
- data/ext/gecode-2.1.1/gecode/support/exception.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/macros.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/marked-pointer.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/memory.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/static-stack.icc +0 -0
- data/ext/gecode-2.1.1/gecode/support/symbol.cc +0 -0
- data/ext/gecode-2.1.1/gecode/support.hh +0 -0
- data/ext/gecode-2.1.1/install-sh +0 -0
- data/ext/gecode-2.1.1/misc/debian/rules +0 -0
- data/ext/gecode-2.1.1/misc/doxygen/back.png +0 -0
- data/ext/gecode-2.1.1/misc/doxygen/gecode-logo-100.png +0 -0
- data/ext/gecode-2.1.1/misc/genchangelog.perl +0 -0
- data/ext/gecode-2.1.1/misc/genlicense.perl +0 -0
- data/ext/gecode-2.1.1/misc/genstatistics.perl +0 -0
- data/ext/gecode-2.1.1/misc/genvariables.perl +0 -0
- data/ext/gecode-2.1.1/misc/getrevision.perl +0 -0
- data/ext/gecode-2.1.1/misc/makedepend.perl +0 -0
- data/ext/gecode-2.1.1/misc/svn-ignore.txt +0 -0
- data/ext/gecode-2.1.1/variables.vsl +0 -0
- data/lib/gecoder/bindings/bindings.rb +16 -0
- data/lib/gecoder/bindings.rb +42 -0
- data/lib/gecoder/interface/branch.rb +16 -9
- data/lib/gecoder/interface/constraints/bool/boolean.rb +205 -213
- data/lib/gecoder/interface/constraints/bool/channel.rb +4 -5
- data/lib/gecoder/interface/constraints/bool/linear.rb +192 -21
- data/lib/gecoder/interface/constraints/bool_enum/channel.rb +43 -39
- data/lib/gecoder/interface/constraints/bool_enum/extensional.rb +43 -49
- data/lib/gecoder/interface/constraints/bool_enum/relation.rb +38 -71
- data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +73 -22
- data/lib/gecoder/interface/constraints/bool_var_constraints.rb +140 -61
- data/lib/gecoder/interface/constraints/extensional_regexp.rb +4 -4
- data/lib/gecoder/interface/constraints/fixnum_enum/element.rb +63 -0
- data/lib/gecoder/interface/constraints/fixnum_enum/operation.rb +65 -0
- data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +42 -0
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +131 -130
- data/lib/gecoder/interface/constraints/int/channel.rb +21 -31
- data/lib/gecoder/interface/constraints/int/domain.rb +45 -42
- data/lib/gecoder/interface/constraints/int/linear.rb +85 -239
- data/lib/gecoder/interface/constraints/int/relation.rb +141 -0
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +55 -64
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +35 -37
- data/lib/gecoder/interface/constraints/int_enum/count.rb +53 -78
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +36 -46
- data/lib/gecoder/interface/constraints/int_enum/element.rb +39 -57
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +15 -19
- data/lib/gecoder/interface/constraints/int_enum/extensional.rb +65 -72
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +42 -45
- data/lib/gecoder/interface/constraints/int_enum_constraints.rb +79 -22
- data/lib/gecoder/interface/constraints/int_var_constraints.rb +215 -44
- data/lib/gecoder/interface/constraints/reifiable_constraints.rb +14 -14
- data/lib/gecoder/interface/constraints/selected_set/select.rb +120 -0
- data/lib/gecoder/interface/constraints/selected_set_constraints.rb +75 -0
- data/lib/gecoder/interface/constraints/set/cardinality.rb +43 -53
- data/lib/gecoder/interface/constraints/set/channel.rb +26 -29
- data/lib/gecoder/interface/constraints/set/connection.rb +89 -152
- data/lib/gecoder/interface/constraints/set/domain.rb +112 -65
- data/lib/gecoder/interface/constraints/set/include.rb +36 -0
- data/lib/gecoder/interface/constraints/set/operation.rb +96 -110
- data/lib/gecoder/interface/constraints/set/relation.rb +114 -137
- data/lib/gecoder/interface/constraints/set_elements/relation.rb +116 -0
- data/lib/gecoder/interface/constraints/set_elements_constraints.rb +97 -0
- data/lib/gecoder/interface/constraints/set_enum/channel.rb +23 -27
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +18 -19
- data/lib/gecoder/interface/constraints/set_enum/operation.rb +62 -53
- data/lib/gecoder/interface/constraints/set_enum/select.rb +79 -0
- data/lib/gecoder/interface/constraints/set_enum_constraints.rb +73 -23
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +222 -57
- data/lib/gecoder/interface/constraints.rb +410 -451
- data/lib/gecoder/interface/enum_matrix.rb +4 -4
- data/lib/gecoder/interface/enum_wrapper.rb +71 -22
- data/lib/gecoder/interface/model.rb +167 -12
- data/lib/gecoder/interface/model_sugar.rb +84 -0
- data/lib/gecoder/interface/search.rb +30 -18
- data/lib/gecoder/interface/variables.rb +103 -33
- data/lib/gecoder/interface.rb +2 -1
- data/lib/gecoder/version.rb +2 -2
- data/specs/bool_var.rb +19 -12
- data/specs/constraints/{boolean.rb → bool/boolean.rb} +103 -28
- data/specs/constraints/bool/boolean_properties.rb +51 -0
- data/specs/constraints/bool/linear.rb +213 -0
- data/specs/constraints/bool_enum/bool_enum_relation.rb +117 -0
- data/specs/constraints/bool_enum/channel.rb +102 -0
- data/specs/constraints/{extensional.rb → bool_enum/extensional.rb} +32 -101
- data/specs/constraints/constraint_helper.rb +149 -179
- data/specs/constraints/constraint_receivers.rb +103 -0
- data/specs/constraints/constraints.rb +6 -63
- data/specs/constraints/fixnum_enum/element.rb +58 -0
- data/specs/constraints/fixnum_enum/operation.rb +67 -0
- data/specs/constraints/int/arithmetic.rb +149 -0
- data/specs/constraints/int/channel.rb +101 -0
- data/specs/constraints/int/domain.rb +106 -0
- data/specs/constraints/int/linear.rb +183 -0
- data/specs/constraints/int/linear_properties.rb +97 -0
- data/specs/constraints/int/relation.rb +84 -0
- data/specs/constraints/int_enum/arithmetic.rb +72 -0
- data/specs/constraints/int_enum/channel.rb +57 -0
- data/specs/constraints/int_enum/count.rb +72 -0
- data/specs/constraints/int_enum/distinct.rb +80 -0
- data/specs/constraints/int_enum/element.rb +61 -0
- data/specs/constraints/int_enum/equality.rb +29 -0
- data/specs/constraints/int_enum/extensional.rb +224 -0
- data/specs/constraints/int_enum/sort.rb +167 -0
- data/specs/constraints/operands.rb +264 -0
- data/specs/constraints/property_helper.rb +443 -0
- data/specs/constraints/reification_sugar.rb +4 -5
- data/specs/constraints/selected_set/select.rb +56 -0
- data/specs/constraints/selected_set/select_properties.rb +157 -0
- data/specs/constraints/set/cardinality.rb +58 -0
- data/specs/constraints/set/cardinality_properties.rb +46 -0
- data/specs/constraints/set/channel.rb +77 -0
- data/specs/constraints/set/connection.rb +176 -0
- data/specs/constraints/set/domain.rb +197 -0
- data/specs/constraints/set/include.rb +36 -0
- data/specs/constraints/set/operation.rb +132 -0
- data/specs/constraints/set/relation.rb +117 -0
- data/specs/constraints/set_elements/relation.rb +84 -0
- data/specs/constraints/set_enum/channel.rb +80 -0
- data/specs/constraints/set_enum/distinct.rb +59 -0
- data/specs/constraints/set_enum/operation.rb +111 -0
- data/specs/constraints/set_enum/select.rb +73 -0
- data/specs/enum_wrapper.rb +53 -3
- data/specs/int_var.rb +44 -25
- data/specs/model.rb +58 -1
- data/specs/model_sugar.rb +30 -0
- data/specs/search.rb +24 -5
- data/specs/selected_set.rb +39 -0
- data/specs/set_elements.rb +34 -0
- data/specs/set_var.rb +22 -8
- data/specs/spec_helper.rb +206 -6
- data/tasks/distribution.rake +22 -7
- data/tasks/svn.rake +3 -1
- metadata +219 -135
- data/lib/gecoder/interface/constraints/set_enum/selection.rb +0 -217
- data/specs/constraints/arithmetic.rb +0 -351
- data/specs/constraints/bool_enum_relation.rb +0 -160
- data/specs/constraints/cardinality.rb +0 -157
- data/specs/constraints/channel.rb +0 -454
- data/specs/constraints/connection.rb +0 -369
- data/specs/constraints/count.rb +0 -146
- data/specs/constraints/distinct.rb +0 -164
- data/specs/constraints/element.rb +0 -108
- data/specs/constraints/equality.rb +0 -31
- data/specs/constraints/int_domain.rb +0 -70
- data/specs/constraints/int_relation.rb +0 -82
- data/specs/constraints/linear.rb +0 -340
- data/specs/constraints/selection.rb +0 -292
- data/specs/constraints/set_domain.rb +0 -185
- data/specs/constraints/set_operation.rb +0 -285
- data/specs/constraints/set_relation.rb +0 -197
- data/specs/constraints/sort.rb +0 -179
data/specs/enum_wrapper.rb
CHANGED
|
@@ -5,6 +5,7 @@ describe Gecode::Model, ' (enum wrapping)' do
|
|
|
5
5
|
@model = Gecode::Model.new
|
|
6
6
|
@bool = @model.bool_var
|
|
7
7
|
@int = @model.int_var(1..2)
|
|
8
|
+
@set = @model.set_var([], 1..2)
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
it 'should only allow enumerables to be wrapped' do
|
|
@@ -19,6 +20,13 @@ describe Gecode::Model, ' (enum wrapping)' do
|
|
|
19
20
|
@model.wrap_enum(enum)
|
|
20
21
|
end.should_not raise_error
|
|
21
22
|
end
|
|
23
|
+
|
|
24
|
+
it 'should allow enumerables of bool operands to be wrapped' do
|
|
25
|
+
lambda do
|
|
26
|
+
enum = [@bool & @bool]
|
|
27
|
+
@model.wrap_enum(enum)
|
|
28
|
+
end.should_not raise_error
|
|
29
|
+
end
|
|
22
30
|
|
|
23
31
|
it 'should allow enumerables of int variables to be wrapped' do
|
|
24
32
|
lambda do
|
|
@@ -26,6 +34,28 @@ describe Gecode::Model, ' (enum wrapping)' do
|
|
|
26
34
|
@model.wrap_enum(enum)
|
|
27
35
|
end.should_not raise_error
|
|
28
36
|
end
|
|
37
|
+
|
|
38
|
+
it 'should allow enumerables of int operands to be wrapped' do
|
|
39
|
+
lambda do
|
|
40
|
+
enum = [@int + @int]
|
|
41
|
+
@model.wrap_enum(enum)
|
|
42
|
+
end.should_not raise_error
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should allow enumerables of set variables to be wrapped' do
|
|
46
|
+
lambda do
|
|
47
|
+
enum = [@set]
|
|
48
|
+
@model.wrap_enum(enum)
|
|
49
|
+
end.should_not raise_error
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'should allow enumerables of set operands to be wrapped' do
|
|
53
|
+
lambda do
|
|
54
|
+
enum = [@set.union(@set)]
|
|
55
|
+
@model.wrap_enum(enum)
|
|
56
|
+
end.should_not raise_error
|
|
57
|
+
end
|
|
58
|
+
|
|
29
59
|
|
|
30
60
|
it 'should allow enumerables of fixnums to be wrapped' do
|
|
31
61
|
lambda do
|
|
@@ -76,7 +106,7 @@ describe Gecode::IntEnumMethods do
|
|
|
76
106
|
|
|
77
107
|
it 'should convert to an int var array' do
|
|
78
108
|
@model.allow_space_access do
|
|
79
|
-
@int_enum.
|
|
109
|
+
@int_enum.bind_array.should be_kind_of(Gecode::Raw::IntVarArray)
|
|
80
110
|
end
|
|
81
111
|
end
|
|
82
112
|
|
|
@@ -84,6 +114,11 @@ describe Gecode::IntEnumMethods do
|
|
|
84
114
|
@int_enum.domain_range.should == (0..1)
|
|
85
115
|
(@int_enum << @model.int_var(-4..4)).domain_range.should == (-4..4)
|
|
86
116
|
end
|
|
117
|
+
|
|
118
|
+
it 'should define #to_int_enum' do
|
|
119
|
+
@int_enum.to_int_enum.should be_kind_of(
|
|
120
|
+
Gecode::IntEnum::IntEnumOperand)
|
|
121
|
+
end
|
|
87
122
|
end
|
|
88
123
|
|
|
89
124
|
describe Gecode::BoolEnumMethods do
|
|
@@ -94,9 +129,14 @@ describe Gecode::BoolEnumMethods do
|
|
|
94
129
|
|
|
95
130
|
it 'should convert to a bool var array' do
|
|
96
131
|
@model.allow_space_access do
|
|
97
|
-
@bool_enum.
|
|
132
|
+
@bool_enum.bind_array.should be_kind_of(Gecode::Raw::BoolVarArray)
|
|
98
133
|
end
|
|
99
134
|
end
|
|
135
|
+
|
|
136
|
+
it 'should define #to_bool_enum' do
|
|
137
|
+
@bool_enum.to_bool_enum.should be_kind_of(
|
|
138
|
+
Gecode::BoolEnum::BoolEnumOperand)
|
|
139
|
+
end
|
|
100
140
|
end
|
|
101
141
|
|
|
102
142
|
describe Gecode::SetEnumMethods do
|
|
@@ -107,7 +147,7 @@ describe Gecode::SetEnumMethods do
|
|
|
107
147
|
|
|
108
148
|
it 'should convert to a set var array' do
|
|
109
149
|
@model.allow_space_access do
|
|
110
|
-
@set_enum.
|
|
150
|
+
@set_enum.bind_array.should be_kind_of(Gecode::Raw::SetVarArray)
|
|
111
151
|
end
|
|
112
152
|
end
|
|
113
153
|
|
|
@@ -115,6 +155,11 @@ describe Gecode::SetEnumMethods do
|
|
|
115
155
|
@set_enum.upper_bound_range.should == (0..1)
|
|
116
156
|
(@set_enum << @model.set_var([], -4..4)).upper_bound_range.should == (-4..4)
|
|
117
157
|
end
|
|
158
|
+
|
|
159
|
+
it 'should define #to_set_enum' do
|
|
160
|
+
@set_enum.to_set_enum.should be_kind_of(
|
|
161
|
+
Gecode::SetEnum::SetEnumOperand)
|
|
162
|
+
end
|
|
118
163
|
end
|
|
119
164
|
|
|
120
165
|
describe Gecode::FixnumEnumMethods do
|
|
@@ -126,4 +171,9 @@ describe Gecode::FixnumEnumMethods do
|
|
|
126
171
|
it 'should compute the smallest domain range' do
|
|
127
172
|
@enum.domain_range.should == (7..4711)
|
|
128
173
|
end
|
|
174
|
+
|
|
175
|
+
it 'should define #to_fixnum_enum' do
|
|
176
|
+
@enum.to_fixnum_enum.should be_kind_of(
|
|
177
|
+
Gecode::FixnumEnum::FixnumEnumOperand)
|
|
178
|
+
end
|
|
129
179
|
end
|
data/specs/int_var.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
require File.dirname(__FILE__) + '/constraints/property_helper'
|
|
2
3
|
|
|
3
4
|
describe 'non-empty int variable', :shared => true do
|
|
4
5
|
it 'should have min equal to the lower domain bound' do
|
|
@@ -35,18 +36,22 @@ describe 'non-empty int variable', :shared => true do
|
|
|
35
36
|
it 'should have a zero degree' do
|
|
36
37
|
@var.degree.should be_zero
|
|
37
38
|
end
|
|
39
|
+
|
|
40
|
+
it 'should return the correct domain through #domain' do
|
|
41
|
+
@var.domain.to_a.should == @domain.to_a
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it_should_behave_like 'int var operand'
|
|
38
45
|
end
|
|
39
46
|
|
|
40
|
-
describe Gecode::
|
|
47
|
+
describe Gecode::IntVar, ' (with range domain of size > 1)' do
|
|
41
48
|
before do
|
|
42
49
|
@range = -4..3
|
|
43
50
|
@domain = @range.to_a
|
|
44
|
-
model = Gecode::Model.new
|
|
45
|
-
@var = model.int_var(@range)
|
|
51
|
+
@model = Gecode::Model.new
|
|
52
|
+
@operand = @var = @model.int_var(@range)
|
|
46
53
|
end
|
|
47
54
|
|
|
48
|
-
it_should_behave_like 'non-empty int variable'
|
|
49
|
-
|
|
50
55
|
it 'should not be assigned' do
|
|
51
56
|
@var.should_not be_assigned
|
|
52
57
|
end
|
|
@@ -58,28 +63,28 @@ describe Gecode::FreeIntVar, ' (with range domain of size > 1)' do
|
|
|
58
63
|
it 'should raise error when trying to access assigned value' do
|
|
59
64
|
lambda{ @var.value }.should raise_error(RuntimeError)
|
|
60
65
|
end
|
|
66
|
+
|
|
67
|
+
it_should_behave_like 'non-empty int variable'
|
|
61
68
|
end
|
|
62
69
|
|
|
63
|
-
describe Gecode::
|
|
70
|
+
describe Gecode::IntVar, ' (defined with three-dot range)' do
|
|
64
71
|
before do
|
|
65
72
|
@range = -4...3
|
|
66
73
|
@domain = @range.to_a
|
|
67
|
-
model = Gecode::Model.new
|
|
68
|
-
@var = model.int_var(@range)
|
|
74
|
+
@model = Gecode::Model.new
|
|
75
|
+
@operand = @var = @model.int_var(@range)
|
|
69
76
|
end
|
|
70
77
|
|
|
71
78
|
it_should_behave_like 'non-empty int variable'
|
|
72
79
|
end
|
|
73
80
|
|
|
74
|
-
describe Gecode::
|
|
81
|
+
describe Gecode::IntVar, ' (with non-range domain of size > 1)' do
|
|
75
82
|
before do
|
|
76
83
|
@domain = [-3, -2, -1, 1]
|
|
77
|
-
model = Gecode::Model.new
|
|
78
|
-
@var = model.int_var(@domain)
|
|
84
|
+
@model = Gecode::Model.new
|
|
85
|
+
@operand = @var = @model.int_var(@domain)
|
|
79
86
|
end
|
|
80
87
|
|
|
81
|
-
it_should_behave_like 'non-empty int variable'
|
|
82
|
-
|
|
83
88
|
it 'should not be assigned' do
|
|
84
89
|
@var.should_not be_assigned
|
|
85
90
|
end
|
|
@@ -91,17 +96,17 @@ describe Gecode::FreeIntVar, ' (with non-range domain of size > 1)' do
|
|
|
91
96
|
it 'should not contain the domain\'s holes' do
|
|
92
97
|
@var.should_not include(0)
|
|
93
98
|
end
|
|
99
|
+
|
|
100
|
+
it_should_behave_like 'non-empty int variable'
|
|
94
101
|
end
|
|
95
102
|
|
|
96
|
-
describe Gecode::
|
|
103
|
+
describe Gecode::IntVar, ' (with a domain of size 1)' do
|
|
97
104
|
before do
|
|
98
105
|
@domain = [1]
|
|
99
|
-
model = Gecode::Model.new
|
|
100
|
-
@var = model.int_var(*@domain)
|
|
106
|
+
@model = Gecode::Model.new
|
|
107
|
+
@operand = @var = @model.int_var(*@domain)
|
|
101
108
|
end
|
|
102
109
|
|
|
103
|
-
it_should_behave_like 'non-empty int variable'
|
|
104
|
-
|
|
105
110
|
it 'should be assigned' do
|
|
106
111
|
@var.should be_assigned
|
|
107
112
|
end
|
|
@@ -109,13 +114,15 @@ describe Gecode::FreeIntVar, ' (with a domain of size 1)' do
|
|
|
109
114
|
it 'should be a range domain' do
|
|
110
115
|
@var.should be_range
|
|
111
116
|
end
|
|
117
|
+
|
|
118
|
+
it_should_behave_like 'non-empty int variable'
|
|
112
119
|
end
|
|
113
120
|
|
|
114
|
-
describe Gecode::
|
|
121
|
+
describe Gecode::IntVar, ' (assigned)' do
|
|
115
122
|
before do
|
|
116
123
|
@domain = 1
|
|
117
|
-
model = Gecode::Model.new
|
|
118
|
-
@var = model.int_var(*@domain)
|
|
124
|
+
@model = Gecode::Model.new
|
|
125
|
+
@operand = @var = @model.int_var(*@domain)
|
|
119
126
|
end
|
|
120
127
|
|
|
121
128
|
it 'should be assigned' do
|
|
@@ -125,13 +132,19 @@ describe Gecode::FreeIntVar, ' (assigned)' do
|
|
|
125
132
|
it 'should give the assigned number when inspecting' do
|
|
126
133
|
@var.inspect.should include(" #{@domain[0]}>")
|
|
127
134
|
end
|
|
135
|
+
|
|
136
|
+
it 'should return the correct domain through #domain' do
|
|
137
|
+
@var.domain.to_a.should == [@domain]
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it_should_behave_like 'int var operand'
|
|
128
141
|
end
|
|
129
142
|
|
|
130
|
-
describe Gecode::
|
|
143
|
+
describe Gecode::IntVar, ' (not assigned)' do
|
|
131
144
|
before do
|
|
132
145
|
@domain = 1..2
|
|
133
|
-
model = Gecode::Model.new
|
|
134
|
-
@var = model.int_var(@domain)
|
|
146
|
+
@model = Gecode::Model.new
|
|
147
|
+
@operand = @var = @model.int_var(@domain)
|
|
135
148
|
end
|
|
136
149
|
|
|
137
150
|
it 'should not be assigned' do
|
|
@@ -141,4 +154,10 @@ describe Gecode::FreeIntVar, ' (not assigned)' do
|
|
|
141
154
|
it 'should give the domain range when inspecting' do
|
|
142
155
|
@var.inspect.should include(" #{@domain.first}..#{@domain.last}>")
|
|
143
156
|
end
|
|
144
|
-
|
|
157
|
+
|
|
158
|
+
it 'should return the correct domain through #domain' do
|
|
159
|
+
@var.domain.to_a.should == @domain.to_a
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it_should_behave_like 'int var operand'
|
|
163
|
+
end
|
data/specs/model.rb
CHANGED
|
@@ -265,4 +265,61 @@ describe Gecode::Model, ' (space access restriction)' do
|
|
|
265
265
|
end
|
|
266
266
|
end.should_not raise_error(RuntimeError)
|
|
267
267
|
end
|
|
268
|
-
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
describe Gecode::Model, ' (accessible variable creation)' do
|
|
271
|
+
before do
|
|
272
|
+
@model = Class.new(Gecode::Model).new
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it 'should allow creation of named variable using #foo_is_a' do
|
|
276
|
+
var = @model.int_var(17)
|
|
277
|
+
lambda{ @model.foo }.should raise_error(NoMethodError)
|
|
278
|
+
@model.instance_eval{ foo_is_a var }
|
|
279
|
+
lambda{ @model.foo }.should_not raise_error
|
|
280
|
+
@model.foo.should == var
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it 'should allow creation of named variable using #foo_is_an' do
|
|
284
|
+
var = @model.int_var(17)
|
|
285
|
+
lambda{ @model.foo }.should raise_error(NoMethodError)
|
|
286
|
+
@model.instance_eval{ foo_is_an var }
|
|
287
|
+
lambda{ @model.foo }.should_not raise_error
|
|
288
|
+
@model.foo.should == var
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
it 'should only allow one argument to be given to #foo_is_a' do
|
|
292
|
+
lambda do
|
|
293
|
+
@model.instance_eval{ foo_is_a }
|
|
294
|
+
end.should raise_error(ArgumentError)
|
|
295
|
+
lambda do
|
|
296
|
+
@model.instance_eval{ foo_is_a bool_var, bool_var }
|
|
297
|
+
end.should raise_error(ArgumentError)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it 'should only define the variable in the current instance' do
|
|
301
|
+
klass = Class.new Gecode::Model
|
|
302
|
+
model_a = klass.new
|
|
303
|
+
model_b = klass.new
|
|
304
|
+
|
|
305
|
+
model_a.instance_eval{ bar_is_a bool_var }
|
|
306
|
+
lambda{ model_a.bar }.should_not raise_error
|
|
307
|
+
lambda{ model_b.bar }.should raise_error(NoMethodError)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it 'should raise error if a method would be overwritten' do
|
|
311
|
+
var = @model.int_var(17)
|
|
312
|
+
lambda{ @model.class }.should_not raise_error
|
|
313
|
+
lambda do
|
|
314
|
+
@model.instance_eval{ class_is_an var }
|
|
315
|
+
end.should raise_error(ArgumentError)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it 'should raise error if an instance variable would be overwritten' do
|
|
319
|
+
@model.instance_eval{ @foo = 17 }
|
|
320
|
+
var = @model.int_var(17)
|
|
321
|
+
lambda do
|
|
322
|
+
@model.instance_eval{ foo_is_a var }
|
|
323
|
+
end.should raise_error(ArgumentError)
|
|
324
|
+
end
|
|
325
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Gecode, ' (Model sugar)' do
|
|
4
|
+
it 'should provide #solve as sugar for constructing a model and running solve!' do
|
|
5
|
+
Gecode.solve do
|
|
6
|
+
numbers_is_an int_var_array(2, 0..5)
|
|
7
|
+
x, y = numbers
|
|
8
|
+
(x * y).must == 25
|
|
9
|
+
branch_on numbers
|
|
10
|
+
end.numbers.values.should == [5,5]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'should provide #maximize as sugar for constructing a model and running maximize!' do
|
|
14
|
+
Gecode.maximize :z do
|
|
15
|
+
z_is_an int_var
|
|
16
|
+
x, y = vars = int_var_array(2, 0..5)
|
|
17
|
+
(x*2 - y).must == z
|
|
18
|
+
branch_on vars
|
|
19
|
+
end.z.value.should equal(10)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should provide #minimize as sugar for constructing a model and running minimize!' do
|
|
23
|
+
Gecode.minimize :z do
|
|
24
|
+
z_is_an int_var
|
|
25
|
+
x, y = vars = int_var_array(2, 0..5)
|
|
26
|
+
(x*2 - y).must == z
|
|
27
|
+
branch_on vars
|
|
28
|
+
end.z.value.should equal(-5)
|
|
29
|
+
end
|
|
30
|
+
end
|
data/specs/search.rb
CHANGED
|
@@ -201,16 +201,35 @@ describe Gecode::Model, ' (without solution)' do
|
|
|
201
201
|
end
|
|
202
202
|
|
|
203
203
|
it 'should return nil when calling #solution' do
|
|
204
|
-
@model.var.must < 0
|
|
205
204
|
@model.solution{ |s| 'test' }.should be_nil
|
|
206
205
|
end
|
|
206
|
+
|
|
207
|
+
it 'should not yield anything to #each_solution' do
|
|
208
|
+
@model.each_solution{ |s| violated }
|
|
209
|
+
end
|
|
207
210
|
|
|
208
|
-
it 'should
|
|
209
|
-
|
|
211
|
+
it 'should raise NoSolutionError when calling #solve!' do
|
|
212
|
+
lambda do
|
|
213
|
+
@model.solve!
|
|
214
|
+
end.should raise_error(Gecode::NoSolutionError)
|
|
210
215
|
end
|
|
211
216
|
|
|
212
|
-
it 'should
|
|
213
|
-
|
|
217
|
+
it 'should raise NoSolutionError when calling #optimize!' do
|
|
218
|
+
lambda do
|
|
219
|
+
@model.optimize!{}
|
|
220
|
+
end.should raise_error(Gecode::NoSolutionError)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'should raise NoSolutionError when calling #minimize!' do
|
|
224
|
+
lambda do
|
|
225
|
+
@model.optimize!{}
|
|
226
|
+
end.should raise_error(Gecode::NoSolutionError)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
it 'should raise NoSolutionError when calling #maximize!' do
|
|
230
|
+
lambda do
|
|
231
|
+
@model.maximize!(:var)
|
|
232
|
+
end.should raise_error(Gecode::NoSolutionError)
|
|
214
233
|
end
|
|
215
234
|
end
|
|
216
235
|
|
|
@@ -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
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/
|
|
1
|
+
require File.dirname(__FILE__) + '/constraints/property_helper'
|
|
2
2
|
|
|
3
|
-
describe Gecode::
|
|
3
|
+
describe Gecode::SetVar, '(not assigned)' do
|
|
4
4
|
before do
|
|
5
|
-
model = Gecode::Model.new
|
|
6
|
-
@var = model.set_var(1..3, 0..4)
|
|
5
|
+
@model = Gecode::Model.new
|
|
6
|
+
@operand = @var = @model.set_var(1..3, 0..4)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
it 'should not be assigned' do
|
|
@@ -14,6 +14,11 @@ describe Gecode::FreeSetVar, '(not assigned)' do
|
|
|
14
14
|
@var.inspect.should include('lub-range')
|
|
15
15
|
@var.inspect.should include('glb-range')
|
|
16
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
|
|
17
22
|
|
|
18
23
|
it 'should report the correct bounds' do
|
|
19
24
|
@var.lower_bound.sort.to_a.should == (1..3).to_a
|
|
@@ -42,13 +47,15 @@ describe Gecode::FreeSetVar, '(not assigned)' do
|
|
|
42
47
|
lower_bound.each{}
|
|
43
48
|
end.should_not raise_error
|
|
44
49
|
end
|
|
50
|
+
|
|
51
|
+
it_should_behave_like 'set var operand'
|
|
45
52
|
end
|
|
46
53
|
|
|
47
|
-
describe Gecode::
|
|
54
|
+
describe Gecode::SetVar, '(assigned)' do
|
|
48
55
|
before do
|
|
49
|
-
model = Gecode::Model.new
|
|
50
|
-
@var = model.set_var(1, 1)
|
|
51
|
-
model.solve!
|
|
56
|
+
@model = Gecode::Model.new
|
|
57
|
+
@operand = @var = @model.set_var(1, 1)
|
|
58
|
+
@model.solve!
|
|
52
59
|
end
|
|
53
60
|
|
|
54
61
|
it 'should be assigned' do
|
|
@@ -65,4 +72,11 @@ describe Gecode::FreeSetVar, '(assigned)' do
|
|
|
65
72
|
@var.lower_bound.to_a.should == [1]
|
|
66
73
|
@var.value.to_a.should == [1]
|
|
67
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'
|
|
68
82
|
end
|