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
@@ -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.to_int_var_array.should be_kind_of(Gecode::Raw::IntVarArray)
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.to_bool_var_array.should be_kind_of(Gecode::Raw::BoolVarArray)
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.to_set_var_array.should be_kind_of(Gecode::Raw::SetVarArray)
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::FreeIntVar, ' (with range domain of size > 1)' do
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::FreeIntVar, ' (defined with three-dot range)' do
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::FreeIntVar, ' (with non-range domain of size > 1)' do
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::FreeIntVar, ' (with a domain of size 1)' do
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::FreeIntVar, ' (assigned)' do
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::FreeIntVar, ' (not assigned)' do
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
- end
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 return nil when calling #solve!' do
209
- @model.solve!.should be_nil
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 return nil when calling #optimize!' do
213
- @model.optimize!{}.should be_nil
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__) + '/spec_helper'
1
+ require File.dirname(__FILE__) + '/constraints/property_helper'
2
2
 
3
- describe Gecode::FreeSetVar, '(not assigned)' do
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::FreeSetVar, '(assigned)' do
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