veritas-optimizer 0.0.3 → 0.0.4

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 (349) hide show
  1. data/.gemtest +0 -0
  2. data/.rvmrc +1 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +20 -10
  5. data/Guardfile +22 -0
  6. data/README.rdoc +2 -0
  7. data/Rakefile +4 -2
  8. data/TODO +43 -2
  9. data/config/flay.yml +2 -2
  10. data/config/flog.yml +1 -1
  11. data/config/roodi.yml +4 -4
  12. data/lib/veritas/optimizer/aggregate/count.rb +17 -0
  13. data/lib/veritas/optimizer/aggregate/maximum.rb +17 -0
  14. data/lib/veritas/optimizer/aggregate/mean.rb +17 -0
  15. data/lib/veritas/optimizer/aggregate/minimum.rb +17 -0
  16. data/lib/veritas/optimizer/aggregate/standard_deviation.rb +17 -0
  17. data/lib/veritas/optimizer/aggregate/sum.rb +17 -0
  18. data/lib/veritas/optimizer/aggregate/variance.rb +17 -0
  19. data/lib/veritas/optimizer/aggregate.rb +16 -0
  20. data/lib/veritas/optimizer/algebra/difference.rb +3 -1
  21. data/lib/veritas/optimizer/algebra/extension.rb +58 -3
  22. data/lib/veritas/optimizer/algebra/intersection.rb +3 -1
  23. data/lib/veritas/optimizer/algebra/join.rb +6 -4
  24. data/lib/veritas/optimizer/algebra/product.rb +3 -1
  25. data/lib/veritas/optimizer/algebra/projection.rb +23 -54
  26. data/lib/veritas/optimizer/algebra/rename.rb +55 -80
  27. data/lib/veritas/optimizer/algebra/restriction.rb +33 -66
  28. data/lib/veritas/optimizer/algebra/summarization.rb +161 -3
  29. data/lib/veritas/optimizer/algebra/union.rb +3 -1
  30. data/lib/veritas/optimizer/function/binary.rb +124 -0
  31. data/lib/veritas/optimizer/{logic → function}/connective/binary.rb +48 -102
  32. data/lib/veritas/optimizer/{logic → function}/connective/conjunction.rb +12 -11
  33. data/lib/veritas/optimizer/{logic → function}/connective/disjunction.rb +15 -14
  34. data/lib/veritas/optimizer/function/connective/negation.rb +65 -0
  35. data/lib/veritas/optimizer/function/numeric/absolute.rb +20 -0
  36. data/lib/veritas/optimizer/function/numeric/addition.rb +20 -0
  37. data/lib/veritas/optimizer/function/numeric/division.rb +20 -0
  38. data/lib/veritas/optimizer/function/numeric/exponentiation.rb +20 -0
  39. data/lib/veritas/optimizer/function/numeric/modulo.rb +20 -0
  40. data/lib/veritas/optimizer/function/numeric/multiplication.rb +20 -0
  41. data/lib/veritas/optimizer/function/numeric/square_root.rb +20 -0
  42. data/lib/veritas/optimizer/function/numeric/subtraction.rb +20 -0
  43. data/lib/veritas/optimizer/function/numeric/unary_minus.rb +20 -0
  44. data/lib/veritas/optimizer/function/numeric/unary_plus.rb +20 -0
  45. data/lib/veritas/optimizer/function/numeric.rb +34 -0
  46. data/lib/veritas/optimizer/{logic → function}/predicate/comparable.rb +6 -4
  47. data/lib/veritas/optimizer/{logic → function}/predicate/enumerable.rb +24 -26
  48. data/lib/veritas/optimizer/{logic → function}/predicate/equality.rb +6 -6
  49. data/lib/veritas/optimizer/{logic → function}/predicate/exclusion.rb +6 -16
  50. data/lib/veritas/optimizer/{logic → function}/predicate/greater_than.rb +6 -5
  51. data/lib/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to.rb +6 -6
  52. data/lib/veritas/optimizer/{logic → function}/predicate/inclusion.rb +6 -16
  53. data/lib/veritas/optimizer/{logic → function}/predicate/inequality.rb +6 -6
  54. data/lib/veritas/optimizer/{logic → function}/predicate/less_than.rb +6 -5
  55. data/lib/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to.rb +6 -6
  56. data/lib/veritas/optimizer/{logic → function}/predicate/match.rb +5 -4
  57. data/lib/veritas/optimizer/{logic → function}/predicate/no_match.rb +5 -4
  58. data/lib/veritas/optimizer/function/predicate.rb +61 -0
  59. data/lib/veritas/optimizer/function/string/length.rb +31 -0
  60. data/lib/veritas/optimizer/function/unary.rb +86 -0
  61. data/lib/veritas/optimizer/function.rb +87 -0
  62. data/lib/veritas/optimizer/optimizable.rb +6 -3
  63. data/lib/veritas/optimizer/relation/operation/binary.rb +36 -70
  64. data/lib/veritas/optimizer/relation/operation/limit.rb +1 -9
  65. data/lib/veritas/optimizer/relation/operation/offset.rb +1 -9
  66. data/lib/veritas/optimizer/relation/operation/order.rb +1 -9
  67. data/lib/veritas/optimizer/relation/operation/reverse.rb +1 -9
  68. data/lib/veritas/optimizer/relation/operation/unary.rb +50 -13
  69. data/lib/veritas/optimizer/version.rb +1 -1
  70. data/lib/veritas/optimizer.rb +43 -16
  71. data/spec/integration/veritas/algebra/difference/optimize_spec.rb +6 -4
  72. data/spec/integration/veritas/algebra/intersection/optimize_spec.rb +6 -4
  73. data/spec/integration/veritas/algebra/join/optimize_spec.rb +4 -2
  74. data/spec/integration/veritas/algebra/product/optimize_spec.rb +2 -0
  75. data/spec/integration/veritas/algebra/projection/optimize_spec.rb +6 -4
  76. data/spec/integration/veritas/algebra/rename/optimize_spec.rb +2 -0
  77. data/spec/integration/veritas/algebra/restriction/optimize_spec.rb +9 -7
  78. data/spec/integration/veritas/algebra/summarization/optimize_spec.rb +49 -0
  79. data/spec/integration/veritas/algebra/union/optimize_spec.rb +6 -4
  80. data/spec/integration/veritas/{logic → function}/connective/conjunction/optimize_spec.rb +33 -31
  81. data/spec/integration/veritas/{logic → function}/connective/disjunction/optimize_spec.rb +30 -28
  82. data/spec/integration/veritas/{logic → function}/connective/negation/optimize_spec.rb +7 -5
  83. data/spec/integration/veritas/{logic/expression → function}/optimize_spec.rb +5 -3
  84. data/spec/integration/veritas/{logic → function}/predicate/equality/optimize_spec.rb +9 -7
  85. data/spec/integration/veritas/{logic → function}/predicate/exclusion/optimize_spec.rb +13 -11
  86. data/spec/integration/veritas/{logic → function}/predicate/greater_than/optimize_spec.rb +17 -15
  87. data/spec/integration/veritas/{logic → function}/predicate/greater_than_or_equal_to/optimize_spec.rb +17 -15
  88. data/spec/integration/veritas/{logic → function}/predicate/inclusion/optimize_spec.rb +13 -11
  89. data/spec/integration/veritas/{logic → function}/predicate/inequality/optimize_spec.rb +9 -7
  90. data/spec/integration/veritas/{logic → function}/predicate/less_than/optimize_spec.rb +17 -15
  91. data/spec/integration/veritas/{logic → function}/predicate/less_than_or_equal_to/optimize_spec.rb +17 -15
  92. data/spec/integration/veritas/relation/empty/optimize_spec.rb +2 -0
  93. data/spec/integration/veritas/relation/materialized/optimize_spec.rb +2 -0
  94. data/spec/integration/veritas/relation/operation/limit/optimize_spec.rb +3 -1
  95. data/spec/integration/veritas/relation/operation/offset/optimize_spec.rb +3 -1
  96. data/spec/integration/veritas/relation/operation/order/optimize_spec.rb +4 -2
  97. data/spec/integration/veritas/relation/operation/reverse/optimize_spec.rb +4 -2
  98. data/spec/integration/veritas/relation/optimize_spec.rb +2 -0
  99. data/spec/shared/{logic_connective_binary_optimize_behavior.rb → function_connective_binary_optimize_behavior.rb} +14 -12
  100. data/spec/shared/idempotent_method_behavior.rb +2 -0
  101. data/spec/shared/optimize_method_behavior.rb +2 -0
  102. data/spec/support/add_method_missing.rb +2 -0
  103. data/spec/unit/veritas/optimizer/algebra/difference/empty_left/optimize_spec.rb +2 -0
  104. data/spec/unit/veritas/optimizer/algebra/difference/empty_right/optimize_spec.rb +2 -0
  105. data/spec/unit/veritas/optimizer/algebra/difference/equal_operands/optimize_spec.rb +2 -0
  106. data/spec/unit/veritas/optimizer/algebra/extension/extensions_spec.rb +31 -0
  107. data/spec/unit/veritas/optimizer/algebra/extension/order_operand/optimizable_spec.rb +23 -0
  108. data/spec/unit/veritas/optimizer/algebra/extension/order_operand/optimize_spec.rb +22 -0
  109. data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimizable_spec.rb +18 -8
  110. data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +4 -2
  111. data/spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb +2 -0
  112. data/spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb +2 -0
  113. data/spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +2 -0
  114. data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb +2 -0
  115. data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb +2 -0
  116. data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimizable_spec.rb +2 -0
  117. data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimize_spec.rb +2 -0
  118. data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimizable_spec.rb +2 -0
  119. data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimize_spec.rb +2 -0
  120. data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimizable_spec.rb +2 -0
  121. data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimize_spec.rb +2 -0
  122. data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimizable_spec.rb +2 -0
  123. data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimize_spec.rb +2 -0
  124. data/spec/unit/veritas/optimizer/algebra/projection/{set_operand → union_operand}/optimizable_spec.rb +3 -1
  125. data/spec/unit/veritas/optimizer/algebra/projection/{set_operand → union_operand}/optimize_spec.rb +4 -2
  126. data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimizable_spec.rb +3 -1
  127. data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +6 -4
  128. data/spec/unit/veritas/optimizer/algebra/rename/aliases_spec.rb +5 -13
  129. data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimizable_spec.rb +2 -0
  130. data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimize_spec.rb +2 -0
  131. data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimizable_spec.rb +2 -0
  132. data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimize_spec.rb +2 -0
  133. data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimizable_spec.rb +2 -0
  134. data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimize_spec.rb +2 -0
  135. data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimizable_spec.rb +2 -0
  136. data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimize_spec.rb +2 -0
  137. data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimizable_spec.rb +17 -7
  138. data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimize_spec.rb +2 -0
  139. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimizable_spec.rb +2 -0
  140. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimize_spec.rb +2 -0
  141. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_spec.rb +2 -0
  142. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +2 -0
  143. data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimizable_spec.rb +3 -1
  144. data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +7 -5
  145. data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimizable_spec.rb +2 -0
  146. data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +2 -0
  147. data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimizable_spec.rb +2 -0
  148. data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimize_spec.rb +2 -0
  149. data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimizable_spec.rb +7 -20
  150. data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +2 -0
  151. data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimizable_spec.rb +23 -3
  152. data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimize_spec.rb +7 -5
  153. data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimizable_spec.rb +3 -1
  154. data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimize_spec.rb +7 -3
  155. data/spec/unit/veritas/optimizer/algebra/restriction/predicate_spec.rb +3 -1
  156. data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimizable_spec.rb +5 -3
  157. data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +8 -6
  158. data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimizable_spec.rb +3 -1
  159. data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimize_spec.rb +5 -3
  160. data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimizable_spec.rb +11 -3
  161. data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimize_spec.rb +4 -2
  162. data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimizable_spec.rb +7 -5
  163. data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +2 -0
  164. data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +22 -0
  165. data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/optimizable_spec.rb +29 -0
  166. data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/optimize_spec.rb +47 -0
  167. data/spec/unit/veritas/optimizer/algebra/summarization/empty_summarize_per/optimizable_spec.rb +29 -0
  168. data/spec/unit/veritas/optimizer/algebra/summarization/empty_summarize_per/optimize_spec.rb +23 -0
  169. data/spec/unit/veritas/optimizer/algebra/summarization/order_operand/optimizable_spec.rb +23 -0
  170. data/spec/unit/veritas/optimizer/algebra/summarization/order_operand/optimize_spec.rb +22 -0
  171. data/spec/unit/veritas/optimizer/algebra/summarization/summarize_per_spec.rb +29 -0
  172. data/spec/unit/veritas/optimizer/algebra/summarization/summarizers_spec.rb +31 -0
  173. data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimizable_spec.rb +30 -8
  174. data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +12 -9
  175. data/spec/unit/veritas/optimizer/algebra/union/empty_left/optimize_spec.rb +2 -0
  176. data/spec/unit/veritas/optimizer/algebra/union/empty_right/optimize_spec.rb +2 -0
  177. data/spec/unit/veritas/optimizer/algebra/union/equal_operands/optimize_spec.rb +2 -0
  178. data/spec/unit/veritas/optimizer/class_methods/chain_spec.rb +2 -0
  179. data/spec/unit/veritas/optimizer/function/binary/constant_operands/optimizable_spec.rb +36 -0
  180. data/spec/unit/veritas/optimizer/function/binary/constant_operands/optimize_spec.rb +18 -0
  181. data/spec/unit/veritas/optimizer/function/binary/left_spec.rb +28 -0
  182. data/spec/unit/veritas/optimizer/function/binary/right_spec.rb +28 -0
  183. data/spec/unit/veritas/optimizer/function/binary/unoptimized_operands/optimizable_spec.rb +37 -0
  184. data/spec/unit/veritas/optimizer/function/binary/unoptimized_operands/optimize_spec.rb +23 -0
  185. data/spec/unit/veritas/optimizer/function/class_methods/optimize_functions_spec.rb +26 -0
  186. data/spec/unit/veritas/optimizer/function/class_methods/optimize_operand_spec.rb +22 -0
  187. data/spec/unit/veritas/optimizer/function/connective/binary/constant_operands/optimize_spec.rb +16 -0
  188. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/equal_operands/optimizable_spec.rb +4 -2
  189. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/equal_operands/optimize_spec.rb +3 -1
  190. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/left_spec.rb +3 -1
  191. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_left_operand/optimizable_spec.rb +4 -2
  192. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_left_operand/optimize_spec.rb +4 -2
  193. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_right_operand/optimizable_spec.rb +4 -2
  194. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_right_operand/optimize_spec.rb +4 -2
  195. data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/right_spec.rb +3 -1
  196. data/spec/unit/veritas/optimizer/function/connective/conjunction/contradiction/optimizable_spec.rb +64 -0
  197. data/spec/unit/veritas/optimizer/function/connective/conjunction/contradiction/optimize_spec.rb +19 -0
  198. data/spec/unit/veritas/optimizer/{logic/connective/disjunction/contradiction_left_operand → function/connective/conjunction/left_operand_tautology}/optimizable_spec.rb +9 -7
  199. data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/left_operand_tautology/optimize_spec.rb +8 -6
  200. data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/optimizable_to_exclusion/optimizable_spec.rb +4 -2
  201. data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +5 -3
  202. data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/right_operand_tautology/optimizable_spec.rb +6 -4
  203. data/spec/unit/veritas/optimizer/function/connective/conjunction/right_operand_tautology/optimize_spec.rb +19 -0
  204. data/spec/unit/veritas/optimizer/{logic/connective/conjunction/left_operand_tautology → function/connective/disjunction/contradiction_left_operand}/optimizable_spec.rb +9 -7
  205. data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_left_operand/optimize_spec.rb +8 -6
  206. data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_right_operand/optimizable_spec.rb +6 -4
  207. data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_right_operand/optimize_spec.rb +8 -6
  208. data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/optimizable_to_inclusion/optimizable_spec.rb +4 -2
  209. data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +5 -3
  210. data/spec/unit/veritas/optimizer/function/connective/disjunction/tautology/optimizable_spec.rb +64 -0
  211. data/spec/unit/veritas/optimizer/function/connective/disjunction/tautology/optimize_spec.rb +19 -0
  212. data/spec/unit/veritas/optimizer/function/connective/negation/constant_operand/optimize_spec.rb +16 -0
  213. data/spec/unit/veritas/optimizer/function/connective/negation/invertible_operand/optimizable_spec.rb +28 -0
  214. data/spec/unit/veritas/optimizer/function/connective/negation/invertible_operand/optimize_spec.rb +22 -0
  215. data/spec/unit/veritas/optimizer/{logic → function}/connective/negation/operand_spec.rb +3 -1
  216. data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/never_comparable/optimizable_spec.rb +23 -7
  217. data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/never_equivalent/optimizable_spec.rb +23 -7
  218. data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/normalizable_operands/optimizable_spec.rb +7 -5
  219. data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/normalizable_operands/optimize_spec.rb +7 -5
  220. data/spec/unit/veritas/optimizer/function/predicate/constant_operands/optimize_spec.rb +16 -0
  221. data/spec/unit/veritas/optimizer/function/predicate/contradiction/optimize_spec.rb +18 -0
  222. data/spec/unit/veritas/optimizer/function/predicate/enumerable/class_methods/sort_by_value_spec.rb +27 -0
  223. data/spec/unit/veritas/optimizer/{logic → function}/predicate/enumerable/empty_right_operand/optimizable_spec.rb +6 -4
  224. data/spec/unit/veritas/optimizer/{logic → function}/predicate/enumerable/one_right_operand/optimizable_spec.rb +9 -7
  225. data/spec/unit/veritas/optimizer/{logic/predicate/enumerable/unoptimized_operand → function/predicate/enumerable/unoptimized_operands}/optimizable_spec.rb +4 -2
  226. data/spec/unit/veritas/optimizer/{logic/predicate/enumerable/unoptimized_operand → function/predicate/enumerable/unoptimized_operands}/optimize_spec.rb +18 -5
  227. data/spec/unit/veritas/optimizer/{logic → function}/predicate/equality/tautology/optimizable_spec.rb +4 -2
  228. data/spec/unit/veritas/optimizer/{logic → function}/predicate/exclusion/empty_right_operand/optimize_spec.rb +8 -6
  229. data/spec/unit/veritas/optimizer/{logic → function}/predicate/exclusion/one_right_operand/optimize_spec.rb +8 -6
  230. data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than/contradiction/optimizable_spec.rb +4 -2
  231. data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than/tautology/optimizable_spec.rb +4 -2
  232. data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to/contradiction/optimizable_spec.rb +4 -2
  233. data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to/tautology/optimizable_spec.rb +4 -2
  234. data/spec/unit/veritas/optimizer/{logic → function}/predicate/inclusion/empty_right_operand/optimize_spec.rb +8 -6
  235. data/spec/unit/veritas/optimizer/{logic → function}/predicate/inclusion/one_right_operand/optimize_spec.rb +8 -6
  236. data/spec/unit/veritas/optimizer/{logic → function}/predicate/inequality/contradiction/optimizable_spec.rb +4 -2
  237. data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than/contradiction/optimizable_spec.rb +4 -2
  238. data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than/tautology/optimizable_spec.rb +4 -2
  239. data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to/contradiction/optimizable_spec.rb +4 -2
  240. data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to/tautology/optimizable_spec.rb +4 -2
  241. data/spec/unit/veritas/optimizer/function/predicate/tautology/optimize_spec.rb +18 -0
  242. data/spec/unit/veritas/optimizer/function/unary/constant_operand/optimizable_spec.rb +27 -0
  243. data/spec/unit/veritas/optimizer/function/unary/constant_operand/optimize_spec.rb +18 -0
  244. data/spec/unit/veritas/optimizer/function/unary/operand_spec.rb +27 -0
  245. data/spec/unit/veritas/optimizer/function/unary/unoptimized_operand/optimizable_spec.rb +27 -0
  246. data/spec/unit/veritas/optimizer/function/unary/unoptimized_operand/optimize_spec.rb +18 -0
  247. data/spec/unit/veritas/optimizer/{logic/predicate → function}/util/class_methods/attribute_spec.rb +4 -2
  248. data/spec/unit/veritas/optimizer/{logic/predicate → function}/util/class_methods/constant_spec.rb +13 -5
  249. data/spec/unit/veritas/optimizer/function/util/class_methods/max_spec.rb +27 -0
  250. data/spec/unit/veritas/optimizer/function/util/class_methods/min_spec.rb +27 -0
  251. data/spec/unit/veritas/optimizer/operation_spec.rb +2 -0
  252. data/spec/unit/veritas/optimizer/optimizable/class_methods/optimizer_spec.rb +2 -0
  253. data/spec/unit/veritas/optimizer/optimizable/optimize_spec.rb +3 -1
  254. data/spec/unit/veritas/optimizer/optimizable_spec.rb +2 -0
  255. data/spec/unit/veritas/optimizer/optimize_spec.rb +2 -0
  256. data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimizable_spec.rb +2 -0
  257. data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimize_spec.rb +2 -0
  258. data/spec/unit/veritas/optimizer/relation/operation/binary/empty_left/optimizable_spec.rb +2 -4
  259. data/spec/unit/veritas/optimizer/relation/operation/binary/empty_right/optimizable_spec.rb +2 -4
  260. data/spec/unit/veritas/optimizer/relation/operation/binary/equal_operands/optimizable_spec.rb +2 -5
  261. data/spec/unit/veritas/optimizer/relation/operation/binary/left_order_operand/optimizable_spec.rb +23 -0
  262. data/spec/unit/veritas/optimizer/relation/operation/binary/left_order_operand/optimize_spec.rb +23 -0
  263. data/spec/unit/veritas/optimizer/relation/operation/binary/left_spec.rb +2 -4
  264. data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimizable_spec.rb +2 -0
  265. data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimize_spec.rb +2 -0
  266. data/spec/unit/veritas/optimizer/relation/operation/binary/right_order_operand/optimizable_spec.rb +23 -0
  267. data/spec/unit/veritas/optimizer/relation/operation/binary/right_order_operand/optimize_spec.rb +23 -0
  268. data/spec/unit/veritas/optimizer/relation/operation/binary/right_spec.rb +2 -4
  269. data/spec/unit/veritas/optimizer/relation/operation/binary/{unoptimized_operand → unoptimized_operands}/optimizable_spec.rb +3 -1
  270. data/spec/unit/veritas/optimizer/relation/operation/binary/{unoptimized_operand → unoptimized_operands}/optimize_spec.rb +3 -1
  271. data/spec/unit/veritas/optimizer/relation/operation/combination/optimize_spec.rb +2 -0
  272. data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimizable_spec.rb +2 -0
  273. data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +2 -0
  274. data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimizable_spec.rb +2 -0
  275. data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +2 -0
  276. data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimizable_spec.rb +2 -0
  277. data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +2 -0
  278. data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimizable_spec.rb +2 -0
  279. data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +2 -0
  280. data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimizable_spec.rb +2 -0
  281. data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +2 -0
  282. data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimizable_spec.rb +2 -0
  283. data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +2 -0
  284. data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimizable_spec.rb +2 -0
  285. data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +2 -0
  286. data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimizable_spec.rb +2 -0
  287. data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +2 -0
  288. data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimizable_spec.rb +2 -0
  289. data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimize_spec.rb +3 -1
  290. data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimizable_spec.rb +2 -0
  291. data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +2 -0
  292. data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimizable_spec.rb +2 -0
  293. data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +2 -0
  294. data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimizable_spec.rb +2 -0
  295. data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +2 -0
  296. data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_spec.rb +2 -0
  297. data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +2 -0
  298. data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimizable_spec.rb +5 -2
  299. data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +2 -0
  300. data/spec/unit/veritas/optimizer/relation/operation/unary/header_spec.rb +15 -0
  301. data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimizable_spec.rb +5 -2
  302. data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +2 -0
  303. data/spec/unit/veritas/optimizer/relation/operation/unary/operand_spec.rb +8 -5
  304. data/spec/unit/veritas/optimizer/relation/operation/unary/order_operand/optimizable_spec.rb +28 -0
  305. data/spec/unit/veritas/optimizer/relation/operation/unary/order_operand/optimize_spec.rb +27 -0
  306. data/spec/unit/veritas/optimizer/relation/operation/unary/unchanged_header/optimizable_spec.rb +24 -0
  307. data/spec/unit/veritas/optimizer/relation/operation/unary/unchanged_header/optimize_spec.rb +14 -0
  308. data/tasks/metrics/ci.rake +7 -0
  309. data/tasks/{quality → metrics}/flay.rake +0 -0
  310. data/tasks/{quality → metrics}/flog.rake +0 -0
  311. data/tasks/{quality → metrics}/heckle.rake +1 -0
  312. data/tasks/{quality → metrics}/metric_fu.rake +3 -0
  313. data/tasks/{quality → metrics}/reek.rake +0 -0
  314. data/tasks/{quality → metrics}/roodi.rake +0 -0
  315. data/tasks/{quality → metrics}/yardstick.rake +0 -0
  316. data/tasks/spec.rake +1 -0
  317. data/veritas-optimizer.gemspec +183 -352
  318. metadata +232 -357
  319. data/lib/veritas/optimizer/logic/connective/negation.rb +0 -71
  320. data/lib/veritas/optimizer/logic/predicate.rb +0 -177
  321. data/spec/unit/veritas/optimizer/algebra/projection/header_spec.rb +0 -16
  322. data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimizable_spec.rb +0 -26
  323. data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimize_spec.rb +0 -16
  324. data/spec/unit/veritas/optimizer/algebra/rename/class_methods/union_aliases_spec.rb +0 -27
  325. data/spec/unit/veritas/optimizer/algebra/rename/header_spec.rb +0 -19
  326. data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimizable_spec.rb +0 -26
  327. data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimize_spec.rb +0 -16
  328. data/spec/unit/veritas/optimizer/algebra/restriction/class_methods/optimize_predicate_spec.rb +0 -31
  329. data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimizable_spec.rb +0 -26
  330. data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimize_spec.rb +0 -18
  331. data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimizable_spec.rb +0 -34
  332. data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimize_spec.rb +0 -21
  333. data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimizable_spec.rb +0 -41
  334. data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimize_spec.rb +0 -17
  335. data/spec/unit/veritas/optimizer/logic/connective/conjunction/right_operand_tautology/optimize_spec.rb +0 -17
  336. data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimizable_spec.rb +0 -41
  337. data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimize_spec.rb +0 -17
  338. data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimizable_spec.rb +0 -26
  339. data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimize_spec.rb +0 -20
  340. data/spec/unit/veritas/optimizer/logic/predicate/class_methods/optimize_operand_spec.rb +0 -20
  341. data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimizable_spec.rb +0 -29
  342. data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimize_spec.rb +0 -14
  343. data/spec/unit/veritas/optimizer/logic/predicate/contradiction/optimize_spec.rb +0 -16
  344. data/spec/unit/veritas/optimizer/logic/predicate/left_spec.rb +0 -25
  345. data/spec/unit/veritas/optimizer/logic/predicate/right_spec.rb +0 -25
  346. data/spec/unit/veritas/optimizer/logic/predicate/tautology/optimize_spec.rb +0 -16
  347. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/max_spec.rb +0 -19
  348. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/min_spec.rb +0 -19
  349. data/tasks/quality/ci.rake +0 -2
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+ class Numeric
7
+
8
+ # Abstract base class representing Multiplication optimizations
9
+ class Multiplication < self
10
+
11
+ Veritas::Function::Numeric::Multiplication.optimizer = chain(
12
+ ConstantOperands,
13
+ UnoptimizedOperands
14
+ )
15
+
16
+ end # class Multiplication
17
+ end # class Numeric
18
+ end # module Function
19
+ end # class Optimizer
20
+ end # module Veritas
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+ class Numeric
7
+
8
+ # Abstract base class representing SquareRoot optimizations
9
+ class SquareRoot < self
10
+
11
+ Veritas::Function::Numeric::SquareRoot.optimizer = chain(
12
+ ConstantOperand,
13
+ UnoptimizedOperand
14
+ )
15
+
16
+ end # class SquareRoot
17
+ end # class Numeric
18
+ end # module Function
19
+ end # class Optimizer
20
+ end # module Veritas
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+ class Numeric
7
+
8
+ # Abstract base class representing Subtraction optimizations
9
+ class Subtraction < self
10
+
11
+ Veritas::Function::Numeric::Subtraction.optimizer = chain(
12
+ ConstantOperands,
13
+ UnoptimizedOperands
14
+ )
15
+
16
+ end # class Subtraction
17
+ end # class Numeric
18
+ end # module Function
19
+ end # class Optimizer
20
+ end # module Veritas
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+ class Numeric
7
+
8
+ # Abstract base class representing UnaryMinus optimizations
9
+ class UnaryMinus < self
10
+
11
+ Veritas::Function::Numeric::UnaryMinus.optimizer = chain(
12
+ ConstantOperand,
13
+ UnoptimizedOperand
14
+ )
15
+
16
+ end # class UnaryMinus
17
+ end # class Numeric
18
+ end # module Function
19
+ end # class Optimizer
20
+ end # module Veritas
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+ class Numeric
7
+
8
+ # Abstract base class representing UnaryPlus optimizations
9
+ class UnaryPlus < self
10
+
11
+ Veritas::Function::Numeric::UnaryPlus.optimizer = chain(
12
+ ConstantOperand,
13
+ UnoptimizedOperand
14
+ )
15
+
16
+ end # class UnaryPlus
17
+ end # class Numeric
18
+ end # module Function
19
+ end # class Optimizer
20
+ end # module Veritas
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ module Veritas
4
+ class Optimizer
5
+ module Function
6
+
7
+ # Abstract base class representing Numeric optimizations
8
+ class Numeric < Optimizer
9
+ include AbstractClass
10
+
11
+ # Optimize when the operand is constant
12
+ class ConstantOperand < self
13
+ include Unary::ConstantOperand, Unary
14
+ end # class ConstantOperand
15
+
16
+ # Optimize when the operands are constants
17
+ class ConstantOperands < self
18
+ include Binary::ConstantOperands, Binary
19
+ end # class ConstantOperands
20
+
21
+ # Optimize when the operand is unoptimized
22
+ class UnoptimizedOperand < self
23
+ include Unary::UnoptimizedOperand, Unary
24
+ end # class UnoptimizedOperand
25
+
26
+ # Optimize when the operand is unoptimized
27
+ class UnoptimizedOperands < self
28
+ include Binary::UnoptimizedOperands, Binary
29
+ end # class UnoptimizedOperands
30
+
31
+ end # class Numeric
32
+ end # module Function
33
+ end # class Optimizer
34
+ end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Comparable predicate optimizations
@@ -75,7 +75,8 @@ module Veritas
75
75
  #
