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.
Files changed (337) hide show
  1. data/CHANGES +15 -0
  2. data/README +6 -2
  3. data/example/equation_system.rb +15 -0
  4. data/example/magic_sequence.rb +7 -7
  5. data/example/money.rb +36 -0
  6. data/example/queens.rb +7 -8
  7. data/example/send_most_money.rb +1 -1
  8. data/example/square_tiling.rb +2 -2
  9. data/example/sudoku-set.rb +11 -12
  10. data/example/sudoku.rb +40 -45
  11. data/ext/extconf.rb +0 -0
  12. data/ext/gecode-2.1.1/LICENSE +0 -0
  13. data/ext/gecode-2.1.1/configure +0 -0
  14. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +0 -0
  15. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +0 -0
  16. data/ext/gecode-2.1.1/contribs/qecode/configure +0 -0
  17. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +0 -0
  18. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +0 -0
  19. data/ext/gecode-2.1.1/contribs/qecode/heap.cc +0 -0
  20. data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +0 -0
  21. data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +0 -0
  22. data/ext/gecode-2.1.1/contribs/qecode/myspace.cc +0 -0
  23. data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +0 -0
  24. data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +0 -0
  25. data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +0 -0
  26. data/ext/gecode-2.1.1/contribs/qecode/warner.cc +0 -0
  27. data/ext/gecode-2.1.1/contribs/qecode/warner.hh +0 -0
  28. data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.vis +0 -0
  29. data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +0 -0
  30. data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +0 -0
  31. data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +0 -0
  32. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +0 -0
  33. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +0 -0
  34. data/ext/gecode-2.1.1/gecode/int/array.cc +0 -0
  35. data/ext/gecode-2.1.1/gecode/int/array.icc +0 -0
  36. data/ext/gecode-2.1.1/gecode/int/bool/base.icc +0 -0
  37. data/ext/gecode-2.1.1/gecode/int/bool/eq.icc +0 -0
  38. data/ext/gecode-2.1.1/gecode/int/bool/eqv.icc +0 -0
  39. data/ext/gecode-2.1.1/gecode/int/bool/lq.icc +0 -0
  40. data/ext/gecode-2.1.1/gecode/int/bool/or.icc +0 -0
  41. data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +0 -0
  42. data/ext/gecode-2.1.1/gecode/int/branch/select-view.icc +0 -0
  43. data/ext/gecode-2.1.1/gecode/int/branch.cc +0 -0
  44. data/ext/gecode-2.1.1/gecode/int/branch.hh +0 -0
  45. data/ext/gecode-2.1.1/gecode/int/channel/base.icc +0 -0
  46. data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +0 -0
  47. data/ext/gecode-2.1.1/gecode/int/channel/link-multi.cc +0 -0
  48. data/ext/gecode-2.1.1/gecode/int/channel/link-multi.icc +0 -0
  49. data/ext/gecode-2.1.1/gecode/int/channel/link-single.cc +0 -0
  50. data/ext/gecode-2.1.1/gecode/int/channel/link-single.icc +0 -0
  51. data/ext/gecode-2.1.1/gecode/int/channel/val.icc +0 -0
  52. data/ext/gecode-2.1.1/gecode/int/channel.cc +0 -0
  53. data/ext/gecode-2.1.1/gecode/int/channel.hh +0 -0
  54. data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +0 -0
  55. data/ext/gecode-2.1.1/gecode/int/circuit/dom.icc +0 -0
  56. data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +0 -0
  57. data/ext/gecode-2.1.1/gecode/int/circuit.cc +0 -0
  58. data/ext/gecode-2.1.1/gecode/int/circuit.hh +0 -0
  59. data/ext/gecode-2.1.1/gecode/int/count/int.icc +0 -0
  60. data/ext/gecode-2.1.1/gecode/int/count/rel.icc +0 -0
  61. data/ext/gecode-2.1.1/gecode/int/count/view.icc +0 -0
  62. data/ext/gecode-2.1.1/gecode/int/distinct/bilink.icc +0 -0
  63. data/ext/gecode-2.1.1/gecode/int/distinct/bnd.icc +0 -0
  64. data/ext/gecode-2.1.1/gecode/int/distinct/combptr.icc +0 -0
  65. data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +0 -0
  66. data/ext/gecode-2.1.1/gecode/int/distinct/edge.icc +0 -0
  67. data/ext/gecode-2.1.1/gecode/int/distinct/node.icc +0 -0
  68. data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +0 -0
  69. data/ext/gecode-2.1.1/gecode/int/distinct/val.icc +0 -0
  70. data/ext/gecode-2.1.1/gecode/int/dom/range.icc +0 -0
  71. data/ext/gecode-2.1.1/gecode/int/dom/spec.icc +0 -0
  72. data/ext/gecode-2.1.1/gecode/int/dom.cc +0 -0
  73. data/ext/gecode-2.1.1/gecode/int/dom.hh +0 -0
  74. data/ext/gecode-2.1.1/gecode/int/element/int.icc +0 -0
  75. data/ext/gecode-2.1.1/gecode/int/element/view.icc +0 -0
  76. data/ext/gecode-2.1.1/gecode/int/element.cc +0 -0
  77. data/ext/gecode-2.1.1/gecode/int/element.hh +0 -0
  78. data/ext/gecode-2.1.1/gecode/int/exception.icc +0 -0
  79. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +0 -0
  80. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.icc +0 -0
  81. data/ext/gecode-2.1.1/gecode/int/extensional/layered-graph.icc +0 -0
  82. data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +0 -0
  83. data/ext/gecode-2.1.1/gecode/int/gcc/gccbndsup.icc +0 -0
  84. data/ext/gecode-2.1.1/gecode/int/gcc/lbc.icc +0 -0
  85. data/ext/gecode-2.1.1/gecode/int/gcc/ubc.icc +0 -0
  86. data/ext/gecode-2.1.1/gecode/int/gcc.cc +0 -0
  87. data/ext/gecode-2.1.1/gecode/int/gcc.hh +0 -0
  88. data/ext/gecode-2.1.1/gecode/int/int-set.cc +0 -0
  89. data/ext/gecode-2.1.1/gecode/int/int-set.icc +0 -0
  90. data/ext/gecode-2.1.1/gecode/int/linear/bool-int.icc +0 -0
  91. data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +0 -0
  92. data/ext/gecode-2.1.1/gecode/int/linear/bool-scale.icc +0 -0
  93. data/ext/gecode-2.1.1/gecode/int/linear/bool-view.icc +0 -0
  94. data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +0 -0
  95. data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +0 -0
  96. data/ext/gecode-2.1.1/gecode/int/linear/int-nary.icc +0 -0
  97. data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +0 -0
  98. data/ext/gecode-2.1.1/gecode/int/linear/int-ter.icc +0 -0
  99. data/ext/gecode-2.1.1/gecode/int/linear/post.icc +0 -0
  100. data/ext/gecode-2.1.1/gecode/int/propagator.icc +0 -0
  101. data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +0 -0
  102. data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +0 -0
  103. data/ext/gecode-2.1.1/gecode/int/rel/lq-le.icc +0 -0
  104. data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +0 -0
  105. data/ext/gecode-2.1.1/gecode/int/unshare.cc +0 -0
  106. data/ext/gecode-2.1.1/gecode/int/var/bool.cc +0 -0
  107. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +0 -0
  108. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.icc +0 -0
  109. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.vis +0 -0
  110. data/ext/gecode-2.1.1/gecode/int/var-imp/delta.icc +0 -0
  111. data/ext/gecode-2.1.1/gecode/int/var-imp/int.icc +0 -0
  112. data/ext/gecode-2.1.1/gecode/int/var-imp/int.vis +0 -0
  113. data/ext/gecode-2.1.1/gecode/int/view/bool.icc +0 -0
  114. data/ext/gecode-2.1.1/gecode/int/view/constint.icc +0 -0
  115. data/ext/gecode-2.1.1/gecode/int/view/int.icc +0 -0
  116. data/ext/gecode-2.1.1/gecode/int/view/iter.icc +0 -0
  117. data/ext/gecode-2.1.1/gecode/int/view/minus.icc +0 -0
  118. data/ext/gecode-2.1.1/gecode/int/view/offset.icc +0 -0
  119. data/ext/gecode-2.1.1/gecode/int/view/print.cc +0 -0
  120. data/ext/gecode-2.1.1/gecode/int/view/rtest.icc +0 -0
  121. data/ext/gecode-2.1.1/gecode/int/view/scale.icc +0 -0
  122. data/ext/gecode-2.1.1/gecode/int/view/zero.icc +0 -0
  123. data/ext/gecode-2.1.1/gecode/int/view.icc +0 -0
  124. data/ext/gecode-2.1.1/gecode/iter/ranges-add.icc +0 -0
  125. data/ext/gecode-2.1.1/gecode/iter/ranges-append.icc +0 -0
  126. data/ext/gecode-2.1.1/gecode/iter/ranges-array.icc +0 -0
  127. data/ext/gecode-2.1.1/gecode/iter/ranges-cache.icc +0 -0
  128. data/ext/gecode-2.1.1/gecode/iter/ranges-compl.icc +0 -0
  129. data/ext/gecode-2.1.1/gecode/iter/ranges-diff.icc +0 -0
  130. data/ext/gecode-2.1.1/gecode/iter/ranges-empty.icc +0 -0
  131. data/ext/gecode-2.1.1/gecode/iter/ranges-inter.icc +0 -0
  132. data/ext/gecode-2.1.1/gecode/iter/ranges-minmax.icc +0 -0
  133. data/ext/gecode-2.1.1/gecode/iter/ranges-minus.icc +0 -0
  134. data/ext/gecode-2.1.1/gecode/iter/ranges-offset.icc +0 -0
  135. data/ext/gecode-2.1.1/gecode/iter/ranges-operations.icc +0 -0
  136. data/ext/gecode-2.1.1/gecode/iter/ranges-scale.icc +0 -0
  137. data/ext/gecode-2.1.1/gecode/iter/ranges-singleton-append.icc +0 -0
  138. data/ext/gecode-2.1.1/gecode/iter/ranges-singleton.icc +0 -0
  139. data/ext/gecode-2.1.1/gecode/iter/ranges-union.icc +0 -0
  140. data/ext/gecode-2.1.1/gecode/iter/ranges-values.icc +0 -0
  141. data/ext/gecode-2.1.1/gecode/iter/values-array.icc +0 -0
  142. data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +0 -0
  143. data/ext/gecode-2.1.1/gecode/iter/values-offset.icc +0 -0
  144. data/ext/gecode-2.1.1/gecode/iter/values-ranges.icc +0 -0
  145. data/ext/gecode-2.1.1/gecode/iter/values-singleton.icc +0 -0
  146. data/ext/gecode-2.1.1/gecode/iter/values-unique.icc +0 -0
  147. data/ext/gecode-2.1.1/gecode/iter.hh +0 -0
  148. data/ext/gecode-2.1.1/gecode/kernel/advisor.icc +0 -0
  149. data/ext/gecode-2.1.1/gecode/kernel/array.icc +0 -0
  150. data/ext/gecode-2.1.1/gecode/kernel/branching.icc +0 -0
  151. data/ext/gecode-2.1.1/gecode/kernel/exception.icc +0 -0
  152. data/ext/gecode-2.1.1/gecode/kernel/macros.icc +0 -0
  153. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +0 -0
  154. data/ext/gecode-2.1.1/gecode/kernel/modevent.icc +0 -0
  155. data/ext/gecode-2.1.1/gecode/kernel/propagator.icc +0 -0
  156. data/ext/gecode-2.1.1/gecode/kernel/shared-array.icc +0 -0
  157. data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +0 -0
  158. data/ext/gecode-2.1.1/gecode/kernel/var.icc +0 -0
  159. data/ext/gecode-2.1.1/gecode/kernel/view.icc +0 -0
  160. data/ext/gecode-2.1.1/gecode/kernel.hh +0 -0
  161. data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +0 -0
  162. data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.cc +0 -0
  163. data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.icc +0 -0
  164. data/ext/gecode-2.1.1/gecode/minimodel/bool-rel.icc +0 -0
  165. data/ext/gecode-2.1.1/gecode/minimodel/lin-expr.icc +0 -0
  166. data/ext/gecode-2.1.1/gecode/minimodel/lin-rel.icc +0 -0
  167. data/ext/gecode-2.1.1/gecode/minimodel/reg.cc +0 -0
  168. data/ext/gecode-2.1.1/gecode/minimodel.hh +0 -0
  169. data/ext/gecode-2.1.1/gecode/search/bab.cc +0 -0
  170. data/ext/gecode-2.1.1/gecode/search/bab.icc +0 -0
  171. data/ext/gecode-2.1.1/gecode/search/dfs.cc +0 -0
  172. data/ext/gecode-2.1.1/gecode/search/dfs.icc +0 -0
  173. data/ext/gecode-2.1.1/gecode/search/engine-ctrl.icc +0 -0
  174. data/ext/gecode-2.1.1/gecode/search/lds.cc +0 -0
  175. data/ext/gecode-2.1.1/gecode/search/lds.icc +0 -0
  176. data/ext/gecode-2.1.1/gecode/search/options.cc +0 -0
  177. data/ext/gecode-2.1.1/gecode/search/options.icc +0 -0
  178. data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +0 -0
  179. data/ext/gecode-2.1.1/gecode/search/restart.icc +0 -0
  180. data/ext/gecode-2.1.1/gecode/search/statistics.icc +0 -0
  181. data/ext/gecode-2.1.1/gecode/search/stop.cc +0 -0
  182. data/ext/gecode-2.1.1/gecode/search/stop.icc +0 -0
  183. data/ext/gecode-2.1.1/gecode/set/var-imp/set.vis +0 -0
  184. data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +0 -0
  185. data/ext/gecode-2.1.1/gecode/support/cast.icc +0 -0
  186. data/ext/gecode-2.1.1/gecode/support/exception.cc +0 -0
  187. data/ext/gecode-2.1.1/gecode/support/exception.icc +0 -0
  188. data/ext/gecode-2.1.1/gecode/support/macros.icc +0 -0
  189. data/ext/gecode-2.1.1/gecode/support/marked-pointer.icc +0 -0
  190. data/ext/gecode-2.1.1/gecode/support/memory.icc +0 -0
  191. data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +0 -0
  192. data/ext/gecode-2.1.1/gecode/support/static-stack.icc +0 -0
  193. data/ext/gecode-2.1.1/gecode/support/symbol.cc +0 -0
  194. data/ext/gecode-2.1.1/gecode/support.hh +0 -0
  195. data/ext/gecode-2.1.1/install-sh +0 -0
  196. data/ext/gecode-2.1.1/misc/debian/rules +0 -0
  197. data/ext/gecode-2.1.1/misc/doxygen/back.png +0 -0
  198. data/ext/gecode-2.1.1/misc/doxygen/gecode-logo-100.png +0 -0
  199. data/ext/gecode-2.1.1/misc/genchangelog.perl +0 -0
  200. data/ext/gecode-2.1.1/misc/genlicense.perl +0 -0
  201. data/ext/gecode-2.1.1/misc/genstatistics.perl +0 -0
  202. data/ext/gecode-2.1.1/misc/genvariables.perl +0 -0
  203. data/ext/gecode-2.1.1/misc/getrevision.perl +0 -0
  204. data/ext/gecode-2.1.1/misc/makedepend.perl +0 -0
  205. data/ext/gecode-2.1.1/misc/svn-ignore.txt +0 -0
  206. data/ext/gecode-2.1.1/variables.vsl +0 -0
  207. data/lib/gecoder/bindings/bindings.rb +16 -0
  208. data/lib/gecoder/bindings.rb +42 -0
  209. data/lib/gecoder/interface/branch.rb +16 -9
  210. data/lib/gecoder/interface/constraints/bool/boolean.rb +205 -213
  211. data/lib/gecoder/interface/constraints/bool/channel.rb +4 -5
  212. data/lib/gecoder/interface/constraints/bool/linear.rb +192 -21
  213. data/lib/gecoder/interface/constraints/bool_enum/channel.rb +43 -39
  214. data/lib/gecoder/interface/constraints/bool_enum/extensional.rb +43 -49
  215. data/lib/gecoder/interface/constraints/bool_enum/relation.rb +38 -71
  216. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +73 -22
  217. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +140 -61
  218. data/lib/gecoder/interface/constraints/extensional_regexp.rb +4 -4
  219. data/lib/gecoder/interface/constraints/fixnum_enum/element.rb +63 -0
  220. data/lib/gecoder/interface/constraints/fixnum_enum/operation.rb +65 -0
  221. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +42 -0
  222. data/lib/gecoder/interface/constraints/int/arithmetic.rb +131 -130
  223. data/lib/gecoder/interface/constraints/int/channel.rb +21 -31
  224. data/lib/gecoder/interface/constraints/int/domain.rb +45 -42
  225. data/lib/gecoder/interface/constraints/int/linear.rb +85 -239
  226. data/lib/gecoder/interface/constraints/int/relation.rb +141 -0
  227. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +55 -64
  228. data/lib/gecoder/interface/constraints/int_enum/channel.rb +35 -37
  229. data/lib/gecoder/interface/constraints/int_enum/count.rb +53 -78
  230. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +36 -46
  231. data/lib/gecoder/interface/constraints/int_enum/element.rb +39 -57
  232. data/lib/gecoder/interface/constraints/int_enum/equality.rb +15 -19
  233. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +65 -72
  234. data/lib/gecoder/interface/constraints/int_enum/sort.rb +42 -45
  235. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +79 -22
  236. data/lib/gecoder/interface/constraints/int_var_constraints.rb +215 -44
  237. data/lib/gecoder/interface/constraints/reifiable_constraints.rb +14 -14
  238. data/lib/gecoder/interface/constraints/selected_set/select.rb +120 -0
  239. data/lib/gecoder/interface/constraints/selected_set_constraints.rb +75 -0
  240. data/lib/gecoder/interface/constraints/set/cardinality.rb +43 -53
  241. data/lib/gecoder/interface/constraints/set/channel.rb +26 -29
  242. data/lib/gecoder/interface/constraints/set/connection.rb +89 -152
  243. data/lib/gecoder/interface/constraints/set/domain.rb +112 -65
  244. data/lib/gecoder/interface/constraints/set/include.rb +36 -0
  245. data/lib/gecoder/interface/constraints/set/operation.rb +96 -110
  246. data/lib/gecoder/interface/constraints/set/relation.rb +114 -137
  247. data/lib/gecoder/interface/constraints/set_elements/relation.rb +116 -0
  248. data/lib/gecoder/interface/constraints/set_elements_constraints.rb +97 -0
  249. data/lib/gecoder/interface/constraints/set_enum/channel.rb +23 -27
  250. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +18 -19
  251. data/lib/gecoder/interface/constraints/set_enum/operation.rb +62 -53
  252. data/lib/gecoder/interface/constraints/set_enum/select.rb +79 -0
  253. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +73 -23
  254. data/lib/gecoder/interface/constraints/set_var_constraints.rb +222 -57
  255. data/lib/gecoder/interface/constraints.rb +410 -451
  256. data/lib/gecoder/interface/enum_matrix.rb +4 -4
  257. data/lib/gecoder/interface/enum_wrapper.rb +71 -22
  258. data/lib/gecoder/interface/model.rb +167 -12
  259. data/lib/gecoder/interface/model_sugar.rb +84 -0
  260. data/lib/gecoder/interface/search.rb +30 -18
  261. data/lib/gecoder/interface/variables.rb +103 -33
  262. data/lib/gecoder/interface.rb +2 -1
  263. data/lib/gecoder/version.rb +2 -2
  264. data/specs/bool_var.rb +19 -12
  265. data/specs/constraints/{boolean.rb → bool/boolean.rb} +103 -28
  266. data/specs/constraints/bool/boolean_properties.rb +51 -0
  267. data/specs/constraints/bool/linear.rb +213 -0
  268. data/specs/constraints/bool_enum/bool_enum_relation.rb +117 -0
  269. data/specs/constraints/bool_enum/channel.rb +102 -0
  270. data/specs/constraints/{extensional.rb → bool_enum/extensional.rb} +32 -101
  271. data/specs/constraints/constraint_helper.rb +149 -179
  272. data/specs/constraints/constraint_receivers.rb +103 -0
  273. data/specs/constraints/constraints.rb +6 -63
  274. data/specs/constraints/fixnum_enum/element.rb +58 -0
  275. data/specs/constraints/fixnum_enum/operation.rb +67 -0
  276. data/specs/constraints/int/arithmetic.rb +149 -0
  277. data/specs/constraints/int/channel.rb +101 -0
  278. data/specs/constraints/int/domain.rb +106 -0
  279. data/specs/constraints/int/linear.rb +183 -0
  280. data/specs/constraints/int/linear_properties.rb +97 -0
  281. data/specs/constraints/int/relation.rb +84 -0
  282. data/specs/constraints/int_enum/arithmetic.rb +72 -0
  283. data/specs/constraints/int_enum/channel.rb +57 -0
  284. data/specs/constraints/int_enum/count.rb +72 -0
  285. data/specs/constraints/int_enum/distinct.rb +80 -0
  286. data/specs/constraints/int_enum/element.rb +61 -0
  287. data/specs/constraints/int_enum/equality.rb +29 -0
  288. data/specs/constraints/int_enum/extensional.rb +224 -0
  289. data/specs/constraints/int_enum/sort.rb +167 -0
  290. data/specs/constraints/operands.rb +264 -0
  291. data/specs/constraints/property_helper.rb +443 -0
  292. data/specs/constraints/reification_sugar.rb +4 -5
  293. data/specs/constraints/selected_set/select.rb +56 -0
  294. data/specs/constraints/selected_set/select_properties.rb +157 -0
  295. data/specs/constraints/set/cardinality.rb +58 -0
  296. data/specs/constraints/set/cardinality_properties.rb +46 -0
  297. data/specs/constraints/set/channel.rb +77 -0
  298. data/specs/constraints/set/connection.rb +176 -0
  299. data/specs/constraints/set/domain.rb +197 -0
  300. data/specs/constraints/set/include.rb +36 -0
  301. data/specs/constraints/set/operation.rb +132 -0
  302. data/specs/constraints/set/relation.rb +117 -0
  303. data/specs/constraints/set_elements/relation.rb +84 -0
  304. data/specs/constraints/set_enum/channel.rb +80 -0
  305. data/specs/constraints/set_enum/distinct.rb +59 -0
  306. data/specs/constraints/set_enum/operation.rb +111 -0
  307. data/specs/constraints/set_enum/select.rb +73 -0
  308. data/specs/enum_wrapper.rb +53 -3
  309. data/specs/int_var.rb +44 -25
  310. data/specs/model.rb +58 -1
  311. data/specs/model_sugar.rb +30 -0
  312. data/specs/search.rb +24 -5
  313. data/specs/selected_set.rb +39 -0
  314. data/specs/set_elements.rb +34 -0
  315. data/specs/set_var.rb +22 -8
  316. data/specs/spec_helper.rb +206 -6
  317. data/tasks/distribution.rake +22 -7
  318. data/tasks/svn.rake +3 -1
  319. metadata +219 -135
  320. data/lib/gecoder/interface/constraints/set_enum/selection.rb +0 -217
  321. data/specs/constraints/arithmetic.rb +0 -351
  322. data/specs/constraints/bool_enum_relation.rb +0 -160
  323. data/specs/constraints/cardinality.rb +0 -157
  324. data/specs/constraints/channel.rb +0 -454
  325. data/specs/constraints/connection.rb +0 -369
  326. data/specs/constraints/count.rb +0 -146
  327. data/specs/constraints/distinct.rb +0 -164
  328. data/specs/constraints/element.rb +0 -108
  329. data/specs/constraints/equality.rb +0 -31
  330. data/specs/constraints/int_domain.rb +0 -70
  331. data/specs/constraints/int_relation.rb +0 -82
  332. data/specs/constraints/linear.rb +0 -340
  333. data/specs/constraints/selection.rb +0 -292
  334. data/specs/constraints/set_domain.rb +0 -185
  335. data/specs/constraints/set_operation.rb +0 -285
  336. data/specs/constraints/set_relation.rb +0 -197
  337. data/specs/constraints/sort.rb +0 -179
