gecoder-with-gecode 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. data/CHANGES +81 -0
  2. data/COPYING +17 -0
  3. data/LGPL-LICENSE +458 -0
  4. data/README +45 -0
  5. data/Rakefile +13 -0
  6. data/example/example_helper.rb +1 -0
  7. data/example/magic_sequence.rb +43 -0
  8. data/example/queens.rb +43 -0
  9. data/example/raw_bindings.rb +42 -0
  10. data/example/send_more_money.rb +43 -0
  11. data/example/send_most_money.rb +58 -0
  12. data/example/square_tiling.rb +84 -0
  13. data/example/sudoku-set.rb +110 -0
  14. data/example/sudoku.rb +61 -0
  15. data/ext/extconf.rb +29 -0
  16. data/ext/gecode-1.3.1/LICENSE +34 -0
  17. data/ext/gecode-1.3.1/Makefile.contribs +71 -0
  18. data/ext/gecode-1.3.1/Makefile.dep +3928 -0
  19. data/ext/gecode-1.3.1/Makefile.in +966 -0
  20. data/ext/gecode-1.3.1/changelog.in +1065 -0
  21. data/ext/gecode-1.3.1/configure +8590 -0
  22. data/ext/gecode-1.3.1/configure.ac +179 -0
  23. data/ext/gecode-1.3.1/configure.ac.in +175 -0
  24. data/ext/gecode-1.3.1/contribs/README +26 -0
  25. data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
  26. data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
  27. data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
  28. data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
  29. data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
  30. data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
  31. data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
  32. data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
  33. data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
  34. data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
  35. data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
  36. data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
  37. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
  38. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
  39. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
  40. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
  41. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
  42. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
  43. data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
  44. data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
  45. data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
  46. data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
  47. data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
  48. data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
  49. data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
  50. data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
  51. data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
  52. data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
  53. data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
  54. data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
  55. data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
  56. data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
  57. data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
  58. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
  59. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
  60. data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
  61. data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
  62. data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
  63. data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
  64. data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
  65. data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
  66. data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
  67. data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
  68. data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
  69. data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
  70. data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
  71. data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
  72. data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
  73. data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
  74. data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
  75. data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
  76. data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
  77. data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
  78. data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
  79. data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
  80. data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
  81. data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
  82. data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
  83. data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
  84. data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
  85. data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
  86. data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
  87. data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
  88. data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
  89. data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
  90. data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
  91. data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
  92. data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
  93. data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
  94. data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
  95. data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
  96. data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
  97. data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
  98. data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
  99. data/ext/gecode-1.3.1/examples/cars.cc +165 -0
  100. data/ext/gecode-1.3.1/examples/crew.cc +220 -0
  101. data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
  102. data/ext/gecode-1.3.1/examples/donald.cc +93 -0
  103. data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
  104. data/ext/gecode-1.3.1/examples/golf.cc +242 -0
  105. data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
  106. data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
  107. data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
  108. data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
  109. data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
  110. data/ext/gecode-1.3.1/examples/knights.cc +146 -0
  111. data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
  112. data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
  113. data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
  114. data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
  115. data/ext/gecode-1.3.1/examples/money.cc +92 -0
  116. data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
  117. data/ext/gecode-1.3.1/examples/packing.cc +211 -0
  118. data/ext/gecode-1.3.1/examples/partition.cc +126 -0
  119. data/ext/gecode-1.3.1/examples/photo.cc +155 -0
  120. data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
  121. data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
  122. data/ext/gecode-1.3.1/examples/queens.cc +99 -0
  123. data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
  124. data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
  125. data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
  126. data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
  127. data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
  128. data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
  129. data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
  130. data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
  131. data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
  132. data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
  133. data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
  134. data/ext/gecode-1.3.1/examples/support.cc +160 -0
  135. data/ext/gecode-1.3.1/examples/support.hh +98 -0
  136. data/ext/gecode-1.3.1/examples/support.icc +187 -0
  137. data/ext/gecode-1.3.1/examples/timer.cc +47 -0
  138. data/ext/gecode-1.3.1/examples/timer.hh +72 -0
  139. data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
  140. data/ext/gecode-1.3.1/extconf.rb +8 -0
  141. data/ext/gecode-1.3.1/gecode.m4 +736 -0
  142. data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
  143. data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
  144. data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
  145. data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
  146. data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
  147. data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
  148. data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
  149. data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
  150. data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
  151. data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
  152. data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
  153. data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
  154. data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
  155. data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
  156. data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
  157. data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
  158. data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
  159. data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
  160. data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
  161. data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
  162. data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
  163. data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
  164. data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
  165. data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
  166. data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
  167. data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
  168. data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
  169. data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
  170. data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
  171. data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
  172. data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
  173. data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
  174. data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
  175. data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
  176. data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
  177. data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
  178. data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
  179. data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
  180. data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
  181. data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
  182. data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
  183. data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
  184. data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
  185. data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
  186. data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
  187. data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
  188. data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
  189. data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
  190. data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
  191. data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
  192. data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
  193. data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
  194. data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
  195. data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
  196. data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
  197. data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
  198. data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
  199. data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
  200. data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
  201. data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
  202. data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
  203. data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
  204. data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
  205. data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
  206. data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
  207. data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
  208. data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
  209. data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
  210. data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
  211. data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
  212. data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
  213. data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
  214. data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
  215. data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
  216. data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
  217. data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
  218. data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
  219. data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
  220. data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
  221. data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
  222. data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
  223. data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
  224. data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
  225. data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
  226. data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
  227. data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
  228. data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
  229. data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
  230. data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
  231. data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
  232. data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
  233. data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
  234. data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
  235. data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
  236. data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
  237. data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
  238. data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
  239. data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
  240. data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
  241. data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
  242. data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
  243. data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
  244. data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
  245. data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
  246. data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
  247. data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
  248. data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
  249. data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
  250. data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
  251. data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
  252. data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
  253. data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
  254. data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
  255. data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
  256. data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
  257. data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
  258. data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
  259. data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
  260. data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
  261. data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
  262. data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
  263. data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
  264. data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
  265. data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
  266. data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
  267. data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
  268. data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
  269. data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
  270. data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
  271. data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
  272. data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
  273. data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
  274. data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
  275. data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
  276. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
  277. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
  278. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
  279. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
  280. data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
  281. data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
  282. data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
  283. data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
  284. data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
  285. data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
  286. data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
  287. data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
  288. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
  289. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
  290. data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
  291. data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
  292. data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
  293. data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
  294. data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
  295. data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
  296. data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
  297. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
  298. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
  299. data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
  300. data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
  301. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
  302. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
  303. data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
  304. data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
  305. data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
  306. data/ext/gecode-1.3.1/gecode/search.hh +745 -0
  307. data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
  308. data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
  309. data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
  310. data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
  311. data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
  312. data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
  313. data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
  314. data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
  315. data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
  316. data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
  317. data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
  318. data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
  319. data/ext/gecode-1.3.1/gecode/set.hh +419 -0
  320. data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
  321. data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
  322. data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
  323. data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
  324. data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
  325. data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
  326. data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
  327. data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
  328. data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
  329. data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
  330. data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
  331. data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
  332. data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
  333. data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
  334. data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
  335. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
  336. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
  337. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
  338. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
  339. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
  340. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
  341. data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
  342. data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
  343. data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
  344. data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
  345. data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
  346. data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
  347. data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
  348. data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
  349. data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
  350. data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
  351. data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
  352. data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
  353. data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
  354. data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
  355. data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
  356. data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
  357. data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
  358. data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
  359. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
  360. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
  361. data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
  362. data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
  363. data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
  364. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
  365. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
  366. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
  367. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
  368. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
  369. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
  370. data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
  371. data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
  372. data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
  373. data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
  374. data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
  375. data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
  376. data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
  377. data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
  378. data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
  379. data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
  380. data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
  381. data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
  382. data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
  383. data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
  384. data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
  385. data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
  386. data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
  387. data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
  388. data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
  389. data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
  390. data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
  391. data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
  392. data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
  393. data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
  394. data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
  395. data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
  396. data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
  397. data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
  398. data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
  399. data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
  400. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
  401. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
  402. data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
  403. data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
  404. data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
  405. data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
  406. data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
  407. data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
  408. data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
  409. data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
  410. data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
  411. data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
  412. data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
  413. data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
  414. data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
  415. data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
  416. data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
  417. data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
  418. data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
  419. data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
  420. data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
  421. data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
  422. data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
  423. data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
  424. data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
  425. data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
  426. data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
  427. data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
  428. data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
  429. data/ext/gecode-1.3.1/install-sh +323 -0
  430. data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
  431. data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
  432. data/ext/gecode-1.3.1/misc/debian/control +11 -0
  433. data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
  434. data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
  435. data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
  436. data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
  437. data/ext/gecode-1.3.1/misc/debian/rules +81 -0
  438. data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
  439. data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
  440. data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
  441. data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
  442. data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
  443. data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
  444. data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
  445. data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
  446. data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
  447. data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
  448. data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
  449. data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
  450. data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
  451. data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
  452. data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
  453. data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
  454. data/ext/gecode-1.3.1/test/int.cc +497 -0
  455. data/ext/gecode-1.3.1/test/int.hh +119 -0
  456. data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
  457. data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
  458. data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
  459. data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
  460. data/ext/gecode-1.3.1/test/int/count.cc +264 -0
  461. data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
  462. data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
  463. data/ext/gecode-1.3.1/test/int/element.cc +132 -0
  464. data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
  465. data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
  466. data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
  467. data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
  468. data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
  469. data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
  470. data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
  471. data/ext/gecode-1.3.1/test/intset.cc +40 -0
  472. data/ext/gecode-1.3.1/test/log.cc +515 -0
  473. data/ext/gecode-1.3.1/test/log.hh +68 -0
  474. data/ext/gecode-1.3.1/test/set.cc +542 -0
  475. data/ext/gecode-1.3.1/test/set.hh +152 -0
  476. data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
  477. data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
  478. data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
  479. data/ext/gecode-1.3.1/test/set/int.cc +249 -0
  480. data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
  481. data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
  482. data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
  483. data/ext/gecode-1.3.1/test/set/select.cc +108 -0
  484. data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
  485. data/ext/gecode-1.3.1/test/stress.cc +93 -0
  486. data/ext/gecode-1.3.1/test/stress.hh +74 -0
  487. data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
  488. data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
  489. data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
  490. data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
  491. data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
  492. data/ext/gecode-1.3.1/test/test.cc +215 -0
  493. data/ext/gecode-1.3.1/test/test.hh +107 -0
  494. data/ext/missing.cpp +328 -0
  495. data/ext/missing.h +120 -0
  496. data/ext/vararray.cpp +330 -0
  497. data/ext/vararray.h +149 -0
  498. data/lib/gecoder.rb +5 -0
  499. data/lib/gecoder/bindings.rb +34 -0
  500. data/lib/gecoder/bindings/bindings.rb +2209 -0
  501. data/lib/gecoder/interface.rb +8 -0
  502. data/lib/gecoder/interface/binding_changes.rb +313 -0
  503. data/lib/gecoder/interface/branch.rb +152 -0
  504. data/lib/gecoder/interface/constraints.rb +397 -0
  505. data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
  506. data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
  507. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
  508. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
  509. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
  510. data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
  511. data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
  512. data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
  513. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
  514. data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
  515. data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
  516. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
  517. data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
  518. data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
  519. data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
  520. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
  521. data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
  522. data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
  523. data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
  524. data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
  525. data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
  526. data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
  527. data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
  528. data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
  529. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
  530. data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
  531. data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
  532. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
  533. data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
  534. data/lib/gecoder/interface/enum_matrix.rb +64 -0
  535. data/lib/gecoder/interface/enum_wrapper.rb +153 -0
  536. data/lib/gecoder/interface/model.rb +251 -0
  537. data/lib/gecoder/interface/search.rb +123 -0
  538. data/lib/gecoder/interface/variables.rb +254 -0
  539. data/lib/gecoder/version.rb +4 -0
  540. data/specs/binding_changes.rb +76 -0
  541. data/specs/bool_var.rb +74 -0
  542. data/specs/branch.rb +170 -0
  543. data/specs/constraints/arithmetic.rb +266 -0
  544. data/specs/constraints/bool_enum.rb +140 -0
  545. data/specs/constraints/boolean.rb +232 -0
  546. data/specs/constraints/cardinality.rb +154 -0
  547. data/specs/constraints/channel.rb +126 -0
  548. data/specs/constraints/connection.rb +373 -0
  549. data/specs/constraints/constraint_helper.rb +180 -0
  550. data/specs/constraints/constraints.rb +74 -0
  551. data/specs/constraints/count.rb +139 -0
  552. data/specs/constraints/distinct.rb +218 -0
  553. data/specs/constraints/element.rb +106 -0
  554. data/specs/constraints/equality.rb +31 -0
  555. data/specs/constraints/int_domain.rb +69 -0
  556. data/specs/constraints/int_relation.rb +78 -0
  557. data/specs/constraints/linear.rb +332 -0
  558. data/specs/constraints/reification_sugar.rb +96 -0
  559. data/specs/constraints/selection.rb +292 -0
  560. data/specs/constraints/set_domain.rb +181 -0
  561. data/specs/constraints/set_operation.rb +285 -0
  562. data/specs/constraints/set_relation.rb +201 -0
  563. data/specs/constraints/sort.rb +175 -0
  564. data/specs/enum_matrix.rb +43 -0
  565. data/specs/enum_wrapper.rb +122 -0
  566. data/specs/int_var.rb +144 -0
  567. data/specs/logging.rb +24 -0
  568. data/specs/model.rb +190 -0
  569. data/specs/search.rb +246 -0
  570. data/specs/set_var.rb +68 -0
  571. data/specs/spec_helper.rb +93 -0
  572. data/tasks/all_tasks.rb +1 -0
  573. data/tasks/distribution.rake +129 -0
  574. data/tasks/rcov.rake +17 -0
  575. data/tasks/specs.rake +15 -0
  576. data/tasks/svn.rake +11 -0
  577. data/tasks/website.rake +51 -0
  578. data/vendor/rust/README +28 -0
  579. data/vendor/rust/bin/cxxgenerator.rb +93 -0
  580. data/vendor/rust/include/rust_checks.hh +115 -0
  581. data/vendor/rust/include/rust_conversions.hh +102 -0
  582. data/vendor/rust/rust.rb +67 -0
  583. data/vendor/rust/rust/attribute.rb +51 -0
  584. data/vendor/rust/rust/bindings.rb +172 -0
  585. data/vendor/rust/rust/class.rb +339 -0
  586. data/vendor/rust/rust/constants.rb +48 -0
  587. data/vendor/rust/rust/container.rb +110 -0
  588. data/vendor/rust/rust/cppifaceparser.rb +129 -0
  589. data/vendor/rust/rust/cwrapper.rb +72 -0
  590. data/vendor/rust/rust/cxxclass.rb +98 -0
  591. data/vendor/rust/rust/element.rb +81 -0
  592. data/vendor/rust/rust/enum.rb +63 -0
  593. data/vendor/rust/rust/function.rb +407 -0
  594. data/vendor/rust/rust/namespace.rb +61 -0
  595. data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
  596. data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
  597. data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
  598. data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
  599. data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
  600. data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
  601. data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
  602. data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
  603. data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
  604. data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
  605. data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
  606. data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
  607. data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
  608. data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
  609. data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
  610. data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
  611. data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
  612. data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
  613. data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
  614. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
  615. data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
  616. data/vendor/rust/rust/type.rb +98 -0
  617. data/vendor/rust/test/Makefile +4 -0
  618. data/vendor/rust/test/constants.rb +36 -0
  619. data/vendor/rust/test/cppclass.cc +45 -0
  620. data/vendor/rust/test/cppclass.hh +67 -0
  621. data/vendor/rust/test/cppclass.rb +59 -0
  622. data/vendor/rust/test/cwrapper.c +74 -0
  623. data/vendor/rust/test/cwrapper.h +41 -0
  624. data/vendor/rust/test/cwrapper.rb +56 -0
  625. data/vendor/rust/test/dummyclass.hh +31 -0
  626. data/vendor/rust/test/lib/extension-test.rb +98 -0
  627. data/vendor/rust/test/operators.cc +41 -0
  628. data/vendor/rust/test/operators.hh +39 -0
  629. data/vendor/rust/test/operators.rb +39 -0
  630. data/vendor/rust/test/test-constants.rb +43 -0
  631. data/vendor/rust/test/test-cppclass.rb +82 -0
  632. data/vendor/rust/test/test-cwrapper.rb +80 -0
  633. data/vendor/rust/test/test-operators.rb +42 -0
  634. metadata +826 -0