76
76
  # @api private
77
77
  def not_joinable?
78
- !left.joinable?(right)
78
+ left = self.left
79
+ !(left.respond_to?(:joinable?) && left.joinable?(right))
79
80
  end
80
81
 
81
82
  end # module NeverEquivalent
@@ -123,12 +124,13 @@ module Veritas
123
124
  #
124
125
  # @api private
125
126
  def not_comparable?
126
- !left.comparable?(right)
127
+ left = self.left
128
+ !(left.respond_to?(:comparable?) && left.comparable?(right))
127
129
  end
128
130
 
129
131
  end # module NeverComparable
130
132
  end # module Comparable
131
133
  end # class Predicate
132
- end # module Logic
134
+ end # module Function
133
135
  end # class Optimizer
134
136
  end # module Veritas
@@ -2,12 +2,28 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Enumerable predicate optimizations
9
9
  module Enumerable
10
10
 
11
+ # Return a value to sort the obejct with
12
+ #
13
+ # @param [Object] object
14
+ #
15
+ # @return [Object]
16
+ #
17
+ # @api private
18
+ def self.sort_by_value(object)
19
+ case object
20
+ when TrueClass then 1
21
+ when FalseClass then 0
22
+ else
23
+ object
24
+ end
25
+ end
26
+
11
27
  private