@@ -1,454 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require File.dirname(__FILE__) + '/constraint_helper'
3
-
4
- class ChannelSampleProblem < Gecode::Model
5
- attr :elements
6
- attr :positions
7
- attr :sets
8
-
9
- def initialize
10
- @elements = int_var_array(4, 0..3)
11
- @elements.must_be.distinct
12
- @positions = int_var_array(4, 0..3)
13
- @positions.must_be.distinct
14
- @sets = set_var_array(4, [], 0..3)
15
- branch_on @positions
16
- end
17
- end
18
-
19
- class BoolChannelSampleProblem < Gecode::Model
20
- attr :bool_enum
21
- attr :bool
22
- attr :int
23
-
24
- def initialize
25
- @bool_enum = bool_var_array(4)
26
- @int = int_var(0..3)
27
- @bool = bool_var
28
-
29
- branch_on @int
30
- end
31
- end
32
-
33
- class SetChannelSampleProblem < Gecode::Model
34
- attr :bool_enum
35
- attr :set
36
-
37
- def initialize
38
- @bool_enum = bool_var_array(4)
39
- @set = set_var([], 0..3)
40
-
41
- branch_on @bool_enum
42
- end
43
- end
44
-
45
-
46
- describe Gecode::Constraints::IntEnum::Channel, ' (two int enums)' do
47
- before do
48
- @model = ChannelSampleProblem.new
49
- @positions = @model.positions
50
- @elements = @model.elements
51
- @invoke_options = lambda do |hash|
52
- @positions.must.channel @elements, hash
53
- @model.solve!
54
- end
55
- @expect_options = option_expectation do |strength, kind, reif_var|
56
- Gecode::Raw.should_receive(:channel).once.with(
57
- an_instance_of(Gecode::Raw::Space),
58
- an_instance_of(Gecode::Raw::IntVarArray),
59
- an_instance_of(Gecode::Raw::IntVarArray), strength, kind)
60
- end
61
- end
62
-
63
- it 'should translate into a channel constraint' do
64
- Gecode::Raw.should_receive(:channel).once.with(
65
- an_instance_of(Gecode::Raw::Space),
66
- anything, anything, Gecode::Raw::ICL_DEF, Gecode::Raw::PK_DEF)
67
- @invoke_options.call({})
68
- end
69
-
70
- it 'should constrain variables to be channelled' do
71
- @elements.must.channel @positions
72
- @model.solve!
73
- elements = @model.elements.values
74
- positions = @model.elements.values
75
- elements.each_with_index do |element, i|
76
- element.should equal(positions.index(i))
77
- end
78
- end
79
-
80
- it 'should not allow negation' do
81
- lambda{ @elements.must_not.channel @positions }.should raise_error(
82
- Gecode::MissingConstraintError)
83
- end
84
-
85
- it 'should raise error for unsupported right hand sides' do
86
- lambda{ @elements.must.channel 'hello' }.should raise_error(TypeError)
87
- end
88
-
89
- it_should_behave_like 'non-reifiable constraint'
90
- end
91
-
92
- describe Gecode::Constraints::SetEnum::Channel::IntChannelConstraint, ' (channel with set as right hand side)' do
93
- before do
94
- @model = ChannelSampleProblem.new
95
- @positions = @model.positions
96
- @sets = @model.sets
97
-
98
- @invoke_options = lambda do |hash|
99
- @positions.must.channel @sets, hash
100
- @model.solve!
101
- end
102
- @expect_options = option_expectation do |strength, kind, reif_var|
103
- Gecode::Raw.should_receive(:channel).once.with(
104
- an_instance_of(Gecode::Raw::Space),
105
- an_instance_of(Gecode::Raw::IntVarArray),
106
- an_instance_of(Gecode::Raw::SetVarArray))
107
- end
108
- end
109
-
110
- it 'should translate into a channel constraint' do
111
- @expect_options.call({})
112
- @positions.must.channel @sets
113
- @model.solve!
114
- end
115
-
116
- it 'should constrain variables to be channelled' do
117
- @positions.must.channel @sets
118
- @model.solve!
119
- sets = @model.sets
120
- positions = @model.positions.values
121
- positions.each_with_index do |position, i|
122
- sets[position].value.should include(i)
123
- end
124
- end
125
-
126
- it_should_behave_like 'non-reifiable set constraint'
127
- end
128
-
129
- describe Gecode::Constraints::SetEnum::Channel::IntChannelConstraint, ' (channel with set as left hand side)' do
130
- before do
131
- @model = ChannelSampleProblem.new
132
- @positions = @model.positions
133
- @sets = @model.sets
134
-
135
- @invoke_options = lambda do |hash|
136
- @sets.must.channel @positions, hash
137
- @model.solve!
138
- end
139
- @expect_options = option_expectation do |strength, kind, reif_var|
140
- Gecode::Raw.should_receive(:channel).once.with(
141
- an_instance_of(Gecode::Raw::Space),
142
- an_instance_of(Gecode::Raw::IntVarArray),
143
- an_instance_of(Gecode::Raw::SetVarArray))
144
- end
145
- end
146
-
147
- it 'should translate into a channel constraint' do
148
- @expect_options.call({})
149
- @sets.must.channel @positions
150
- @model.solve!
151
- end
152
-
153
- it 'should not allow negation' do
154
- lambda{ @sets.must_not.channel @positions }.should raise_error(
155
- Gecode::MissingConstraintError)
156
- end
157
-
158
- it 'should raise error for unsupported right hand sides' do
159
- lambda{ @sets.must.channel 'hello' }.should raise_error(TypeError)
160
- end
161
-
162
- it_should_behave_like 'non-reifiable set constraint'
163
- end
164
-
165
- # Requires @model, @bool and @int. Also requires @place_constraint which is a
166
- # method that takes five variables: a boolean variable, an integer variable,
167
- # the name of the equality method to use, whether or not the constraint should
168
- # be negated and a hash of options, and places the channel constraint on them.
169
- describe 'channel constraint between one int and one bool variable', :shared => true do
170
- before do
171
- @invoke_options = lambda do |hash|
172
- @place_constraint.call(@bool, @int, :==, false, hash)
173
- @model.solve!
174
- end
175
- @expect_options = option_expectation do |strength, kind, reif_var|
176
- Gecode::Raw.should_receive(:channel).once.with(
177
- an_instance_of(Gecode::Raw::Space),
178
- an_instance_of(Gecode::Raw::IntVar),
179
- an_instance_of(Gecode::Raw::BoolVar),
180
- strength, kind)
181
- end
182
- end
183
-
184
- ([:==] + Gecode::Constraints::Util::COMPARISON_ALIASES[:==]).each do |ali|
185
- it "should translate #{ali} into a channel constraint" do
186
- @expect_options.call({})
187
- @place_constraint.call(@bool, @int, ali, false, {})
188
- @model.solve!
189
- end
190
- end
191
-
192
- it 'should constrain the int variable to be 1 when the boolean variable is true' do
193
- @bool.must_be.true
194
- @place_constraint.call(@bool, @int, :==, false, {})
195
- @model.solve!
196
- @int.value.should == 1
197
- end
198
-
199
- it 'should constrain the int variable to be 0 when the boolean variable is false' do
200
- @bool.must_be.false
201
- @place_constraint.call(@bool, @int, :==, false, {})
202
- @model.solve!
203
- @int.value.should == 0
204
- end
205
-
206
- it 'should not allow negation' do
207
- lambda do
208
- @place_constraint.call(@bool, @int, :==, true, {})
209
- end.should raise_error(Gecode::MissingConstraintError)
210
- end
211
-
212
- it_should_behave_like 'non-reifiable constraint'
213
- end
214
-
215
- describe Gecode::Constraints::Int::Channel, ' (one int and one bool variable)' do
216
- before do
217
- @model = BoolChannelSampleProblem.new
218
- @bool = @model.bool_var
219
- @int = @model.int_var
220
-
221
- @place_constraint = lambda do |bool, int, equals_method_name, negate, options|
222
- if negate
223
- int.must_not.method(equals_method_name).call(bool, options)
224
- else
225
- int.must.method(equals_method_name).call(bool, options)
226
- end
227
- end
228
- end
229
-
230
- it 'should not shadow linear boolean constraints' do
231
- lambda do
232
- (@bool + @bool).must == @bool
233
- @model.solve!
234
- end.should_not raise_error
235
- end
236
-
237
- it 'should raise error for unsupported right hand sides' do
238
- lambda{ @int.must == 'hello' }.should raise_error(TypeError)
239
- end
240
-
241
- it_should_behave_like 'channel constraint between one int and one bool variable'
242
- end
243
-
244
- describe Gecode::Constraints::Int::Channel, ' (one bool and one int variable)' do
245
- before do
246
- @model = BoolChannelSampleProblem.new
247
- @bool = @model.bool_var
248
- @int = @model.int_var
249
-
250
- @place_constraint = lambda do |bool, int, equals_method_name, negate, options|
251
- if negate
252
- bool.must_not.method(equals_method_name).call(int, options)
253
- else
254
- bool.must.method(equals_method_name).call(int, options)
255
- end
256
- end
257
- end
258
-
259
- it 'should not shadow linear boolean constraints' do
260
- lambda do
261
- @bool.must == @bool + @bool
262
- @model.solve!
263
- end.should_not raise_error
264
- end
265
-
266
- it 'should raise error for unsupported right hand sides' do
267
- lambda{ @bool.must == 'hello' }.should raise_error(TypeError)
268
- end
269
-
270
- it_should_behave_like 'channel constraint between one int and one bool variable'
271
- end
272
-
273
- # Requires @model, @bool_enum and @int. Also requires @place_constraint which
274
- # is a method that takes four variables: a boolean enum, an integer variable,
275
- # whether or not the constraint should be negated and a hash of options, and
276
- # places the channel constraint on them.
277
- describe 'channel constraint between bool enum and int variable', :shared => true do
278
- before do
279
- @invoke_options = lambda do |hash|
280
- @place_constraint.call(@bools, @int, false, hash)
281
- @model.solve!
282
- end
283
- @expect_options = option_expectation do |strength, kind, reif_var|
284
- Gecode::Raw.should_receive(:channel).once.with(
285
- an_instance_of(Gecode::Raw::Space),
286
- an_instance_of(Gecode::Raw::BoolVarArray),
287
- an_instance_of(Gecode::Raw::IntVar), 0,
288
- strength, kind)
289
- end
290
- end
291
-
292
- it 'should channel the bool enum with the integer variable' do
293
- @int.must > 2
294
- @place_constraint.call(@bools, @int, false, {})
295
- @model.solve!.should_not be_nil
296
- int_val = @int.value
297
- @bools.values.each_with_index do |bool, index|
298
- bool.should == (index == int_val)
299
- end
300
- end
301
-
302
- it 'should take the offset into account when channeling' do
303
- @int.must > 2
304
- offset = 1
305
- @place_constraint.call(@bools, @int, false, :offset => offset)
306
- @model.solve!.should_not be_nil
307
- int_val = @int.value
308
- @bools.values.each_with_index do |bool, index|
309
- bool.should == (index + offset == int_val)
310
- end
311
- end
312
-
313
- it 'should not allow negation' do
314
- lambda do
315
- @place_constraint.call(@bools, @int, true, {})
316
- end.should raise_error(Gecode::MissingConstraintError)
317
- end
318
-
319
- it_should_behave_like 'non-reifiable constraint'
320
- end
321
-
322
- describe Gecode::Constraints::BoolEnum::Channel, ' (bool enum as lhs with int variable)' do
323
- before do
324
- @model = BoolChannelSampleProblem.new
325
- @bools = @model.bool_enum
326
- @int = @model.int
327
-
328
- @place_constraint = lambda do |bools, int, negate, options|
329
- unless negate
330
- bools.must.channel(int, options)
331
- else
332
- bools.must_not.channel(int, options)
333
- end
334
- end
335
- end
336
-
337
- it 'should raise error if an integer variable is not given as right hand side' do
338
- lambda do
339
- @bools.must.channel 'hello'
340
- end.should raise_error(TypeError)
341
- end
342
-
343
- it_should_behave_like 'channel constraint between bool enum and int variable'
344
- end
345
-
346
-
347
- describe Gecode::Constraints::BoolEnum::Channel, ' (int variable as lhs with bool enum)' do
348
- before do
349
- @model = BoolChannelSampleProblem.new
350
- @bools = @model.bool_enum
351
- @int = @model.int
352
-
353
- @place_constraint = lambda do |bools, int, negate, options|
354
- unless negate
355
- int.must.channel(bools, options)
356
- else
357
- int.must_not.channel(bools, options)
358
- end
359
- end
360
- end
361
-
362
- it 'should raise error if a boolean enum is not given as right hand side' do
363
- lambda do
364
- @int.must.channel 'hello'
365
- end.should raise_error(TypeError)
366
- end
367
-
368
- it_should_behave_like 'channel constraint between bool enum and int variable'
369
- end
370
-
371
- # Requires @model, @bool_enum and @set. Also requires @place_constraint which
372
- # is a method that takes four variables: a boolean enum, a set variable,
373
- # whether or not the constraint should be negated and a hash of options, and
374
- # places the channel constraint on them.
375
- describe 'channel constraint between set variable and bool enum', :shared => true do
376
- before do
377
- @invoke_options = lambda do |hash|
378
- @place_constraint.call(@bools, @set, false, hash)
379
- @model.solve!
380
- end
381
- @expect_options = option_expectation do |strength, kind, reif_var|
382
- Gecode::Raw.should_receive(:channel).once.with(
383
- an_instance_of(Gecode::Raw::Space),
384
- an_instance_of(Gecode::Raw::BoolVarArray),
385
- an_instance_of(Gecode::Raw::SetVar))
386
- end
387
- end
388
-
389
- it 'should channel the bool enum with the set variable' do
390
- @set.must_be.superset_of [0, 2]
391
- @place_constraint.call(@bools, @set, false, {})
392
- @model.solve!.should_not be_nil
393
- set_values = @set.value
394
- @bools.values.each_with_index do |bool, index|
395
- bool.should == set_values.include?(index)
396
- end
397
- end
398
-
399
- it 'should not allow negation' do
400
- lambda do
401
- @place_constraint.call(@bools, @set, true, {})
402
- end.should raise_error(Gecode::MissingConstraintError)
403
- end
404
-
405
- it_should_behave_like 'non-reifiable set constraint'
406
- end
407
-
408
- describe Gecode::Constraints::Set::Channel, ' (set variable as lhs with bool enum)' do
409
- before do
410
- @model = SetChannelSampleProblem.new
411
- @bools = @model.bool_enum
412
- @set = @model.set
413
-
414
- @place_constraint = lambda do |bools, set, negate, options|
415
- unless negate
416
- set.must.channel(bools, options)
417
- else
418
- set.must_not.channel(bools, options)
419
- end
420
- end
421
- end
422
-
423
- it 'should raise error if a boolean enum is not given as right hand side' do
424
- lambda do
425
- @set.must.channel 'hello'
426
- end.should raise_error(TypeError)
427
- end
428
-
429
- it_should_behave_like 'channel constraint between set variable and bool enum'
430
- end
431
-
432
- describe Gecode::Constraints::Set::Channel, ' (bool enum as lhs with set variable)' do
433
- before do
434
- @model = SetChannelSampleProblem.new
435
- @bools = @model.bool_enum
436
- @set = @model.set
437
-
438
- @place_constraint = lambda do |bools, set, negate, options|
439
- unless negate
440
- bools.must.channel(set, options)
441
- else
442
- bools.must_not.channel(set, options)
443
- end
444
- end
445
- end
446
-
447
- it 'should raise error if an integer variable is not given as right hand side' do
448
- lambda do
449
- @bools.must.channel 'hello'
450
- end.should raise_error(TypeError)
451
- end
452
-
453
- it_should_behave_like 'channel constraint between set variable and bool enum'
454
- end