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,292 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require File.dirname(__FILE__) + '/constraint_helper'
3
-
4
- class SelectionSampleProblem < Gecode::Model
5
- attr :sets
6
- attr :set
7
- attr :target
8
- attr :index
9
-
10
- def initialize
11
- @sets = set_var_array(3, [], 0..20)
12
- @set = set_var([], 0...3)
13
- @target = set_var([], 0..20)
14
- @index = int_var(0...3)
15
- branch_on wrap_enum([@index])
16
- branch_on @sets
17
- end
18
- end
19
-
20
- # Requires everything that composite behaviour spec requires in addition to
21
- # @stub and @expect_constrain_equal .
22
- describe 'selection constraint', :shared => true do
23
- before do
24
- @expect = lambda do |index, relation, target, reif_var, negated|
25
- @model.allow_space_access do
26
- if target.respond_to? :bind
27
- expected_target = [an_instance_of(Gecode::Raw::SetVar)]
28
- relation_constraint = :rel
29
- else
30
- expected_target = expect_constant_set(target)
31
- relation_constraint = :dom
32
- end
33
- if reif_var.nil?
34
- if !negated and relation == Gecode::Raw::IRT_EQ and
35
- !target.kind_of? Enumerable
36
- @expect_constrain_equal.call
37
- Gecode::Raw.should_receive(:rel).exactly(0).times
38
- Gecode::Raw.should_receive(:dom).exactly(0).times
39
- else
40
- @expect_constrain_equal.call
41
- if relation_constraint == :dom
42
- # We can't seem to get any more specific than this with mocks.
43
- Gecode::Raw.should_receive(relation_constraint).at_most(:twice)
44
- else
45
- Gecode::Raw.should_receive(relation_constraint).once.with(
46
- an_instance_of(Gecode::Raw::Space),
47
- an_instance_of(Gecode::Raw::SetVar), relation, *expected_target)
48
- end
49
- end
50
- else
51
- @expect_constrain_equal.call
52
- if relation_constraint == :dom
53
- Gecode::Raw.should_receive(relation_constraint).at_least(:twice)
54
- else
55
- expected_target << an_instance_of(Gecode::Raw::BoolVar)
56
- Gecode::Raw.should_receive(relation_constraint).once.with(
57
- an_instance_of(Gecode::Raw::Space),
58
- an_instance_of(Gecode::Raw::SetVar), relation, *expected_target)
59
- end
60
- end
61
- end
62
- end
63
-
64
- # For composite spec.
65
- @invoke_relation = lambda do |relation, target, negated|
66
- if negated
67
- @stub.must_not.send(relation, target)
68
- else
69
- @stub.must.send(relation, target)
70
- end
71
- @model.solve!
72
- end
73
- @expect_relation = lambda do |relation, target, negated|
74
- @expect.call(@index, relation, target, nil, negated)
75
- end
76
-
77
- # For options spec.
78
- @invoke_options = lambda do |hash|
79
- @stub.must_be.subset_of(@target, hash)
80
- @model.solve!
81
- end
82
- @expect_options = option_expectation do |strength, kind, reif_var|
83
- @expect.call(17, Gecode::Raw::SRT_SUB, @target, reif_var, false)
84
- end
85
- end
86
-
87
- it 'should not disturb normal array access' do
88
- @sets[0].should be_kind_of(Gecode::FreeSetVar)
89
- end
90
-
91
- it_should_behave_like 'reifiable set constraint'
92
- it_should_behave_like 'composite set constraint'
93
- end
94
-
95
- describe Gecode::Constraints::SetEnum::Selection, ' (select)' do
96
- include GecodeR::Specs::SetHelper
97
-
98
- before do
99
- @model = SelectionSampleProblem.new
100
- @sets = @model.sets
101
- @target = @set = @model.target
102
- @index = @model.index
103
- @model.branch_on @model.wrap_enum([@set])
104
- @stub = @sets[@index]
105
-
106
- @expect_constrain_equal = lambda do
107
- Gecode::Raw.should_receive(:selectSet).once.with(
108
- an_instance_of(Gecode::Raw::Space),
109
- an_instance_of(Gecode::Raw::SetVarArray),
110
- an_instance_of(Gecode::Raw::IntVar),
111
- an_instance_of(Gecode::Raw::SetVar))
112
- end
113
- end
114
-
115
- it 'should constrain the specified element of an enum of sets' do
116
- @sets[@index].must_be.superset_of([5,7,9])
117
- @model.solve!
118
- @sets[@index.value].value.should include(5,7,9)
119
- end
120
-
121
- it_should_behave_like 'selection constraint'
122
- end
123
-
124
- describe Gecode::Constraints::SetEnum::Selection, ' (union)' do
125
- include GecodeR::Specs::SetHelper
126
-
127
- before do
128
- @model = SelectionSampleProblem.new
129
- @sets = @model.sets
130
- @set = @model.set
131
- @target = @model.target
132
- @model.branch_on @model.wrap_enum([@target, @set])
133
- @stub = @sets[@set].union
134
-
135
- @expect_constrain_equal = lambda do
136
- Gecode::Raw.should_receive(:selectUnion).once.with(
137
- an_instance_of(Gecode::Raw::Space),
138
- an_instance_of(Gecode::Raw::SetVarArray),
139
- an_instance_of(Gecode::Raw::SetVar),
140
- an_instance_of(Gecode::Raw::SetVar))
141
- end
142
- end
143
-
144
- it 'should constrain the selected union of an enum of sets' do
145
- @sets[@set].union.must_be.subset_of([5,7,9])
146
- @sets[@set].union.must_be.superset_of([5])
147
- @model.solve!
148
- union = @set.value.inject([]) do |union, i|
149
- union += @sets[i].value.to_a
150
- end.uniq
151
- union.should include(5)
152
- (union - [5,7,9]).should be_empty
153
- end
154
-
155
- it_should_behave_like 'selection constraint'
156
- end
157
-
158
- describe Gecode::Constraints::SetEnum::Selection, ' (intersection)' do
159
- include GecodeR::Specs::SetHelper
160
-
161
- before do
162
- @model = SelectionSampleProblem.new
163
- @sets = @model.sets
164
- @set = @model.set
165
- @target = @model.target
166
- @model.branch_on @model.wrap_enum([@target, @set])
167
- @stub = @sets[@set].intersection
168
-
169
- @expect_constrain_equal = lambda do
170
- Gecode::Raw.should_receive(:selectInter).once.with(
171
- an_instance_of(Gecode::Raw::Space),
172
- an_instance_of(Gecode::Raw::SetVarArray),
173
- an_instance_of(Gecode::Raw::SetVar),
174
- an_instance_of(Gecode::Raw::SetVar))
175
- end
176
- end
177
-
178
- it 'should constrain the selected intersection of an enum of sets' do
179
- @sets[@set].intersection.must_be.subset_of([5,7,9])
180
- @sets[@set].intersection.must_be.superset_of([5])
181
- @model.solve!
182
- intersection = @set.value.inject(nil) do |intersection, i|
183
- elements = @sets[i].value.to_a
184
- next elements if intersection.nil?
185
- intersection &= elements
186
- end.uniq
187
- intersection.should include(5)
188
- (intersection - [5,7,9]).should be_empty
189
- end
190
-
191
- it_should_behave_like 'selection constraint'
192
- end
193
-
194
- describe Gecode::Constraints::SetEnum::Selection, ' (intersection with universe)' do
195
- include GecodeR::Specs::SetHelper
196
-
197
- before do
198
- @model = SelectionSampleProblem.new
199
- @sets = @model.sets
200
- @set = @model.set
201
- @target = @model.target
202
- @model.branch_on @model.wrap_enum([@target, @set])
203
- @universe = [1,2]
204
- @stub = @sets[@set].intersection(:with => @universe)
205
-
206
- @expect_constrain_equal = lambda do
207
- Gecode::Raw.should_receive(:selectInterIn).once.with(
208
- an_instance_of(Gecode::Raw::Space),
209
- an_instance_of(Gecode::Raw::SetVarArray),
210
- an_instance_of(Gecode::Raw::SetVar),
211
- an_instance_of(Gecode::Raw::SetVar),
212
- an_instance_of(Gecode::Raw::IntSet))
213
- end
214
- end
215
-
216
- it 'should constrain the selected intersection of an enum of sets in a universe' do
217
- @sets[@set].intersection(:with => @universe).must_be.subset_of([2])
218
- @model.solve!
219
- intersection = @set.value.inject(@universe) do |intersection, i|
220
- intersection &= @sets[i].value.to_a
221
- end.uniq
222
- intersection.should include(2)
223
- (intersection - [1,2]).should be_empty
224
- end
225
-
226
- it 'should allow the universe to be specified as a range' do
227
- @sets[@set].intersection(:with => 1..2).must_be.subset_of([2])
228
- @model.solve!
229
- intersection = @set.value.inject(@universe) do |intersection, i|
230
- intersection &= @sets[i].value.to_a
231
- end.uniq
232
- intersection.should include(2)
233
- (intersection - [1,2]).should be_empty
234
- end
235
-
236
- it 'should raise error if unknown options are specified' do
237
- lambda do
238
- @sets[@set].intersection(:does_not_exist => nil).must_be.subset_of([2])
239
- end.should raise_error(ArgumentError)
240
- end
241
-
242
- it 'should raise error if the universe is of the wrong type' do
243
- lambda do
244
- @sets[@set].intersection(:with => 'foo').must_be.subset_of([2])
245
- end.should raise_error(TypeError)
246
- end
247
-
248
- it_should_behave_like 'selection constraint'
249
- end
250
-
251
- describe Gecode::Constraints::SetEnum::Selection, ' (disjoint)' do
252
- include GecodeR::Specs::SetHelper
253
-
254
- before do
255
- @model = SelectionSampleProblem.new
256
- @sets = @model.sets
257
- @set = @model.set
258
- @target = @model.target
259
- @model.branch_on @model.wrap_enum([@target, @set])
260
-
261
- @expect = lambda do |index|
262
- Gecode::Raw.should_receive(:selectDisjoint)
263
- end
264
-
265
- # For options spec.
266
- @invoke_options = lambda do |hash|
267
- @sets[@set].must_be.disjoint(hash)
268
- @model.solve!
269
- end
270
- @expect_options = option_expectation do |strength, kind, reif_var|
271
- @expect.call(@set)
272
- end
273
- end
274
-
275
- it 'should constrain the selected sets to be disjoint' do
276
- @sets[0].must_be.superset_of([7,8])
277
- @sets[1].must_be.superset_of([5,7,9])
278
- @sets[2].must_be.superset_of([6,8,10])
279
- @sets[@set].must_be.disjoint
280
- @set.size.must > 1
281
- @model.solve!.should_not be_nil
282
-
283
- @set.value.to_a.sort.should == [1,2]
284
- end
285
-
286
- it 'should not allow negation' do
287
- lambda{ @sets[@set].must_not_be.disjoint }.should raise_error(
288
- Gecode::MissingConstraintError)
289
- end
290
-
291
- it_should_behave_like 'non-reifiable set constraint'
292
- end
@@ -1,185 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require File.dirname(__FILE__) + '/constraint_helper'
3
-
4
- describe Gecode::Constraints::Set::Domain do
5
- include GecodeR::Specs::SetHelper
6
-
7
- before do
8
- @model = Gecode::Model.new
9
- @glb = [0]
10
- @lub = 0..3
11
- @set = @model.set_var(@glb, @lub)
12
- @range = 0..1
13
- @non_range = [0, 2]
14
- @singleton = 0
15
-
16
- @expect = lambda do |relation_type, rhs, reif_var, negated|
17
- @model.allow_space_access do
18
- if reif_var.nil? and !negated
19
- Gecode::Raw.should_receive(:dom).once.with(
20
- an_instance_of(Gecode::Raw::Space),
21
- an_instance_of(Gecode::Raw::SetVar), relation_type,
22
- *expect_constant_set(rhs))
23
- else
24
- params = [an_instance_of(Gecode::Raw::Space),
25
- an_instance_of(Gecode::Raw::SetVar), relation_type]
26
- params << expect_constant_set(rhs)
27
- params << an_instance_of(Gecode::Raw::BoolVar)
28
- Gecode::Raw.should_receive(:dom).once.with(*params.flatten)
29
- end
30
- end
31
- end
32
-
33
- # For options spec.
34
- @invoke_options = lambda do |hash|
35
- @set.must_be.superset_of(@non_range, hash)
36
- @model.solve!
37
- end
38
- @expect_options = option_expectation do |strength, kind, reif_var|
39
- @expect.call(Gecode::Raw::SRT_SUP, @non_range, reif_var, false)
40
- end
41
- end
42
-
43
- Gecode::Constraints::Util::SET_RELATION_TYPES.each_pair do |relation, type|
44
- next if relation == :==
45
-
46
- it "should translate #{relation} with constant range to domain constraint" do
47
- @expect.call(type, @range, nil, false)
48
- @set.must.send(relation, @range)
49
- @model.solve!
50
- end
51
-
52
- it "should translate #{relation} with constant non-range to domain constraint" do
53
- @expect.call(type, @non_range, nil, false)
54
- @set.must.send(relation, @non_range)
55
- @model.solve!
56
- end
57
-
58
- it "should translate #{relation} with constant singleton to domain constraint" do
59
- @expect.call(type, @singleton, nil, false)
60
- @set.must.send(relation, @singleton)
61
- @model.solve!
62
- end
63
-
64
- it "should translate negated #{relation} with constant range to domain constraint" do
65
- @expect.call(type, @range, nil, true)
66
- @set.must_not.send(relation, @range)
67
- @model.solve!
68
- end
69
-
70
- it "should translate negated #{relation} with constant non-range to domain constraint" do
71
- @expect.call(type, @non_range, nil, true)
72
- @set.must_not.send(relation, @non_range)
73
- @model.solve!
74
- end
75
-
76
- it "should translate negated #{relation} with constant singleton to domain constraint" do
77
- @expect.call(type, @singleton, nil, true)
78
- @set.must_not.send(relation, @singleton)
79
- @model.solve!
80
- end
81
- end
82
-
83
- it 'should raise error if the right hand side is not a constant set' do
84
- lambda do
85
- @set.must_be.superset_of('not a constant set')
86
- end.should raise_error(TypeError)
87
- end
88
-
89
- it_should_behave_like 'reifiable set constraint'
90
- end
91
-
92
- describe Gecode::Constraints::Set::Domain, ' (equality)' do
93
- include GecodeR::Specs::SetHelper
94
-
95
- before do
96
- @model = Gecode::Model.new
97
- @glb = [0]
98
- @lub = 0..3
99
- @set = @model.set_var(@glb, @lub)
100
- @range = 0..1
101
- @non_range = [0, 2]
102
- @singleton = 0
103
- @model.branch_on @model.wrap_enum([@set])
104
-
105
- @expect = lambda do |relation_type, rhs, reif_var|
106
- @model.allow_space_access do
107
- if reif_var.nil?
108
- Gecode::Raw.should_receive(:dom).once.with(
109
- an_instance_of(Gecode::Raw::Space),
110
- an_instance_of(Gecode::Raw::SetVar), relation_type,
111
- *expect_constant_set(rhs))
112
- else
113
- params = [an_instance_of(Gecode::Raw::Space),
114
- an_instance_of(Gecode::Raw::SetVar), relation_type]
115
- params << expect_constant_set(rhs)
116
- params << an_instance_of(Gecode::Raw::BoolVar)
117
- Gecode::Raw.should_receive(:dom).once.with(*params.flatten)
118
- end
119
- end
120
- end
121
-
122
- # For options spec.
123
- @invoke_options = lambda do |hash|
124
- @set.must_be.equal_to(@non_range, hash)
125
- @model.solve!
126
- end
127
- @expect_options = option_expectation do |strength, kind, reif_var|
128
- @expect.call(Gecode::Raw::SRT_EQ, @non_range, reif_var)
129
- end
130
- end
131
-
132
- it 'should translate equality with constant range to domain constraint' do
133
- @expect.call(Gecode::Raw::SRT_EQ, @range, nil)
134
- @set.must == @range
135
- @model.solve!
136
- end
137
-
138
- it 'should translate equality with constant non-range to domain constraint' do
139
- @expect.call(Gecode::Raw::SRT_EQ, @non_range, nil)
140
- @set.must == @non_range
141
- @model.solve!
142
- end
143
-
144
- it 'should translate equality with constant singleton to domain constraint' do
145
- @expect.call(Gecode::Raw::SRT_EQ, @singleton, nil)
146
- @set.must == @singleton
147
- @model.solve!
148
- end
149
-
150
- it 'should translate negated equality with constant range to domain constraint' do
151
- @expect.call(Gecode::Raw::SRT_NQ, @range, nil)
152
- @set.must_not == @range
153
- @model.solve!
154
- end
155
-
156
- it 'should translate negated equality with constant non-range to domain constraint' do
157
- @expect.call(Gecode::Raw::SRT_NQ, @non_range, nil)
158
- @set.must_not == @non_range
159
- @model.solve!
160
- end
161
-
162
- it 'should translate negated equality with constant singleton to domain constraint' do
163
- @expect.call(Gecode::Raw::SRT_NQ, @singleton, nil)
164
- @set.must_not == @singleton
165
- @model.solve!
166
- end
167
-
168
- it 'should constrain the domain with equality' do
169
- @set.must == @singleton
170
- @model.solve!
171
- @set.should be_assigned
172
- @set.value.should include(@singleton)
173
- @set.value.size.should == 1
174
- end
175
-
176
- it 'should constrain the domain with inequality' do
177
- @set.must_not == @singleton
178
- @model.solve!
179
- @set.should be_assigned
180
- @set.value.should include(@singleton)
181
- @set.value.size.should > 1
182
- end
183
-
184
- it_should_behave_like 'reifiable set constraint'
185
- end