12
28
 
13
29
  # Optimize the right operand
@@ -33,7 +49,9 @@ module Veritas
33
49
  #
34
50
  # @api private
35
51
  def optimize_right_range
52
+ left = self.left
36
53
  right = operation.right
54
+ return unless left.respond_to?(:range)
37
55
  right.to_inclusive if right.overlaps?(left.range)
38
56
  end
39
57
 
@@ -56,9 +74,8 @@ module Veritas
56
74
  # @api private
57
75
  def normalized_right_enumerable
58
76
  enumerable = operation.right.select { |value| left.valid_value?(value) }
59
- enumerable.sort!
60
77
  enumerable.uniq!
61
- enumerable
78
+ enumerable.sort_by! { |value| Enumerable.sort_by_value(value) }
62
79
  end
63
80
 
64
81
  # Optimize when the right operand is empty
@@ -112,30 +129,11 @@ module Veritas
112
129
  end # module OneRightOperand
113
130
 
114
131
  # Optimize when the operands are unoptimized
115
- class UnoptimizedOperand < Predicate
116
- include Enumerable
117
-
118
- # Test if the operands are unoptimized
119
- #
120
- # @return [Boolean]
121
- #
122
- # @api private
123
- def optimizable?
124
- !right.equal?(operation.right)
125
- end
126
-
127
- # Return a Enumerable predicate with optimized operands
128
- #
129
- # @return [Binary]
130
- #
131
- # @api private
132
- def optimize
133
- operation.class.new(left, right)
134
- end
135
-
136
- end # class UnoptimizedOperand
132
+ class UnoptimizedOperands < Predicate::UnoptimizedOperands
133
+ include Enumerable, Function::Binary::UnoptimizedOperands
134
+ end # class UnoptimizedOperands
137
135
  end # module Enumerable