@@ -0,0 +1,180 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ # This requires that the constraint spec has instance variables @invoke_options
4
+ # and @expect_options .
5
+ describe 'constraint with strength option', :shared => true do
6
+ { :default => Gecode::Raw::ICL_DEF,
7
+ :value => Gecode::Raw::ICL_VAL,
8
+ :bounds => Gecode::Raw::ICL_BND,
9
+ :domain => Gecode::Raw::ICL_DOM
10
+ }.each_pair do |name, gecode_value|
11
+ it "should translate propagation strength #{name}" do
12
+ @expect_options.call(gecode_value, nil)
13
+ @invoke_options.call(:strength => name)
14
+ end
15
+ end
16
+
17
+ it 'should default to using default as propagation strength' do
18
+ @expect_options.call(Gecode::Raw::ICL_DEF, nil)
19
+ @invoke_options.call({})
20
+ end
21
+
22
+ it 'should raise errors for unrecognized options' do
23
+ lambda{ @invoke_options.call(:does_not_exist => :foo) }.should(
24
+ raise_error(ArgumentError))
25
+ end
26
+
27
+ it 'should raise errors for unrecognized propagation strengths' do
28
+ lambda{ @invoke_options.call(:strength => :does_not_exist) }.should(
29
+ raise_error(ArgumentError))
30
+ end
31
+
32
+ it 'should raise errors for reification variables of incorrect type' do
33
+ lambda{ @invoke_options.call(:reify => 'foo') }.should(
34
+ raise_error(TypeError))
35
+ end
36
+ end
37
+
38
+ # This requires that the constraint spec has instance variables @invoke_options
39
+ # and @expect_options .
40
+ describe 'constraint with options', :shared => true do
41
+ it 'should translate reification' do
42
+ var = @model.bool_var
43
+ @expect_options.call(Gecode::Raw::ICL_DEF, var)
44
+ @invoke_options.call(:reify => var)
45
+ end
46
+
47
+ it_should_behave_like 'constraint with strength option'
48
+ end
49
+
50
+ # This requires that the constraint spec has the instance variable
51
+ # @expect_relation which takes a relation, right hand side and whether it's
52
+ # negated as arguments and sets up the corresponding expectations. It also
53
+ # requires @invoke_relation with the same arguments. The spec is also required
54
+ # to provide a variable @target.
55
+ describe 'composite constraint', :shared => true do
56
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
57
+ it "should translate #{relation} with constant target" do
58
+ @expect_relation.call(type, 1, false)
59
+ @invoke_relation.call(relation, 1, false)
60
+ end
61
+ end
62
+
63
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
64
+ it "should translate #{relation} with variable target" do
65
+ @expect_relation.call(type, @target, false)
66
+ @invoke_relation.call(relation, @target, false)
67
+ end
68
+ end
69
+
70
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
71
+ it "should translate negated #{relation} with constant target" do
72
+ @expect_relation.call(type, 1, true)
73
+ @invoke_relation.call(relation, 1, true)
74
+ end
75
+ end
76
+
77
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
78
+ it "should translate negated #{relation} with variable target" do
79
+ @expect_relation.call(type, @target, true)
80
+ @invoke_relation.call(relation, @target, true)
81
+ end
82
+ end
83
+
84
+ it 'should raise error if the target is of the wrong type' do
85
+ lambda do
86
+ @invoke_relation.call(:==, 'hello', false)
87
+ end.should raise_error(TypeError)
88
+ end
89
+ end
90
+
91
+ # This requires that the constraint spec has the instance variable
92
+ # @expect_relation which takes a relation, right hand side and whether it's
93
+ # negated as arguments and sets up the corresponding expectations. It also
94
+ # requires @invoke_relation with the same arguments. The spec is also required
95
+ # to provide a variable @target.
96
+ describe 'composite set constraint', :shared => true do
97
+ Gecode::Constraints::Util::SET_RELATION_TYPES.each_pair do |relation, type|
98
+ it "should translate #{relation} with constant target" do
99
+ @expect_relation.call(type, [1], false)
100
+ @invoke_relation.call(relation, [1], false)
101
+ end
102
+ end
103
+
104
+ Gecode::Constraints::Util::SET_RELATION_TYPES.each_pair do |relation, type|
105
+ it "should translate #{relation} with variable target" do
106
+ @expect_relation.call(type, @target, false)
107
+ @invoke_relation.call(relation, @target, false)
108
+ end
109
+ end
110
+
111
+ Gecode::Constraints::Util::NEGATED_SET_RELATION_TYPES.each_pair do |relation, type|
112
+ it "should translate negated #{relation} with constant target" do
113
+ @expect_relation.call(type, [1], true)
114
+ @invoke_relation.call(relation, [1], true)
115
+ end
116
+ end
117
+
118
+ Gecode::Constraints::Util::NEGATED_SET_RELATION_TYPES.each_pair do |relation, type|
119
+ it "should translate negated #{relation} with variable target" do
120
+ @expect_relation.call(type, @target, true)
121
+ @invoke_relation.call(relation, @target, true)
122
+ end
123
+ end
124
+
125
+ it 'should raise error if the target is of the wrong type' do
126
+ lambda do
127
+ @invoke_relation.call(:==, 'hello', false)
128
+ end.should raise_error(TypeError)
129
+ end
130
+ end
131
+
132
+ # Requires @invoke_options and @model.
133
+ describe 'non-reifiable set constraint', :shared => true do
134
+ it 'should not accept strength option' do
135
+ lambda do
136
+ @invoke_options.call(:strength => :default)
137
+ end.should raise_error(ArgumentError)
138
+ end
139
+
140
+ it 'should not accept reification option' do
141
+ bool = @model.bool_var
142
+ lambda do
143
+ @invoke_options.call(:reify => bool)
144
+ end.should raise_error(ArgumentError)
145
+ end
146
+ end
147
+
148
+ # Requires @invoke_options, @expect_options and @model.
149
+ describe 'reifiable set constraint', :shared => true do
150
+ it 'should not accept strength option' do
151
+ lambda do
152
+ @invoke_options.call(:strength => :default)
153
+ end.should raise_error(ArgumentError)
154
+ end
155
+
156
+ it 'should accept reification option' do
157
+ bool = @model.bool_var
158
+ @expect_options.call(nil, bool)
159
+ @invoke_options.call(:reify => bool)
160
+ end
161
+ end
162
+
163
+ # Help methods for the GecodeR specs.
164
+ module GecodeR::Specs
165
+ module SetHelper
166
+ module_function
167
+
168
+ # Returns the arguments that should be used in a partial mock to expect the
169
+ # specified constant set (possibly an array of arguments).
170
+ def expect_constant_set(constant_set)
171
+ if constant_set.kind_of? Range
172
+ return constant_set.first, constant_set.last
173
+ elsif constant_set.kind_of? Fixnum
174
+ constant_set
175
+ else
176
+ an_instance_of(Gecode::Raw::IntSet)
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Gecode::Constraints::Expression do
4
+ it 'should raise error if it doesn\'t get all parameters for initialization' do
5
+ lambda do
6
+ Gecode::Constraints::Expression.new(Gecode::Model.new, :negate => false)
7
+ end.should raise_error(ArgumentError)
8
+ end
9
+ end
10
+
11
+ describe Gecode::Constraints::IntEnum::Expression do
12
+ it 'should raise error unless lhs is an int enum' do
13
+ lambda do
14
+ Gecode::Constraints::IntEnum::Expression.new(Gecode::Model.new,
15
+ :lhs => 'foo', :negate => false)
16
+ end.should raise_error(TypeError)
17
+ end
18
+ end
19
+
20
+ describe Gecode::Constraints::SetEnum::Expression do
21
+ it 'should raise error unless lhs is a set enum' do
22
+ lambda do
23
+ Gecode::Constraints::SetEnum::Expression.new(Gecode::Model.new,
24
+ :lhs => 'foo', :negate => false)
25
+ end.should raise_error(TypeError)
26
+ end
27
+ end
28
+
29
+ describe Gecode::Constraints::Int::CompositeStub, ' (not subclassed)' do
30
+ before do
31
+ @con = Gecode::Constraints::Int::CompositeStub.new(Gecode::Model.new, {})
32
+ end
33
+
34
+ it 'should raise error when calling #constrain_equal' do
35
+ lambda do
36
+ @con.instance_eval{ constrain_equal(nil, {}, false) }
37
+ end.should raise_error(NoMethodError)
38
+ end
39
+ end
40
+
41
+ describe Gecode::Constraints::Constraint, ' (not subclassed)' do
42
+ before do
43
+ @con = Gecode::Constraints::Constraint.new(Gecode::Model.new, {})
44
+ end
45
+
46
+ it 'should raise error when calling #post because it\'s not overridden' do
47
+ lambda{ @con.post }.should raise_error(NoMethodError)
48
+ end
49
+ end
50
+
51
+ describe Gecode::Constraints::Util do
52
+ it 'should raise error when giving incorrect set to #constant_set_to_params' do
53
+ lambda do
54
+ Gecode::Constraints::Util.constant_set_to_params('hello')
55
+ end.should raise_error(TypeError)
56
+ end
57
+
58
+ it 'should raise error when giving incorrect set to #constant_set_to_int_set' do
59
+ lambda do
60
+ Gecode::Constraints::Util.constant_set_to_int_set('hello')
61
+ end.should raise_error(TypeError)
62
+ end
63
+ end
64
+
65
+ describe Gecode::Constraints::CompositeExpression do
66
+ it 'should raise error if a method doesn\'t exist' do
67
+ expression = Gecode::Constraints::CompositeExpression.new(
68
+ Gecode::Constraints::Int::Expression, Gecode::FreeIntVar,
69
+ lambda{ }, Gecode::Model.new, {:lhs => nil, :negate => false}){}
70
+ lambda do
71
+ expression.this_method_does_not_exist
72
+ end.should raise_error(NoMethodError)
73
+ end
74
+ end
@@ -0,0 +1,139 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require File.dirname(__FILE__) + '/constraint_helper'
3
+
4
+ class CountSampleProblem < Gecode::Model
5
+ attr :list
6
+ attr :element
7
+ attr :target
8
+
9
+ def initialize
10
+ @list = int_var_array(4, 0..3)
11
+ @element = int_var(0..3)
12
+ @target = int_var(0..4)
13
+ branch_on @list
14
+ end
15
+ end
16
+
17
+ describe Gecode::Constraints::IntEnum::Count do
18
+ before do
19
+ @model = CountSampleProblem.new
20
+ @list = @model.list
21
+ @element = @model.element
22
+ @target = @model.target
23
+
24
+ # Creates an expectation corresponding to the specified input.
25
+ @expect = lambda do |element, relation, target, strength, reif_var|
26
+ @model.allow_space_access do
27
+ target = an_instance_of(Gecode::Raw::IntVar) if target.respond_to? :bind
28
+ element = an_instance_of(Gecode::Raw::IntVar) if element.respond_to? :bind
29
+ if reif_var.nil?
30
+ Gecode::Raw.should_receive(:count).once.with(
31
+ an_instance_of(Gecode::Raw::Space),
32
+ an_instance_of(Gecode::Raw::IntVarArray),
33
+ element, relation, target, strength)
34
+ else
35
+ Gecode::Raw.should_receive(:count).once.with(
36
+ an_instance_of(Gecode::Raw::Space),
37
+ an_instance_of(Gecode::Raw::IntVarArray),
38
+ element, Gecode::Raw::IRT_EQ,
39
+ an_instance_of(Gecode::Raw::IntVar), strength)
40
+ Gecode::Raw.should_receive(:rel).once.with(
41
+ an_instance_of(Gecode::Raw::Space),
42
+ an_instance_of(Gecode::Raw::IntVar), relation,
43
+ target, an_instance_of(Gecode::Raw::BoolVar), strength)
44
+ end
45
+ end
46
+ end
47
+
48
+ # For constraint option spec.
49
+ @invoke_options = lambda do |hash|
50
+ @list.count(@element).must_be.greater_than(@target, hash)
51
+ @model.solve!
52
+ end
53
+ @expect_options = lambda do |strength, reif_var|
54
+ @expect.call(@element, Gecode::Raw::IRT_GR, @target, strength, reif_var)
55
+ end
56
+ end
57
+
58
+ # Various situations that must be handled (4*2 in total). This was originally
59
+ # written without the repetition (r269), but that interfered with the spec
60
+ # somehow.
61
+
62
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
63
+ it "should translate #{relation} with variable element and target" do
64
+ @expect.call(@element, type, @target, Gecode::Raw::ICL_DEF, nil)
65
+ @list.count(@element).must.send(relation, @target)
66
+ @model.solve!
67
+ end
68
+ end
69
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
70
+ it "should translate negated #{relation} with variable element and target" do
71
+ @expect.call(@element, type, @target, Gecode::Raw::ICL_DEF, nil)
72
+ @list.count(@element).must_not.send(relation, @target)
73
+ @model.solve!
74
+ end
75
+ end
76
+
77
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
78
+ it "should translate #{relation} with variable element and constant target" do
79
+ @expect.call(@element, type, 2, Gecode::Raw::ICL_DEF, nil)
80
+ @list.count(@element).must.send(relation, 2)
81
+ @model.solve!
82
+ end
83
+ end
84
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
85
+ it "should translate negated #{relation} with variable element and constant target" do
86
+ @expect.call(@element, type, 2, Gecode::Raw::ICL_DEF, nil)
87
+ @list.count(@element).must_not.send(relation, 2)
88
+ @model.solve!
89
+ end
90
+ end
91
+
92
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
93
+ it "should translate #{relation} with constant element and constant target" do
94
+ @expect.call(1, type, 2, Gecode::Raw::ICL_DEF, nil)
95
+ @list.count(1).must.send(relation, 2)
96
+ @model.solve!
97
+ end
98
+ end
99
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
100
+ it "should translate negated #{relation} with constant element and constant target" do
101
+ @expect.call(1, type, 2, Gecode::Raw::ICL_DEF, nil)
102
+ @list.count(1).must_not.send(relation, 2)
103
+ @model.solve!
104
+ end
105
+ end
106
+
107
+ Gecode::Constraints::Util::RELATION_TYPES.each_pair do |relation, type|
108
+ it "should translate #{relation} with constant element and variable target" do
109
+ @expect.call(1, type, @target, Gecode::Raw::ICL_DEF, nil)
110
+ @list.count(1).must.send(relation, @target)
111
+ @model.solve!
112
+ end
113
+ end
114
+ Gecode::Constraints::Util::NEGATED_RELATION_TYPES.each_pair do |relation, type|
115
+ it "should translate negated #{relation} with constant element and variable target" do
116
+ @expect.call(1, type, @target, Gecode::Raw::ICL_DEF, nil)
117
+ @list.count(1).must_not.send(relation, @target)
118
+ @model.solve!
119
+ end
120
+ end
121
+
122
+ it 'should raise error if the target is of the wrong type' do
123
+ lambda{ @list.count(@element).must == 'hello' }.should raise_error(
124
+ TypeError)
125
+ end
126
+
127
+ it 'should raise error on element is of the wrong type' do
128
+ lambda{ @list.count('foo').must == @target }.should raise_error(
129
+ TypeError)
130
+ end
131
+
132
+ it 'should constrain the count' do
133
+ @list.must_be.distinct
134
+ @list.count(0).must <= 0
135
+ @model.solve!.should be_nil
136
+ end
137
+
138
+ it_should_behave_like 'constraint with options'
139
+ end
@@ -0,0 +1,218 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require File.dirname(__FILE__) + '/constraint_helper'
3
+
4
+ class DistinctSampleProblem < Gecode::Model
5
+ attr :vars
6
+ attr :sets
7
+
8
+ def initialize
9
+ @vars = int_var_array(2, 1)
10
+ @sets = set_var_array(2, [], 0..2)
11
+ branch_on wrap_enum(@sets)
12
+ end
13
+ end
14
+
15
+ describe Gecode::Constraints::IntEnum::Distinct do
16
+ before do
17
+ @model = DistinctSampleProblem.new
18
+ @invoke_options = lambda do |hash|
19
+ @model.vars.must_be.distinct(hash)
20
+ @model.solve!
21
+ end
22
+ @expect_options = lambda do |strength, reif_var|
23
+ Gecode::Raw.should_receive(:distinct).once.with(
24
+ an_instance_of(Gecode::Raw::Space),
25
+ an_instance_of(Gecode::Raw::IntVarArray), strength)
26
+ end
27
+ end
28
+
29
+ it 'should translate into a distinct constraint' do
30
+ Gecode::Raw.should_receive(:distinct).once.with(
31
+ an_instance_of(Gecode::Raw::Space),
32
+ anything, Gecode::Raw::ICL_DEF)
33
+ @invoke_options.call({})
34
+ end
35
+
36
+ it 'should constrain variables to be distinct' do
37
+ # This won't work well without branching or propagation strengths. So this
38
+ # just shows that the distinct constraint will cause trivially unsolvable
39
+ # problems to directly fail.
40
+ @model.vars.must_be.distinct
41
+ @model.solve!.should be_nil
42
+ end
43
+
44
+ it 'should not allow negation' do
45
+ lambda{ @model.vars.must_not_be.distinct }.should raise_error(
46
+ Gecode::MissingConstraintError)
47
+ end
48
+
49
+ it_should_behave_like 'constraint with strength option'
50
+ end
51
+
52
+ describe Gecode::Constraints::IntEnum::Distinct, ' (with offsets)' do
53
+ before do
54
+ @model = DistinctSampleProblem.new
55
+ @invoke_options = lambda do |hash|
56
+ @model.vars.with_offsets(1,2).must_be.distinct(hash)
57
+ @model.solve!
58
+ end
59
+ @expect_options = lambda do |strength, reif_var|
60
+ if reif_var.nil?
61
+ Gecode::Raw.should_receive(:distinct).once.with(
62
+ an_instance_of(Gecode::Raw::Space),
63
+ anything, an_instance_of(Gecode::Raw::IntVarArray), strength)
64
+ else
65
+ Gecode::Raw.should_receive(:distinct).once.with(
66
+ an_instance_of(Gecode::Raw::Space),
67
+ anything, an_instance_of(Gecode::Raw::IntVarArray), strength,
68
+ an_instance_of(Gecode::Raw::BoolVar))
69
+ end
70
+ end
71
+ end
72
+
73
+ it 'should translate into a distinct constraint with offsets' do
74
+ Gecode::Raw.should_receive(:distinct).once.with(
75
+ an_instance_of(Gecode::Raw::Space),
76
+ anything, anything, Gecode::Raw::ICL_DEF)
77
+ @invoke_options.call({})
78
+ end
79
+
80
+ it 'should consider offsets when making variables distinct' do
81
+ @model.vars.with_offsets(-1,0).must_be.distinct
82
+ x,y = @model.solve!.vars
83
+ x.value.should equal(1)
84
+ y.value.should equal(1)
85
+ end
86
+
87
+ # This tests two distinct in conjunction. It's here because of a bug found.
88
+ it 'should play nice with normal distinct' do
89
+ @model.vars.with_offsets(-1,0).must_be.distinct
90
+ @model.vars.must_be.distinct
91
+ @model.solve!.should be_nil
92
+ end
93
+
94
+ it 'should accept an array as offsets' do
95
+ @model.vars.with_offsets([-1,0]).must_be.distinct
96
+ x,y = @model.solve!.vars
97
+ x.value.should equal(1)
98
+ y.value.should equal(1)
99
+ end
100
+
101
+ it 'should not allow negation' do
102
+ lambda{ @model.vars.with_offsets(1,2).must_not_be.distinct }.should
103
+ raise_error(Gecode::MissingConstraintError)
104
+ end
105
+
106
+ it_should_behave_like 'constraint with strength option'
107
+ end
108
+
109
+ describe Gecode::Constraints::SetEnum::Distinct do
110
+ before do
111
+ @model = DistinctSampleProblem.new
112
+ @sets = @model.sets
113
+ @size = 1
114
+
115
+ @invoke_options = lambda do |hash|
116
+ @sets.must_be.distinct(hash.update(:size => @size))
117
+ @model.solve!
118
+ end
119
+ @expect_options = lambda do |strength, reif_var|
120
+ Gecode::Raw.should_receive(:distinct).once.with(
121
+ an_instance_of(Gecode::Raw::Space),
122
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
123
+ end
124
+ end
125
+
126
+ it 'should translate into a distinct constraint' do
127
+ Gecode::Raw.should_receive(:distinct).once.with(
128
+ an_instance_of(Gecode::Raw::Space),
129
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
130
+ @sets.must_be.distinct(:size => @size)
131
+ @model.solve!
132
+ end
133
+
134
+ it 'should constrain sets to be distinct' do
135
+ @sets.must_be.distinct(:size => @size)
136
+ @sets[0].must_be.superset_of 0
137
+ solution = @model.solve!
138
+ solution.should_not be_nil
139
+ set1, set2 = solution.sets
140
+ set1.value.size.should == @size
141
+ set2.value.size.should == @size
142
+ set1.value.should_not == set2.value
143
+ end
144
+
145
+ it 'should not allow negation' do
146
+ lambda{ @sets.must_not_be.distinct(:size => @size) }.should raise_error(
147
+ Gecode::MissingConstraintError)
148
+ end
149
+
150
+ it 'should not allow options other than :size' do
151
+ lambda do
152
+ @sets.must_be.distinct(:size => @size, :foo => 17)
153
+ end.should raise_error(ArgumentError)
154
+ end
155
+
156
+ it 'should raise error if :size is not specified' do
157
+ lambda{ @sets.must_be.distinct }.should raise_error(ArgumentError)
158
+ end
159
+
160
+ it_should_behave_like 'non-reifiable set constraint'
161
+ end
162
+
163
+ describe Gecode::Constraints::SetEnum::Distinct, ' (at most one)' do
164
+ before do
165
+ @model = DistinctSampleProblem.new
166
+ @sets = @model.sets
167
+ @size = 2
168
+
169
+ @invoke_options = lambda do |hash|
170
+ @sets.must.at_most_share_one_element hash.update(:size => @size)
171
+ @model.solve!
172
+ end
173
+ @expect_options = lambda do |strength, reif_var|
174
+ Gecode::Raw.should_receive(:atmostOne).once.with(
175
+ an_instance_of(Gecode::Raw::Space),
176
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
177
+ end
178
+ end
179
+
180
+ it 'should translate into a atmostOne constraint' do
181
+ Gecode::Raw.should_receive(:atmostOne).once.with(
182
+ an_instance_of(Gecode::Raw::Space),
183
+ an_instance_of(Gecode::Raw::SetVarArray), @size)
184
+ @sets.must.at_most_share_one_element(:size => @size)
185
+ @model.solve!
186
+ end
187
+
188
+ it 'should constrain sets to have at most one element in common' do
189
+ @sets.must.at_most_share_one_element(:size => @size)
190
+ @sets[0].must_not_be.superset_of 0
191
+ solution = @model.solve!
192
+ solution.should_not be_nil
193
+ set1, set2 = solution.sets
194
+ set1.value.size.should == @size
195
+ set2.value.size.should == @size
196
+ (set1.value.to_a & set2.value.to_a).size.should <= 1
197
+ end
198
+
199
+ it 'should not allow negation' do
200
+ lambda do
201
+ @sets.must_not.at_most_share_one_element(:size => @size)
202
+ end.should raise_error(Gecode::MissingConstraintError)
203
+ end
204
+
205
+ it 'should not allow options other than :size' do
206
+ lambda do
207
+ @sets.must.at_most_share_one_element(:size => @size, :foo => 17)
208
+ end.should raise_error(ArgumentError)
209
+ end
210
+
211
+ it 'should raise error if :size is not specified' do
212
+ lambda do
213
+ @sets.must.at_most_share_one_element
214
+ end.should raise_error(ArgumentError)
215
+ end
216
+
217
+ it_should_behave_like 'non-reifiable set constraint'
218
+ end