138
136
  end # class Predicate
139
- end # module Logic
137
+ end # module Function
140
138
  end # class Optimizer
141
139
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Equality optimizations
@@ -11,8 +11,7 @@ module Veritas
11
11
 
12
12
  # Optimize when the operand are a contradiction
13
13
  class Contradiction < self
14
- include Comparable::NeverEquivalent
15
- include Predicate::Contradiction
14
+ include Comparable::NeverEquivalent, Predicate::Contradiction
16
15
  end # class Contradiction
17
16
 
18
17
  # Optimize when the operand are a tautology
@@ -30,15 +29,16 @@ module Veritas
30
29
 
31
30
  end # class Tautology
32
31
 
33
- Veritas::Logic::Predicate::Equality.optimizer = chain(
32
+ Veritas::Function::Predicate::Equality.optimizer = chain(
34
33
  ConstantOperands,
35
34
  Contradiction,
36
35
  Tautology,
37
- NormalizableOperands
36
+ NormalizableOperands,
37
+ UnoptimizedOperands
38
38
  )
39
39
 
40
40
  end # class Equality
41
41
  end # class Predicate
42
- end # module Logic
42
+ end # module Function
43
43
  end # class Optimizer
44
44
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Exclusion optimizations
@@ -11,17 +11,7 @@ module Veritas
11
11
 
12
12
  # Optimize when the right operand is empty
13
13
  class EmptyRightOperand < self
14
- include Enumerable::EmptyRightOperand
15
-
16
- # An Exclusion with an empty right operand matches everything
17
- #
18
- # @return [Tautology]
19
- #
20
- # @api private
21
- def optimize
22
- Veritas::Logic::Proposition::Tautology.instance
23
- end
24
-
14
+ include Enumerable::EmptyRightOperand, Predicate::Tautology
25
15
  end # class EmptyRightOperand
26
16
 
27
17
  # Optimize when the right operand has one entry
@@ -34,20 +24,20 @@ module Veritas
34
24
  #
35
25
  # @api private
36
26
  def optimize
37
- Veritas::Logic::Predicate::Inequality.new(left, right.first)
27
+ Veritas::Function::Predicate::Inequality.new(left, right.first)
38
28
  end
39
29
 
40
30
  end # class OneRightOperand
41
31
 
42
- Veritas::Logic::Predicate::Exclusion.optimizer = chain(
32
+ Veritas::Function::Predicate::Exclusion.optimizer = chain(
43
33
  ConstantOperands,
44
34
  EmptyRightOperand,
45
35
  OneRightOperand,
46
- UnoptimizedOperand
36
+ Enumerable::UnoptimizedOperands
47
37
  )
48
38
 
49
39
  end # class Exclusion
50
40
  end # class Predicate
51
- end # module Logic
41
+ end # module Function
52
42
  end # class Optimizer
53
43
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing GreaterThan optimizations
@@ -35,20 +35,21 @@ module Veritas
35
35
  #
36
36
  # @api private
37
37
  def optimizable?
38
- operation.class.call(Predicate::Util.min(left), Predicate::Util.max(right))
38
+ operation.class.call(Util.min(left), Util.max(right))
39
39
  end
40
40
 
41
41
  end # class Tautology
42
42
 
43
- Veritas::Logic::Predicate::GreaterThan.optimizer = chain(
43
+ Veritas::Function::Predicate::GreaterThan.optimizer = chain(
44
44
  ConstantOperands,
45
45
  Contradiction,
46
46
  Tautology,
47
- NormalizableOperands
47
+ NormalizableOperands,
48
+ UnoptimizedOperands
48
49
  )
49
50
 
50
51
  end # class GreaterThan
51
52
  end # class Predicate
52
- end # module Logic
53
+ end # module Function
53
54
  end # class Optimizer
54
55
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing GreaterThanOrEqualTo optimizations
@@ -11,8 +11,7 @@ module Veritas
11
11
 
12
12
  # Optimize when the operands are a contradiction
13
13
  class Contradiction < self
14
- include Comparable::NeverComparable
15
- include Predicate::Contradiction
14
+ include Comparable::NeverComparable, Predicate::Contradiction
16
15
 
17
16
  # Test if the operands are a contradiction
18
17
  #
@@ -42,15 +41,16 @@ module Veritas
42
41
 
43
42
  end # class Tautology
44
43
 
45
- Veritas::Logic::Predicate::GreaterThanOrEqualTo.optimizer = chain(
44
+ Veritas::Function::Predicate::GreaterThanOrEqualTo.optimizer = chain(
46
45
  ConstantOperands,
47
46
  Contradiction,
48
47
  Tautology,
49
- NormalizableOperands
48
+ NormalizableOperands,
49
+ UnoptimizedOperands
50
50
  )
51
51
 
52
52
  end # class GreaterThanOrEqualTo
53
53
  end # class Predicate
54
- end # module Logic
54
+ end # module Function
55
55
  end # class Optimizer
56
56
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Inclusion optimizations
@@ -11,17 +11,7 @@ module Veritas
11
11
 
12
12
  # Optimize when the right operand is empty
13
13
  class EmptyRightOperand < self
14
- include Enumerable::EmptyRightOperand
15
-
16
- # An Inclusion with an empty right operand matches nothing
17
- #
18
- # @return [Contradiction]
19
- #
20
- # @api private
21
- def optimize
22
- Veritas::Logic::Proposition::Contradiction.instance
23
- end
24
-
14
+ include Enumerable::EmptyRightOperand, Predicate::Contradiction
25
15
  end # class EmptyRightOperand
26
16
 
27
17
  # Optimize when the right operand has one entry
@@ -34,20 +24,20 @@ module Veritas
34
24
  #
35
25
  # @api private
36
26
  def optimize
37
- Veritas::Logic::Predicate::Equality.new(left, right.first)
27
+ Veritas::Function::Predicate::Equality.new(left, right.first)
38
28
  end
39
29
 
40
30
  end # class OneRightOperand
41
31
 
42
- Veritas::Logic::Predicate::Inclusion.optimizer = chain(
32
+ Veritas::Function::Predicate::Inclusion.optimizer = chain(
43
33
  ConstantOperands,
44
34
  EmptyRightOperand,
45
35
  OneRightOperand,
46
- UnoptimizedOperand
36
+ Enumerable::UnoptimizedOperands
47
37
  )
48
38
 
49
39
  end # class Inclusion
50
40
  end # class Predicate
51
- end # module Logic
41
+ end # module Function
52
42
  end # class Optimizer
53
43
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Inequality optimizations
@@ -26,19 +26,19 @@ module Veritas
26
26
 
27
27
  # Optimize when the operand are a tautology
28
28
  class Tautology < self
29
- include Comparable::NeverEquivalent
30
- include Predicate::Tautology
29
+ include Comparable::NeverEquivalent, Predicate::Tautology
31
30
  end # class Tautology
32
31
 
33
- Veritas::Logic::Predicate::Inequality.optimizer = chain(
32
+ Veritas::Function::Predicate::Inequality.optimizer = chain(
34
33
  ConstantOperands,
35
34
  Contradiction,
36
35
  Tautology,
37
- NormalizableOperands
36
+ NormalizableOperands,
37
+ UnoptimizedOperands
38
38
  )
39
39
 
40
40
  end # class Inequality
41
41
  end # class Predicate
42
- end # module Logic
42
+ end # module Function
43
43
  end # class Optimizer
44
44
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing LessThan optimizations
@@ -35,20 +35,21 @@ module Veritas
35
35
  #
36
36
  # @api private
37
37
  def optimizable?
38
- operation.class.call(Predicate::Util.max(left), Predicate::Util.min(right))
38
+ operation.class.call(Util.max(left), Util.min(right))
39
39
  end
40
40
 
41
41
  end # class Tautology
42
42
 
43
- Veritas::Logic::Predicate::LessThan.optimizer = chain(
43
+ Veritas::Function::Predicate::LessThan.optimizer = chain(
44
44
  ConstantOperands,
45
45
  Contradiction,
46
46
  Tautology,
47
- NormalizableOperands
47
+ NormalizableOperands,
48
+ UnoptimizedOperands
48
49
  )
49
50
 
50
51
  end # class LessThan
51
52
  end # class Predicate
52
- end # module Logic
53
+ end # module Function
53
54
  end # class Optimizer
54
55
  end # module Veritas
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing LessThanOrEqualTo optimizations
@@ -11,8 +11,7 @@ module Veritas
11
11
 
12
12
  # Optimize when the operands are a contradiction
13
13
  class Contradiction < self
14
- include Comparable::NeverComparable
15
- include Predicate::Contradiction
14
+ include Comparable::NeverComparable, Predicate::Contradiction
16
15
 
17
16
  # Test if the operands are a contradiction
18
17
  #
@@ -42,15 +41,16 @@ module Veritas
42
41
 
43
42
  end # class Tautology
44
43
 
45
- Veritas::Logic::Predicate::LessThanOrEqualTo.optimizer = chain(
44
+ Veritas::Function::Predicate::LessThanOrEqualTo.optimizer = chain(
46
45
  ConstantOperands,
47
46
  Contradiction,
48
47
  Tautology,
49
- NormalizableOperands
48
+ NormalizableOperands,
49
+ UnoptimizedOperands
50
50
  )
51
51
 
52
52
  end # class LessThanOrEqualTo
53
53
  end # class Predicate
54
- end # module Logic
54
+ end # module Function
55
55
  end # class Optimizer
56
56
  end # module Veritas
@@ -2,18 +2,19 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing Match optimizations
9
9
  class Match < self
10
10
 
11
- Veritas::Logic::Predicate::Match.optimizer = chain(
12
- ConstantOperands
11
+ Veritas::Function::Predicate::Match.optimizer = chain(
12
+ ConstantOperands,
13
+ UnoptimizedOperands
13
14
  )
14
15
 
15
16
  end # class Match
16
17
  end # class Predicate
17
- end # module Logic
18
+ end # module Function
18
19
  end # class Optimizer
19
20
  end # module Veritas
@@ -2,18 +2,19 @@
2
2
 
3
3
  module Veritas
4
4
  class Optimizer
5
- module Logic
5
+ module Function
6
6
  class Predicate
7
7
 
8
8
  # Abstract base class representing NoMatch optimizations
9
9
  class NoMatch < self
10
10
 
11
- Veritas::Logic::Predicate::NoMatch.optimizer = chain(
12
- ConstantOperands
11
+ Veritas::Function::Predicate::NoMatch.optimizer = chain(
12
+ ConstantOperands,
13
+ UnoptimizedOperands
13
14
  )
14
15
 
15
16
  end # class NoMatch
16
17
  end # class Predicate
17
- end # module Logic
18
+ end # module Function
18
19
  end # class Optimizer
19
20
  end # module Veritas