veritas 0.0.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.
- data/.autotest +42 -0
- data/.document +5 -0
- data/.gitignore +34 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +122 -0
- data/LICENSE +20 -0
- data/README.rdoc +143 -0
- data/Rakefile +31 -0
- data/TODO +126 -0
- data/benchmarks/memory.rb +175 -0
- data/benchmarks/speed.rb +101 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/roodi.yml +18 -0
- data/config/site.reek +96 -0
- data/config/yardstick.yml +2 -0
- data/lib/veritas/algebra/difference.rb +53 -0
- data/lib/veritas/algebra/extension.rb +121 -0
- data/lib/veritas/algebra/intersection.rb +53 -0
- data/lib/veritas/algebra/join.rb +198 -0
- data/lib/veritas/algebra/product.rb +90 -0
- data/lib/veritas/algebra/projection.rb +113 -0
- data/lib/veritas/algebra/rename/aliases.rb +199 -0
- data/lib/veritas/algebra/rename.rb +91 -0
- data/lib/veritas/algebra/restriction.rb +96 -0
- data/lib/veritas/algebra/summarization.rb +166 -0
- data/lib/veritas/algebra/union.rb +54 -0
- data/lib/veritas/algebra.rb +10 -0
- data/lib/veritas/attribute/boolean.rb +39 -0
- data/lib/veritas/attribute/class.rb +21 -0
- data/lib/veritas/attribute/comparable.rb +32 -0
- data/lib/veritas/attribute/date.rb +36 -0
- data/lib/veritas/attribute/date_time.rb +36 -0
- data/lib/veritas/attribute/decimal.rb +21 -0
- data/lib/veritas/attribute/float.rb +21 -0
- data/lib/veritas/attribute/integer.rb +21 -0
- data/lib/veritas/attribute/numeric.rb +86 -0
- data/lib/veritas/attribute/object.rb +25 -0
- data/lib/veritas/attribute/orderable.rb +33 -0
- data/lib/veritas/attribute/string.rb +88 -0
- data/lib/veritas/attribute/time.rb +36 -0
- data/lib/veritas/attribute.rb +256 -0
- data/lib/veritas/core_ext/date.rb +16 -0
- data/lib/veritas/core_ext/range.rb +35 -0
- data/lib/veritas/core_ext/time.rb +16 -0
- data/lib/veritas/logic/connective/binary.rb +54 -0
- data/lib/veritas/logic/connective/conjunction.rb +70 -0
- data/lib/veritas/logic/connective/disjunction.rb +70 -0
- data/lib/veritas/logic/connective/negation.rb +78 -0
- data/lib/veritas/logic/connective/unary.rb +52 -0
- data/lib/veritas/logic/connective.rb +31 -0
- data/lib/veritas/logic/expression.rb +99 -0
- data/lib/veritas/logic/predicate/comparable.rb +57 -0
- data/lib/veritas/logic/predicate/enumerable.rb +25 -0
- data/lib/veritas/logic/predicate/equality.rb +65 -0
- data/lib/veritas/logic/predicate/exclusion.rb +72 -0
- data/lib/veritas/logic/predicate/greater_than.rb +65 -0
- data/lib/veritas/logic/predicate/greater_than_or_equal_to.rb +65 -0
- data/lib/veritas/logic/predicate/inclusion.rb +72 -0
- data/lib/veritas/logic/predicate/inequality.rb +80 -0
- data/lib/veritas/logic/predicate/less_than.rb +65 -0
- data/lib/veritas/logic/predicate/less_than_or_equal_to.rb +65 -0
- data/lib/veritas/logic/predicate/match.rb +53 -0
- data/lib/veritas/logic/predicate/no_match.rb +68 -0
- data/lib/veritas/logic/predicate.rb +97 -0
- data/lib/veritas/logic/proposition/false.rb +63 -0
- data/lib/veritas/logic/proposition/true.rb +63 -0
- data/lib/veritas/logic/proposition.rb +110 -0
- data/lib/veritas/logic.rb +5 -0
- data/lib/veritas/optimizer/algebra/difference.rb +64 -0
- data/lib/veritas/optimizer/algebra/extension.rb +40 -0
- data/lib/veritas/optimizer/algebra/intersection.rb +64 -0
- data/lib/veritas/optimizer/algebra/join.rb +42 -0
- data/lib/veritas/optimizer/algebra/product.rb +68 -0
- data/lib/veritas/optimizer/algebra/projection.rb +172 -0
- data/lib/veritas/optimizer/algebra/rename.rb +370 -0
- data/lib/veritas/optimizer/algebra/restriction.rb +257 -0
- data/lib/veritas/optimizer/algebra/summarization.rb +40 -0
- data/lib/veritas/optimizer/algebra/union.rb +64 -0
- data/lib/veritas/optimizer/algebra.rb +10 -0
- data/lib/veritas/optimizer/logic/connective/binary.rb +252 -0
- data/lib/veritas/optimizer/logic/connective/conjunction.rb +120 -0
- data/lib/veritas/optimizer/logic/connective/disjunction.rb +120 -0
- data/lib/veritas/optimizer/logic/connective/negation.rb +69 -0
- data/lib/veritas/optimizer/logic/connective.rb +5 -0
- data/lib/veritas/optimizer/logic/predicate/comparable.rb +132 -0
- data/lib/veritas/optimizer/logic/predicate/enumerable.rb +139 -0
- data/lib/veritas/optimizer/logic/predicate/equality.rb +42 -0
- data/lib/veritas/optimizer/logic/predicate/exclusion.rb +51 -0
- data/lib/veritas/optimizer/logic/predicate/greater_than.rb +52 -0
- data/lib/veritas/optimizer/logic/predicate/greater_than_or_equal_to.rb +54 -0
- data/lib/veritas/optimizer/logic/predicate/inclusion.rb +51 -0
- data/lib/veritas/optimizer/logic/predicate/inequality.rb +42 -0
- data/lib/veritas/optimizer/logic/predicate/less_than.rb +52 -0
- data/lib/veritas/optimizer/logic/predicate/less_than_or_equal_to.rb +54 -0
- data/lib/veritas/optimizer/logic/predicate/match.rb +17 -0
- data/lib/veritas/optimizer/logic/predicate/no_match.rb +17 -0
- data/lib/veritas/optimizer/logic/predicate.rb +187 -0
- data/lib/veritas/optimizer/logic.rb +2 -0
- data/lib/veritas/optimizer/relation/materialized.rb +38 -0
- data/lib/veritas/optimizer/relation/operation/binary.rb +166 -0
- data/lib/veritas/optimizer/relation/operation/combine.rb +31 -0
- data/lib/veritas/optimizer/relation/operation/limit.rb +156 -0
- data/lib/veritas/optimizer/relation/operation/offset.rb +112 -0
- data/lib/veritas/optimizer/relation/operation/order.rb +94 -0
- data/lib/veritas/optimizer/relation/operation/reverse.rb +92 -0
- data/lib/veritas/optimizer/relation/operation/unary.rb +86 -0
- data/lib/veritas/optimizer/relation/operation.rb +8 -0
- data/lib/veritas/optimizer/relation.rb +2 -0
- data/lib/veritas/optimizer.rb +94 -0
- data/lib/veritas/relation/empty.rb +22 -0
- data/lib/veritas/relation/header.rb +267 -0
- data/lib/veritas/relation/materialized.rb +62 -0
- data/lib/veritas/relation/operation/binary.rb +77 -0
- data/lib/veritas/relation/operation/combine.rb +35 -0
- data/lib/veritas/relation/operation/limit.rb +190 -0
- data/lib/veritas/relation/operation/offset.rb +153 -0
- data/lib/veritas/relation/operation/order/direction.rb +209 -0
- data/lib/veritas/relation/operation/order/direction_set.rb +246 -0
- data/lib/veritas/relation/operation/order.rb +138 -0
- data/lib/veritas/relation/operation/reverse.rb +85 -0
- data/lib/veritas/relation/operation/set.rb +76 -0
- data/lib/veritas/relation/operation/unary.rb +25 -0
- data/lib/veritas/relation/operation.rb +10 -0
- data/lib/veritas/relation.rb +210 -0
- data/lib/veritas/support/abstract_class.rb +40 -0
- data/lib/veritas/support/aliasable.rb +29 -0
- data/lib/veritas/support/evaluator.rb +52 -0
- data/lib/veritas/support/immutable.rb +299 -0
- data/lib/veritas/support/operation/binary.rb +73 -0
- data/lib/veritas/support/operation/unary.rb +59 -0
- data/lib/veritas/support/optimizable.rb +51 -0
- data/lib/veritas/tuple.rb +181 -0
- data/lib/veritas/version.rb +3 -0
- data/lib/veritas.rb +54 -0
- data/spec/integration/veritas/algebra/difference/optimize_spec.rb +151 -0
- data/spec/integration/veritas/algebra/intersection/optimize_spec.rb +151 -0
- data/spec/integration/veritas/algebra/join/optimize_spec.rb +111 -0
- data/spec/integration/veritas/algebra/join_spec.rb +14 -0
- data/spec/integration/veritas/algebra/product/optimize_spec.rb +177 -0
- data/spec/integration/veritas/algebra/product_spec.rb +14 -0
- data/spec/integration/veritas/algebra/projection/optimize_spec.rb +238 -0
- data/spec/integration/veritas/algebra/projection_spec.rb +16 -0
- data/spec/integration/veritas/algebra/rename/optimize_spec.rb +441 -0
- data/spec/integration/veritas/algebra/restriction/optimize_spec.rb +301 -0
- data/spec/integration/veritas/algebra/union/optimize_spec.rb +193 -0
- data/spec/integration/veritas/logic/connective/conjunction/optimize_spec.rb +235 -0
- data/spec/integration/veritas/logic/connective/disjunction/optimize_spec.rb +236 -0
- data/spec/integration/veritas/logic/connective/negation/optimize_spec.rb +42 -0
- data/spec/integration/veritas/logic/expression/optimize_spec.rb +34 -0
- data/spec/integration/veritas/logic/predicate/equality/optimize_spec.rb +91 -0
- data/spec/integration/veritas/logic/predicate/exclusion/optimize_spec.rb +132 -0
- data/spec/integration/veritas/logic/predicate/greater_than/optimize_spec.rb +101 -0
- data/spec/integration/veritas/logic/predicate/greater_than_or_equal_to/optimize_spec.rb +101 -0
- data/spec/integration/veritas/logic/predicate/inclusion/optimize_spec.rb +132 -0
- data/spec/integration/veritas/logic/predicate/inequality/optimize_spec.rb +91 -0
- data/spec/integration/veritas/logic/predicate/less_than/optimize_spec.rb +101 -0
- data/spec/integration/veritas/logic/predicate/less_than_or_equal_to/optimize_spec.rb +101 -0
- data/spec/integration/veritas/relation/efficient_enumerable_spec.rb +56 -0
- data/spec/integration/veritas/relation/empty/optimize_spec.rb +12 -0
- data/spec/integration/veritas/relation/materialized/optimize_spec.rb +38 -0
- data/spec/integration/veritas/relation/operation/limit/optimize_spec.rb +141 -0
- data/spec/integration/veritas/relation/operation/offset/optimize_spec.rb +99 -0
- data/spec/integration/veritas/relation/operation/order/optimize_spec.rb +104 -0
- data/spec/integration/veritas/relation/operation/reverse/optimize_spec.rb +114 -0
- data/spec/integration/veritas/relation/optimize_spec.rb +30 -0
- data/spec/rcov.opts +6 -0
- data/spec/shared/idempotent_method_behavior.rb +5 -0
- data/spec/shared/logic_connective_binary_optimize_behavior.rb +100 -0
- data/spec/shared/optimize_method_behavior.rb +13 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/add_method_missing.rb +13 -0
- data/spec/unit/date/pred_spec.rb +15 -0
- data/spec/unit/range/overlaps_spec.rb +190 -0
- data/spec/unit/range/to_inclusive_spec.rb +29 -0
- data/spec/unit/time/pred_spec.rb +15 -0
- data/spec/unit/veritas/abstract_class/class_methods/new_spec.rb +18 -0
- data/spec/unit/veritas/abstract_class/fixtures/classes.rb +7 -0
- data/spec/unit/veritas/algebra/difference/each_spec.rb +30 -0
- data/spec/unit/veritas/algebra/difference/methods/difference_spec.rb +17 -0
- data/spec/unit/veritas/algebra/extension/class_methods/new_spec.rb +20 -0
- data/spec/unit/veritas/algebra/extension/each_spec.rb +17 -0
- data/spec/unit/veritas/algebra/extension/extensions_spec.rb +14 -0
- data/spec/unit/veritas/algebra/extension/header_spec.rb +16 -0
- data/spec/unit/veritas/algebra/extension/methods/extend_spec.rb +14 -0
- data/spec/unit/veritas/algebra/extension/operand_spec.rb +14 -0
- data/spec/unit/veritas/algebra/intersection/each_spec.rb +30 -0
- data/spec/unit/veritas/algebra/intersection/methods/intersect_spec.rb +17 -0
- data/spec/unit/veritas/algebra/join/class_methods/new_spec.rb +26 -0
- data/spec/unit/veritas/algebra/join/each_spec.rb +18 -0
- data/spec/unit/veritas/algebra/join/methods/join_spec.rb +46 -0
- data/spec/unit/veritas/algebra/product/class_methods/new_spec.rb +26 -0
- data/spec/unit/veritas/algebra/product/each_spec.rb +19 -0
- data/spec/unit/veritas/algebra/product/methods/product_spec.rb +12 -0
- data/spec/unit/veritas/algebra/projection/directions_spec.rb +29 -0
- data/spec/unit/veritas/algebra/projection/each_spec.rb +17 -0
- data/spec/unit/veritas/algebra/projection/header_spec.rb +15 -0
- data/spec/unit/veritas/algebra/projection/methods/project_spec.rb +13 -0
- data/spec/unit/veritas/algebra/projection/methods/remove_spec.rb +15 -0
- data/spec/unit/veritas/algebra/rename/aliases/class_methods/coerce_spec.rb +49 -0
- data/spec/unit/veritas/algebra/rename/aliases/each_spec.rb +17 -0
- data/spec/unit/veritas/algebra/rename/aliases/element_reference_spec.rb +22 -0
- data/spec/unit/veritas/algebra/rename/aliases/empty_spec.rb +21 -0
- data/spec/unit/veritas/algebra/rename/aliases/eql_spec.rb +50 -0
- data/spec/unit/veritas/algebra/rename/aliases/equal_value_spec.rb +50 -0
- data/spec/unit/veritas/algebra/rename/aliases/hash_spec.rb +16 -0
- data/spec/unit/veritas/algebra/rename/aliases/to_hash_spec.rb +27 -0
- data/spec/unit/veritas/algebra/rename/aliases/union_spec.rb +65 -0
- data/spec/unit/veritas/algebra/rename/aliases_spec.rb +12 -0
- data/spec/unit/veritas/algebra/rename/directions_spec.rb +29 -0
- data/spec/unit/veritas/algebra/rename/each_spec.rb +21 -0
- data/spec/unit/veritas/algebra/rename/eql_spec.rb +50 -0
- data/spec/unit/veritas/algebra/rename/header_spec.rb +15 -0
- data/spec/unit/veritas/algebra/rename/methods/rename_spec.rb +12 -0
- data/spec/unit/veritas/algebra/restriction/each_spec.rb +16 -0
- data/spec/unit/veritas/algebra/restriction/eql_spec.rb +49 -0
- data/spec/unit/veritas/algebra/restriction/methods/restrict_spec.rb +38 -0
- data/spec/unit/veritas/algebra/restriction/predicate_spec.rb +14 -0
- data/spec/unit/veritas/algebra/summarization/class_methods/summarize_spec.rb +26 -0
- data/spec/unit/veritas/algebra/summarization/each_spec.rb +17 -0
- data/spec/unit/veritas/algebra/summarization/header_spec.rb +16 -0
- data/spec/unit/veritas/algebra/summarization/methods/summarize_spec.rb +30 -0
- data/spec/unit/veritas/algebra/summarization/summarize_by_spec.rb +14 -0
- data/spec/unit/veritas/algebra/summarization/summarizers_spec.rb +14 -0
- data/spec/unit/veritas/algebra/union/each_spec.rb +30 -0
- data/spec/unit/veritas/algebra/union/methods/union_spec.rb +17 -0
- data/spec/unit/veritas/aliasable/fixtures/classes.rb +7 -0
- data/spec/unit/veritas/aliasable/inheritable_alias_spec.rb +48 -0
- data/spec/unit/veritas/attribute/boolean/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/boolean/valid_value_spec.rb +25 -0
- data/spec/unit/veritas/attribute/call_spec.rb +11 -0
- data/spec/unit/veritas/attribute/class/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/class_methods/coerce_spec.rb +29 -0
- data/spec/unit/veritas/attribute/class_methods/name_from_spec.rb +29 -0
- data/spec/unit/veritas/attribute/class_methods/new_spec.rb +33 -0
- data/spec/unit/veritas/attribute/comparable/comparable_spec.rb +49 -0
- data/spec/unit/veritas/attribute/comparable/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/attribute/date/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/date/range_spec.rb +9 -0
- data/spec/unit/veritas/attribute/date_time/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/date_time/range_spec.rb +9 -0
- data/spec/unit/veritas/attribute/decimal/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/eql_spec.rb +48 -0
- data/spec/unit/veritas/attribute/equal_value_spec.rb +48 -0
- data/spec/unit/veritas/attribute/float/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/hash_spec.rb +15 -0
- data/spec/unit/veritas/attribute/inspect_spec.rb +11 -0
- data/spec/unit/veritas/attribute/integer/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/joinable_spec.rb +47 -0
- data/spec/unit/veritas/attribute/name_spec.rb +10 -0
- data/spec/unit/veritas/attribute/numeric/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/numeric/joinable_spec.rb +37 -0
- data/spec/unit/veritas/attribute/numeric/size_spec.rb +19 -0
- data/spec/unit/veritas/attribute/numeric/valid_value_spec.rb +33 -0
- data/spec/unit/veritas/attribute/object/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/options_spec.rb +32 -0
- data/spec/unit/veritas/attribute/orderable/asc_spec.rb +10 -0
- data/spec/unit/veritas/attribute/orderable/desc_spec.rb +10 -0
- data/spec/unit/veritas/attribute/orderable/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/attribute/rename_spec.rb +25 -0
- data/spec/unit/veritas/attribute/required_spec.rb +23 -0
- data/spec/unit/veritas/attribute/string/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/string/joinable_spec.rb +37 -0
- data/spec/unit/veritas/attribute/string/length_spec.rb +19 -0
- data/spec/unit/veritas/attribute/string/valid_value_spec.rb +33 -0
- data/spec/unit/veritas/attribute/time/class_methods/primitive_spec.rb +7 -0
- data/spec/unit/veritas/attribute/time/range_spec.rb +9 -0
- data/spec/unit/veritas/attribute/valid_primitive_spec.rb +19 -0
- data/spec/unit/veritas/attribute/valid_value_spec.rb +35 -0
- data/spec/unit/veritas/evaluator/expression/add_spec.rb +22 -0
- data/spec/unit/veritas/evaluator/expression/expressions_spec.rb +14 -0
- data/spec/unit/veritas/immutable/class_methods/freeze_object_spec.rb +45 -0
- data/spec/unit/veritas/immutable/class_methods/new_spec.rb +12 -0
- data/spec/unit/veritas/immutable/dup_spec.rb +11 -0
- data/spec/unit/veritas/immutable/fixtures/classes.rb +26 -0
- data/spec/unit/veritas/immutable/memoize_methods/freeze_spec.rb +46 -0
- data/spec/unit/veritas/immutable/memoize_methods/memoize_spec.rb +20 -0
- data/spec/unit/veritas/immutable/memoize_methods/memoized_spec.rb +27 -0
- data/spec/unit/veritas/immutable/memoize_spec.rb +13 -0
- data/spec/unit/veritas/immutable/memory/element_reference_spec.rb +24 -0
- data/spec/unit/veritas/immutable/memory/element_set_spec.rb +17 -0
- data/spec/unit/veritas/immutable/module_methods/included_spec.rb +14 -0
- data/spec/unit/veritas/immutable/module_methods/memoize_spec.rb +78 -0
- data/spec/unit/veritas/logic/connective/binary/call_spec.rb +20 -0
- data/spec/unit/veritas/logic/connective/binary/fixtures/classes.rb +8 -0
- data/spec/unit/veritas/logic/connective/binary/rename_spec.rb +41 -0
- data/spec/unit/veritas/logic/connective/conjunction/class_methods/call_spec.rb +33 -0
- data/spec/unit/veritas/logic/connective/conjunction/inspect_spec.rb +12 -0
- data/spec/unit/veritas/logic/connective/conjunction/methods/and_spec.rb +16 -0
- data/spec/unit/veritas/logic/connective/conjunction/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/connective/disjunction/class_methods/call_spec.rb +33 -0
- data/spec/unit/veritas/logic/connective/disjunction/inspect_spec.rb +12 -0
- data/spec/unit/veritas/logic/connective/disjunction/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/connective/disjunction/methods/or_spec.rb +16 -0
- data/spec/unit/veritas/logic/connective/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/connective/inverse_spec.rb +26 -0
- data/spec/unit/veritas/logic/connective/negation/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/connective/negation/inspect_spec.rb +12 -0
- data/spec/unit/veritas/logic/connective/negation/inverse_spec.rb +20 -0
- data/spec/unit/veritas/logic/connective/negation/methods/fixtures/classes.rb +6 -0
- data/spec/unit/veritas/logic/connective/negation/methods/not_spec.rb +23 -0
- data/spec/unit/veritas/logic/connective/unary/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/connective/unary/fixtures/classes.rb +8 -0
- data/spec/unit/veritas/logic/connective/unary/rename_spec.rb +25 -0
- data/spec/unit/veritas/logic/expression/class_methods/call_spec.rb +15 -0
- data/spec/unit/veritas/logic/expression/eql_spec.rb +11 -0
- data/spec/unit/veritas/logic/expression/equal_value_spec.rb +65 -0
- data/spec/unit/veritas/logic/expression/fixtures/classes.rb +4 -0
- data/spec/unit/veritas/logic/expression/hash_spec.rb +10 -0
- data/spec/unit/veritas/logic/expression/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/expression/inverse_spec.rb +15 -0
- data/spec/unit/veritas/logic/expression/rename_spec.rb +13 -0
- data/spec/unit/veritas/logic/predicate/call_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/class_methods/call_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/class_methods/extract_value_spec.rb +20 -0
- data/spec/unit/veritas/logic/predicate/comparable/class_methods/call_spec.rb +8 -0
- data/spec/unit/veritas/logic/predicate/comparable/fixtures/classes.rb +21 -0
- data/spec/unit/veritas/logic/predicate/comparable/inspect_spec.rb +11 -0
- data/spec/unit/veritas/logic/predicate/eql_spec.rb +50 -0
- data/spec/unit/veritas/logic/predicate/equality/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/equality/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/equality/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/equality/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/equality/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/equality/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/equality/methods/eq_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/equality/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/exclusion/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/exclusion/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/exclusion/inspect_spec.rb +13 -0
- data/spec/unit/veritas/logic/predicate/exclusion/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/exclusion/methods/exclude_spec.rb +11 -0
- data/spec/unit/veritas/logic/predicate/exclusion/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/fixtures/classes.rb +12 -0
- data/spec/unit/veritas/logic/predicate/greater_than/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/logic/predicate/greater_than/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/greater_than/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/greater_than/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/greater_than/methods/gt_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/methods/gte_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/hash_spec.rb +15 -0
- data/spec/unit/veritas/logic/predicate/inclusion/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/inclusion/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/inclusion/inspect_spec.rb +13 -0
- data/spec/unit/veritas/logic/predicate/inclusion/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/inclusion/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/inclusion/methods/include_spec.rb +11 -0
- data/spec/unit/veritas/logic/predicate/inequality/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/inequality/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/inequality/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/inequality/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/inequality/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/inequality/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/inequality/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/inequality/methods/ne_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/inspect_spec.rb +11 -0
- data/spec/unit/veritas/logic/predicate/inverse_spec.rb +31 -0
- data/spec/unit/veritas/logic/predicate/less_than/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/logic/predicate/less_than/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/less_than/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/less_than/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/less_than/methods/lt_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/methods/lte_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/match/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/match/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/match/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/match/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/match/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/match/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/match/methods/match_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/no_match/class_methods/call_spec.rb +19 -0
- data/spec/unit/veritas/logic/predicate/no_match/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/no_match/class_methods/operation_spec.rb +7 -0
- data/spec/unit/veritas/logic/predicate/no_match/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/no_match/inverse_spec.rb +16 -0
- data/spec/unit/veritas/logic/predicate/no_match/methods/fixtures/classes.rb +5 -0
- data/spec/unit/veritas/logic/predicate/no_match/methods/no_match_spec.rb +10 -0
- data/spec/unit/veritas/logic/predicate/rename_spec.rb +43 -0
- data/spec/unit/veritas/logic/proposition/call_spec.rb +14 -0
- data/spec/unit/veritas/logic/proposition/class_methods/call_spec.rb +7 -0
- data/spec/unit/veritas/logic/proposition/class_methods/new_spec.rb +23 -0
- data/spec/unit/veritas/logic/proposition/eql_spec.rb +28 -0
- data/spec/unit/veritas/logic/proposition/false/and_spec.rb +10 -0
- data/spec/unit/veritas/logic/proposition/false/class_methods/call_spec.rb +7 -0
- data/spec/unit/veritas/logic/proposition/false/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/proposition/false/inspect_spec.rb +9 -0
- data/spec/unit/veritas/logic/proposition/false/inverse_spec.rb +15 -0
- data/spec/unit/veritas/logic/proposition/false/or_spec.rb +10 -0
- data/spec/unit/veritas/logic/proposition/fixtures/classes.rb +8 -0
- data/spec/unit/veritas/logic/proposition/hash_spec.rb +19 -0
- data/spec/unit/veritas/logic/proposition/inspect_spec.rb +10 -0
- data/spec/unit/veritas/logic/proposition/inverse_spec.rb +27 -0
- data/spec/unit/veritas/logic/proposition/true/and_spec.rb +10 -0
- data/spec/unit/veritas/logic/proposition/true/class_methods/call_spec.rb +7 -0
- data/spec/unit/veritas/logic/proposition/true/class_methods/inverse_spec.rb +7 -0
- data/spec/unit/veritas/logic/proposition/true/inspect_spec.rb +9 -0
- data/spec/unit/veritas/logic/proposition/true/inverse_spec.rb +15 -0
- data/spec/unit/veritas/logic/proposition/true/or_spec.rb +10 -0
- data/spec/unit/veritas/operation/binary/eql_spec.rb +52 -0
- data/spec/unit/veritas/operation/binary/hash_spec.rb +16 -0
- data/spec/unit/veritas/operation/binary/left_spec.rb +12 -0
- data/spec/unit/veritas/operation/binary/right_spec.rb +12 -0
- data/spec/unit/veritas/operation/unary/eql_spec.rb +51 -0
- data/spec/unit/veritas/operation/unary/hash_spec.rb +15 -0
- data/spec/unit/veritas/operation/unary/operand_spec.rb +11 -0
- data/spec/unit/veritas/optimizable/class_methods/optimizer_spec.rb +34 -0
- data/spec/unit/veritas/optimizable/optimize_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_left/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_right/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/difference/equal_operands/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +24 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/projection/header_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimize_spec.rb +39 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/rename/aliases_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/class_methods/union_aliases_spec.rb +25 -0
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/algebra/rename/header_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimize_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_any_aliases/optimizable_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_any_aliases/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +37 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimizable_spec.rb +43 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/class_methods/optimize_predicate_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/false_predicate/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/false_predicate/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimize_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/predicate_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +24 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimize_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimize_spec.rb +24 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/true_predicate/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/true_predicate/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimizable_spec.rb +43 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +24 -0
- data/spec/unit/veritas/optimizer/algebra/union/empty_left/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/union/empty_right/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/algebra/union/equal_operands/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/class_methods/chain_spec.rb +55 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/left_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/right_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimizable_spec.rb +35 -0
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/always_false/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/always_false/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_left_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_left_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_right_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_right_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/always_true/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/always_true/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_left_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_left_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_right_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_right_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/logic/connective/negation/operand_spec.rb +13 -0
- data/spec/unit/veritas/optimizer/logic/predicate/always_false/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/logic/predicate/always_true/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/logic/predicate/class_methods/optimize_operand_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_comparable/optimizable_spec.rb +58 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_equivalent/optimizable_spec.rb +58 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimizable_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimize_spec.rb +11 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/empty_right_operand/optimizable_spec.rb +76 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/one_right_operand/optimizable_spec.rb +76 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimizable_spec.rb +50 -0
- data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimize_spec.rb +38 -0
- data/spec/unit/veritas/optimizer/logic/predicate/equality/always_true/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/predicate/exclusion/empty_right_operand/optimize_spec.rb +44 -0
- data/spec/unit/veritas/optimizer/logic/predicate/exclusion/one_right_operand/optimize_spec.rb +44 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than/always_false/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than/always_true/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/always_false/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/always_true/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inclusion/empty_right_operand/optimize_spec.rb +44 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inclusion/one_right_operand/optimize_spec.rb +44 -0
- data/spec/unit/veritas/optimizer/logic/predicate/inequality/always_false/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/logic/predicate/left_spec.rb +13 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than/always_false/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than/always_true/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/always_false/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/always_true/optimizable_spec.rb +42 -0
- data/spec/unit/veritas/optimizer/logic/predicate/right_spec.rb +13 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/attribute_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/constant_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/max_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/min_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/operation_spec.rb +11 -0
- data/spec/unit/veritas/optimizer/optimizable_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimizable_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimize_spec.rb +14 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_left/optimizable_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_right/optimizable_spec.rb +30 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/equal_operands/optimizable_spec.rb +34 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/left_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimizable_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/right_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimizable_spec.rb +39 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/combine/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimizable_spec.rb +32 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/inequal_limit_operand/optimizable_spec.rb +32 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/inequal_limit_operand/optimize_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimizable_spec.rb +32 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +17 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +20 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimizable_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimizable_spec.rb +21 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/operand_spec.rb +13 -0
- data/spec/unit/veritas/relation/class_methods/new_spec.rb +36 -0
- data/spec/unit/veritas/relation/directions_spec.rb +13 -0
- data/spec/unit/veritas/relation/each_spec.rb +26 -0
- data/spec/unit/veritas/relation/element_reference_spec.rb +12 -0
- data/spec/unit/veritas/relation/empty/each_spec.rb +14 -0
- data/spec/unit/veritas/relation/empty/empty_spec.rb +9 -0
- data/spec/unit/veritas/relation/empty/header_spec.rb +11 -0
- data/spec/unit/veritas/relation/empty_spec.rb +20 -0
- data/spec/unit/veritas/relation/eql_spec.rb +49 -0
- data/spec/unit/veritas/relation/equal_value_spec.rb +96 -0
- data/spec/unit/veritas/relation/hash_spec.rb +13 -0
- data/spec/unit/veritas/relation/header/class_methods/coerce_spec.rb +23 -0
- data/spec/unit/veritas/relation/header/difference_spec.rb +16 -0
- data/spec/unit/veritas/relation/header/each_spec.rb +25 -0
- data/spec/unit/veritas/relation/header/element_reference_spec.rb +19 -0
- data/spec/unit/veritas/relation/header/empty_spec.rb +17 -0
- data/spec/unit/veritas/relation/header/eql_spec.rb +89 -0
- data/spec/unit/veritas/relation/header/equal_value_spec.rb +81 -0
- data/spec/unit/veritas/relation/header/hash_spec.rb +13 -0
- data/spec/unit/veritas/relation/header/index_spec.rb +20 -0
- data/spec/unit/veritas/relation/header/inspect_spec.rb +12 -0
- data/spec/unit/veritas/relation/header/intersect_spec.rb +14 -0
- data/spec/unit/veritas/relation/header/project_spec.rb +11 -0
- data/spec/unit/veritas/relation/header/rename_spec.rb +14 -0
- data/spec/unit/veritas/relation/header/to_ary_spec.rb +14 -0
- data/spec/unit/veritas/relation/header/union_spec.rb +16 -0
- data/spec/unit/veritas/relation/header_spec.rb +14 -0
- data/spec/unit/veritas/relation/materialize_spec.rb +18 -0
- data/spec/unit/veritas/relation/materialized/class_methods/new_spec.rb +34 -0
- data/spec/unit/veritas/relation/materialized/empty_spec.rb +30 -0
- data/spec/unit/veritas/relation/materialized/materialize_spec.rb +9 -0
- data/spec/unit/veritas/relation/materialized/size_spec.rb +11 -0
- data/spec/unit/veritas/relation/operation/binary/class_methods/new_spec.rb +37 -0
- data/spec/unit/veritas/relation/operation/binary/directions_spec.rb +16 -0
- data/spec/unit/veritas/relation/operation/binary/fixtures/classes.rb +12 -0
- data/spec/unit/veritas/relation/operation/binary/header_spec.rb +16 -0
- data/spec/unit/veritas/relation/operation/combine/class_methods/combine_tuples_spec.rb +17 -0
- data/spec/unit/veritas/relation/operation/combine/fixtures/classes.rb +12 -0
- data/spec/unit/veritas/relation/operation/combine/header_spec.rb +18 -0
- data/spec/unit/veritas/relation/operation/limit/class_methods/new_spec.rb +28 -0
- data/spec/unit/veritas/relation/operation/limit/each_spec.rb +17 -0
- data/spec/unit/veritas/relation/operation/limit/eql_spec.rb +50 -0
- data/spec/unit/veritas/relation/operation/limit/methods/first_spec.rb +36 -0
- data/spec/unit/veritas/relation/operation/limit/methods/last_spec.rb +36 -0
- data/spec/unit/veritas/relation/operation/limit/methods/take_spec.rb +14 -0
- data/spec/unit/veritas/relation/operation/limit/to_i_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/offset/class_methods/new_spec.rb +28 -0
- data/spec/unit/veritas/relation/operation/offset/each_spec.rb +17 -0
- data/spec/unit/veritas/relation/operation/offset/eql_spec.rb +51 -0
- data/spec/unit/veritas/relation/operation/offset/methods/drop_spec.rb +14 -0
- data/spec/unit/veritas/relation/operation/offset/to_i_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/order/ascending/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/relation/operation/order/ascending/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/relation/operation/order/ascending/reverse_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/order/class_methods/new_spec.rb +21 -0
- data/spec/unit/veritas/relation/operation/order/descending/class_methods/call_spec.rb +26 -0
- data/spec/unit/veritas/relation/operation/order/descending/class_methods/reverse_spec.rb +7 -0
- data/spec/unit/veritas/relation/operation/order/descending/reverse_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/order/direction/attribute_spec.rb +11 -0
- data/spec/unit/veritas/relation/operation/order/direction/call_spec.rb +22 -0
- data/spec/unit/veritas/relation/operation/order/direction/class_methods/coerce_spec.rb +20 -0
- data/spec/unit/veritas/relation/operation/order/direction/eql_spec.rb +52 -0
- data/spec/unit/veritas/relation/operation/order/direction/hash_spec.rb +15 -0
- data/spec/unit/veritas/relation/operation/order/direction/rename_spec.rb +28 -0
- data/spec/unit/veritas/relation/operation/order/direction/reverse_spec.rb +27 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/attributes_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/class_methods/coerce_spec.rb +26 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/each_spec.rb +27 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/empty_spec.rb +18 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/eql_spec.rb +49 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/equal_value_spec.rb +49 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/hash_spec.rb +14 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/project_spec.rb +14 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/rename_spec.rb +16 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/reverse_spec.rb +19 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/sort_tuples_spec.rb +62 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/to_ary_spec.rb +12 -0
- data/spec/unit/veritas/relation/operation/order/direction_set/union_spec.rb +16 -0
- data/spec/unit/veritas/relation/operation/order/directions_spec.rb +15 -0
- data/spec/unit/veritas/relation/operation/order/each_spec.rb +16 -0
- data/spec/unit/veritas/relation/operation/order/eql_spec.rb +50 -0
- data/spec/unit/veritas/relation/operation/order/header_spec.rb +15 -0
- data/spec/unit/veritas/relation/operation/order/methods/order_spec.rb +44 -0
- data/spec/unit/veritas/relation/operation/reverse/class_methods/new_spec.rb +23 -0
- data/spec/unit/veritas/relation/operation/reverse/each_spec.rb +17 -0
- data/spec/unit/veritas/relation/operation/reverse/methods/reverse_spec.rb +14 -0
- data/spec/unit/veritas/relation/operation/set/class_methods/new_spec.rb +27 -0
- data/spec/unit/veritas/relation/operation/set/fixtures/classes.rb +12 -0
- data/spec/unit/veritas/relation/operation/set/header_spec.rb +15 -0
- data/spec/unit/veritas/relation/operation/unary/directions_spec.rb +15 -0
- data/spec/unit/veritas/relation/operation/unary/fixtures/classes.rb +15 -0
- data/spec/unit/veritas/relation/operation/unary/header_spec.rb +15 -0
- data/spec/unit/veritas/tuple/class_methods/coerce_spec.rb +19 -0
- data/spec/unit/veritas/tuple/element_reference_spec.rb +20 -0
- data/spec/unit/veritas/tuple/eql_spec.rb +88 -0
- data/spec/unit/veritas/tuple/equal_value_spec.rb +81 -0
- data/spec/unit/veritas/tuple/extend_spec.rb +16 -0
- data/spec/unit/veritas/tuple/hash_spec.rb +14 -0
- data/spec/unit/veritas/tuple/header_spec.rb +12 -0
- data/spec/unit/veritas/tuple/inspect_spec.rb +12 -0
- data/spec/unit/veritas/tuple/join_spec.rb +16 -0
- data/spec/unit/veritas/tuple/project_spec.rb +15 -0
- data/spec/unit/veritas/tuple/to_ary_spec.rb +12 -0
- data/tasks/ci.rake +2 -0
- data/tasks/clean.rake +6 -0
- data/tasks/quality/flay.rake +41 -0
- data/tasks/quality/flog.rake +43 -0
- data/tasks/quality/heckle.rake +239 -0
- data/tasks/quality/metric_fu.rake +26 -0
- data/tasks/quality/reek.rake +9 -0
- data/tasks/quality/roodi.rake +15 -0
- data/tasks/quality/yardstick.rake +23 -0
- data/tasks/spec.rake +41 -0
- data/tasks/yard.rake +9 -0
- data/veritas.gemspec +1350 -0
- metadata +1420 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Comparable predicate optimizations
|
|
7
|
+
module Comparable
|
|
8
|
+
|
|
9
|
+
# Optimize when the operands can be normalized
|
|
10
|
+
class NormalizableOperands < Predicate
|
|
11
|
+
|
|
12
|
+
# Test if the operands can be normalized
|
|
13
|
+
#
|
|
14
|
+
# @return [Boolean]
|
|
15
|
+
#
|
|
16
|
+
# @api private
|
|
17
|
+
def optimizable?
|
|
18
|
+
util = Util
|
|
19
|
+
util.constant?(left) && util.attribute?(right)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Normalize the predicate by reversing the operands
|
|
23
|
+
#
|
|
24
|
+
# @return [Predicate]
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
def optimize
|
|
28
|
+
operation.class.reverse.new(right, left)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end # class NormalizableOperands
|
|
32
|
+
|
|
33
|
+
# Optimize when the operands will never be equivalent
|
|
34
|
+
module NeverEquivalent
|
|
35
|
+
|
|
36
|
+
# Test if the operands will never be equivalent
|
|
37
|
+
#
|
|
38
|
+
# @return [Boolean]
|
|
39
|
+
#
|
|
40
|
+
# @api private
|
|
41
|
+
def optimizable?
|
|
42
|
+
util = Util
|
|
43
|
+
if util.constant?(left) then left_invalid_constant?
|
|
44
|
+
elsif util.constant?(right) then right_invalid_constant?
|
|
45
|
+
else
|
|
46
|
+
not_joinable?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
# Test if the left operand is an invalid constant
|
|
53
|
+
#
|
|
54
|
+
# @return [Boolean]
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
def left_invalid_constant?
|
|
58
|
+
!right.valid_value?(left)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Test if the right operand is an invalid constant
|
|
62
|
+
#
|
|
63
|
+
# @return [Boolean]
|
|
64
|
+
#
|
|
65
|
+
# @api private
|
|
66
|
+
def right_invalid_constant?
|
|
67
|
+
!left.valid_value?(right)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Test if the left and right operand are not joinable
|
|
71
|
+
#
|
|
72
|
+
# @return [Boolean]
|
|
73
|
+
#
|
|
74
|
+
# @api private
|
|
75
|
+
def not_joinable?
|
|
76
|
+
!left.joinable?(right)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end # module NeverEquivalent
|
|
80
|
+
|
|
81
|
+
# Optimize when the operands will never be comparable
|
|
82
|
+
module NeverComparable
|
|
83
|
+
|
|
84
|
+
# Test if the operands will never be comparable
|
|
85
|
+
#
|
|
86
|
+
# @return [Boolean]
|
|
87
|
+
#
|
|
88
|
+
# @api private
|
|
89
|
+
def optimizable?
|
|
90
|
+
util = Util
|
|
91
|
+
if util.constant?(left) then left_invalid_constant?
|
|
92
|
+
elsif util.constant?(right) then right_invalid_constant?
|
|
93
|
+
else
|
|
94
|
+
not_comparable?
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
|
|
100
|
+
# Test if the left operand is an invalid constant
|
|
101
|
+
#
|
|
102
|
+
# @return [Boolean]
|
|
103
|
+
#
|
|
104
|
+
# @api private
|
|
105
|
+
def left_invalid_constant?
|
|
106
|
+
!right.valid_primitive?(left)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Test if the right operand is an invalid constant
|
|
110
|
+
#
|
|
111
|
+
# @return [Boolean]
|
|
112
|
+
#
|
|
113
|
+
# @api private
|
|
114
|
+
def right_invalid_constant?
|
|
115
|
+
!left.valid_primitive?(right)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Test if the left and right operand are not comparable
|
|
119
|
+
#
|
|
120
|
+
# @return [Boolean]
|
|
121
|
+
#
|
|
122
|
+
# @api private
|
|
123
|
+
def not_comparable?
|
|
124
|
+
!left.comparable?(right)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end # module NeverComparable
|
|
128
|
+
end # module Comparable
|
|
129
|
+
end # class Predicate
|
|
130
|
+
end # module Logic
|
|
131
|
+
end # class Optimizer
|
|
132
|
+
end # module Veritas
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Enumerable predicate optimizations
|
|
7
|
+
module Enumerable
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
# Optimize the right operand
|
|
12
|
+
#
|
|
13
|
+
# @return [Object]
|
|
14
|
+
#
|
|
15
|
+
# @api private
|
|
16
|
+
def optimize_right
|
|
17
|
+
right = operation.right
|
|
18
|
+
|
|
19
|
+
if right.respond_to?(:to_inclusive)
|
|
20
|
+
optimize_right_range
|
|
21
|
+
elsif right.respond_to?(:select)
|
|
22
|
+
optimize_right_enumerable
|
|
23
|
+
else
|
|
24
|
+
right
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Optimize the right range operand
|
|
29
|
+
#
|
|
30
|
+
# @return [Range]
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
def optimize_right_range
|
|
34
|
+
right = operation.right
|
|
35
|
+
right.to_inclusive if right.overlaps?(left.range)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Optimize the right enumerable operand
|
|
39
|
+
#
|
|
40
|
+
# @return [Enumerable]
|
|
41
|
+
#
|
|
42
|
+
# @api private
|
|
43
|
+
def optimize_right_enumerable
|
|
44
|
+
enumerable = normalized_right_enumerable
|
|
45
|
+
right = operation.right
|
|
46
|
+
|
|
47
|
+
right.eql?(enumerable) ? right : enumerable
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Normalize the right enumerable to only include unique, sorted, valid values
|
|
51
|
+
#
|
|
52
|
+
# @return [Enumerable]
|
|
53
|
+
#
|
|
54
|
+
# @api private
|
|
55
|
+
def normalized_right_enumerable
|
|
56
|
+
enumerable = operation.right.select { |value| left.valid_value?(value) }
|
|
57
|
+
enumerable.sort!
|
|
58
|
+
enumerable.uniq!
|
|
59
|
+
enumerable
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Optimize when the right operand is empty
|
|
63
|
+
module EmptyRightOperand
|
|
64
|
+
include Enumerable
|
|
65
|
+
|
|
66
|
+
# Test if the right operand is empty
|
|
67
|
+
#
|
|
68
|
+
# @return [Boolean]
|
|
69
|
+
#
|
|
70
|
+
# @api private
|
|
71
|
+
def optimizable?
|
|
72
|
+
right_nil? || right_none?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
# Test if the right operand is nil
|
|
78
|
+
#
|
|
79
|
+
# @return [Boolean]
|
|
80
|
+
#
|
|
81
|
+
# @api private
|
|
82
|
+
def right_nil?
|
|
83
|
+
right.nil?
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Test if the right operand has no entries
|
|
87
|
+
#
|
|
88
|
+
# @return [Boolean]
|
|
89
|
+
#
|
|
90
|
+
# @api private
|
|
91
|
+
def right_none?
|
|
92
|
+
right.none? { true }
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end # module EmptyRightOperand
|
|
96
|
+
|
|
97
|
+
# Optimize when the right operand has one entry
|
|
98
|
+
module OneRightOperand
|
|
99
|
+
include Enumerable
|
|
100
|
+
|
|
101
|
+
# Test if the right operand has one entry
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
#
|
|
105
|
+
# @api private
|
|
106
|
+
def optimizable?
|
|
107
|
+
right.one? { true }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end # module OneRightOperand
|
|
111
|
+
|
|
112
|
+
# Optimize when the operands are unoptimized
|
|
113
|
+
class UnoptimizedOperand < Predicate
|
|
114
|
+
include Enumerable
|
|
115
|
+
|
|
116
|
+
# Test if the operands are unoptimized
|
|
117
|
+
#
|
|
118
|
+
# @return [Boolean]
|
|
119
|
+
#
|
|
120
|
+
# @api private
|
|
121
|
+
def optimizable?
|
|
122
|
+
!right.equal?(operation.right)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Return a Enumerable predicate with optimized operands
|
|
126
|
+
#
|
|
127
|
+
# @return [Binary]
|
|
128
|
+
#
|
|
129
|
+
# @api private
|
|
130
|
+
def optimize
|
|
131
|
+
operation.class.new(left, right)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end # class UnoptimizedOperand
|
|
135
|
+
end # module Enumerable
|
|
136
|
+
end # class Predicate
|
|
137
|
+
end # module Logic
|
|
138
|
+
end # class Optimizer
|
|
139
|
+
end # module Veritas
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Equality optimizations
|
|
7
|
+
class Equality < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operand are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Comparable::NeverEquivalent
|
|
13
|
+
include Predicate::AlwaysFalse
|
|
14
|
+
end # class AlwaysFalse
|
|
15
|
+
|
|
16
|
+
# Optimize when the operand are always true
|
|
17
|
+
class AlwaysTrue < self
|
|
18
|
+
include Predicate::AlwaysTrue
|
|
19
|
+
|
|
20
|
+
# Test if the operands are always true
|
|
21
|
+
#
|
|
22
|
+
# @return [Boolean]
|
|
23
|
+
#
|
|
24
|
+
# @api private
|
|
25
|
+
def optimizable?
|
|
26
|
+
left.equal?(right)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end # class AlwaysTrue
|
|
30
|
+
|
|
31
|
+
Veritas::Logic::Predicate::Equality.optimizer = chain(
|
|
32
|
+
ConstantOperands,
|
|
33
|
+
AlwaysFalse,
|
|
34
|
+
AlwaysTrue,
|
|
35
|
+
NormalizableOperands
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
end # class Equality
|
|
39
|
+
end # class Predicate
|
|
40
|
+
end # module Logic
|
|
41
|
+
end # class Optimizer
|
|
42
|
+
end # module Veritas
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Exclusion optimizations
|
|
7
|
+
class Exclusion < self
|
|
8
|
+
include Enumerable
|
|
9
|
+
|
|
10
|
+
# Optimize when the right operand is empty
|
|
11
|
+
class EmptyRightOperand < self
|
|
12
|
+
include Enumerable::EmptyRightOperand
|
|
13
|
+
|
|
14
|
+
# An Exclusion with an empty right operand matches everything
|
|
15
|
+
#
|
|
16
|
+
# @return [True]
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
19
|
+
def optimize
|
|
20
|
+
Veritas::Logic::Proposition::True.instance
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end # class EmptyRightOperand
|
|
24
|
+
|
|
25
|
+
# Optimize when the right operand has one entry
|
|
26
|
+
class OneRightOperand < self
|
|
27
|
+
include Enumerable::OneRightOperand
|
|
28
|
+
|
|
29
|
+
# An Exclusion with a single right operand is equivalent to an Inequality
|
|
30
|
+
#
|
|
31
|
+
# @return [Inequality]
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
def optimize
|
|
35
|
+
Veritas::Logic::Predicate::Inequality.new(left, right.first)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end # class OneRightOperand
|
|
39
|
+
|
|
40
|
+
Veritas::Logic::Predicate::Exclusion.optimizer = chain(
|
|
41
|
+
ConstantOperands,
|
|
42
|
+
EmptyRightOperand,
|
|
43
|
+
OneRightOperand,
|
|
44
|
+
UnoptimizedOperand
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
end # class Exclusion
|
|
48
|
+
end # class Predicate
|
|
49
|
+
end # module Logic
|
|
50
|
+
end # class Optimizer
|
|
51
|
+
end # module Veritas
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing GreaterThan optimizations
|
|
7
|
+
class GreaterThan < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operands are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Predicate::AlwaysFalse
|
|
13
|
+
|
|
14
|
+
# Test if the operands are always false
|
|
15
|
+
#
|
|
16
|
+
# @return [Boolean]
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
19
|
+
def optimizable?
|
|
20
|
+
left.equal?(right) ||
|
|
21
|
+
GreaterThanOrEqualTo::AlwaysFalse.new(operation).optimizable?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end # class AlwaysFalse
|
|
25
|
+
|
|
26
|
+
# Optimize when the operands are always true
|
|
27
|
+
class AlwaysTrue < self
|
|
28
|
+
include Predicate::AlwaysTrue
|
|
29
|
+
|
|
30
|
+
# Test if the operands are always true
|
|
31
|
+
#
|
|
32
|
+
# @return [Boolean]
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
def optimizable?
|
|
36
|
+
operation.class.call(Predicate::Util.min(left), Predicate::Util.max(right))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end # class AlwaysTrue
|
|
40
|
+
|
|
41
|
+
Veritas::Logic::Predicate::GreaterThan.optimizer = chain(
|
|
42
|
+
ConstantOperands,
|
|
43
|
+
AlwaysFalse,
|
|
44
|
+
AlwaysTrue,
|
|
45
|
+
NormalizableOperands
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
end # class GreaterThan
|
|
49
|
+
end # class Predicate
|
|
50
|
+
end # module Logic
|
|
51
|
+
end # class Optimizer
|
|
52
|
+
end # module Veritas
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing GreaterThanOrEqualTo optimizations
|
|
7
|
+
class GreaterThanOrEqualTo < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operands are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Comparable::NeverComparable
|
|
13
|
+
include Predicate::AlwaysFalse
|
|
14
|
+
|
|
15
|
+
# Test if the operands are always false
|
|
16
|
+
#
|
|
17
|
+
# @return [Boolean]
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
def optimizable?
|
|
21
|
+
super || LessThan::AlwaysTrue.new(operation.inverse).optimizable?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end # class AlwaysFalse
|
|
25
|
+
|
|
26
|
+
# Optimize when the operands are always true
|
|
27
|
+
class AlwaysTrue < self
|
|
28
|
+
include Predicate::AlwaysTrue
|
|
29
|
+
|
|
30
|
+
# Test if the operands are always true
|
|
31
|
+
#
|
|
32
|
+
# @return [Boolean]
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
def optimizable?
|
|
36
|
+
operation = self.operation
|
|
37
|
+
GreaterThan::AlwaysTrue.new(operation).optimizable? ||
|
|
38
|
+
Equality::AlwaysTrue.new(operation).optimizable?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class AlwaysTrue
|
|
42
|
+
|
|
43
|
+
Veritas::Logic::Predicate::GreaterThanOrEqualTo.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
AlwaysFalse,
|
|
46
|
+
AlwaysTrue,
|
|
47
|
+
NormalizableOperands
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
end # class GreaterThanOrEqualTo
|
|
51
|
+
end # class Predicate
|
|
52
|
+
end # module Logic
|
|
53
|
+
end # class Optimizer
|
|
54
|
+
end # module Veritas
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Inclusion optimizations
|
|
7
|
+
class Inclusion < self
|
|
8
|
+
include Enumerable
|
|
9
|
+
|
|
10
|
+
# Optimize when the right operand is empty
|
|
11
|
+
class EmptyRightOperand < self
|
|
12
|
+
include Enumerable::EmptyRightOperand
|
|
13
|
+
|
|
14
|
+
# An Inclusion with an empty right operand matches nothing
|
|
15
|
+
#
|
|
16
|
+
# @return [False]
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
19
|
+
def optimize
|
|
20
|
+
Veritas::Logic::Proposition::False.instance
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end # class EmptyRightOperand
|
|
24
|
+
|
|
25
|
+
# Optimize when the right operand has one entry
|
|
26
|
+
class OneRightOperand < self
|
|
27
|
+
include Enumerable::OneRightOperand
|
|
28
|
+
|
|
29
|
+
# An Inclusion with a single right operand is equivalent to an Equality
|
|
30
|
+
#
|
|
31
|
+
# @return [Equality]
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
def optimize
|
|
35
|
+
Veritas::Logic::Predicate::Equality.new(left, right.first)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end # class OneRightOperand
|
|
39
|
+
|
|
40
|
+
Veritas::Logic::Predicate::Inclusion.optimizer = chain(
|
|
41
|
+
ConstantOperands,
|
|
42
|
+
EmptyRightOperand,
|
|
43
|
+
OneRightOperand,
|
|
44
|
+
UnoptimizedOperand
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
end # class Inclusion
|
|
48
|
+
end # class Predicate
|
|
49
|
+
end # module Logic
|
|
50
|
+
end # class Optimizer
|
|
51
|
+
end # module Veritas
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Inequality optimizations
|
|
7
|
+
class Inequality < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operand are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Predicate::AlwaysFalse
|
|
13
|
+
|
|
14
|
+
# Test if the operands are always false
|
|
15
|
+
#
|
|
16
|
+
# @return [Boolean]
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
19
|
+
def optimizable?
|
|
20
|
+
left.equal?(right)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end # class AlwaysFalse
|
|
24
|
+
|
|
25
|
+
# Optimize when the operand are always true
|
|
26
|
+
class AlwaysTrue < self
|
|
27
|
+
include Comparable::NeverEquivalent
|
|
28
|
+
include Predicate::AlwaysTrue
|
|
29
|
+
end # class AlwaysTrue
|
|
30
|
+
|
|
31
|
+
Veritas::Logic::Predicate::Inequality.optimizer = chain(
|
|
32
|
+
ConstantOperands,
|
|
33
|
+
AlwaysFalse,
|
|
34
|
+
AlwaysTrue,
|
|
35
|
+
NormalizableOperands
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
end # class Inequality
|
|
39
|
+
end # class Predicate
|
|
40
|
+
end # module Logic
|
|
41
|
+
end # class Optimizer
|
|
42
|
+
end # module Veritas
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing LessThan optimizations
|
|
7
|
+
class LessThan < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operands are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Predicate::AlwaysFalse
|
|
13
|
+
|
|
14
|
+
# Test if the operands are always false
|
|
15
|
+
#
|
|
16
|
+
# @return [Boolean]
|
|
17
|
+
#
|
|
18
|
+
# @api private
|
|
19
|
+
def optimizable?
|
|
20
|
+
left.equal?(right) ||
|
|
21
|
+
LessThanOrEqualTo::AlwaysFalse.new(operation).optimizable?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end # class AlwaysFalse
|
|
25
|
+
|
|
26
|
+
# Optimize when the operands are always true
|
|
27
|
+
class AlwaysTrue < self
|
|
28
|
+
include Predicate::AlwaysTrue
|
|
29
|
+
|
|
30
|
+
# Test if the operands are always true
|
|
31
|
+
#
|
|
32
|
+
# @return [Boolean]
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
def optimizable?
|
|
36
|
+
operation.class.call(Predicate::Util.max(left), Predicate::Util.min(right))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end # class AlwaysTrue
|
|
40
|
+
|
|
41
|
+
Veritas::Logic::Predicate::LessThan.optimizer = chain(
|
|
42
|
+
ConstantOperands,
|
|
43
|
+
AlwaysFalse,
|
|
44
|
+
AlwaysTrue,
|
|
45
|
+
NormalizableOperands
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
end # class LessThan
|
|
49
|
+
end # class Predicate
|
|
50
|
+
end # module Logic
|
|
51
|
+
end # class Optimizer
|
|
52
|
+
end # module Veritas
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing LessThanOrEqualTo optimizations
|
|
7
|
+
class LessThanOrEqualTo < self
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
# Optimize when the operands are always false
|
|
11
|
+
class AlwaysFalse < self
|
|
12
|
+
include Comparable::NeverComparable
|
|
13
|
+
include Predicate::AlwaysFalse
|
|
14
|
+
|
|
15
|
+
# Test if the operands are always false
|
|
16
|
+
#
|
|
17
|
+
# @return [Boolean]
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
def optimizable?
|
|
21
|
+
super || GreaterThan::AlwaysTrue.new(operation.inverse).optimizable?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end # class AlwaysFalse
|
|
25
|
+
|
|
26
|
+
# Optimize when the operands are always true
|
|
27
|
+
class AlwaysTrue < self
|
|
28
|
+
include Predicate::AlwaysTrue
|
|
29
|
+
|
|
30
|
+
# Test if the operands are always true
|
|
31
|
+
#
|
|
32
|
+
# @return [Boolean]
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
def optimizable?
|
|
36
|
+
operation = self.operation
|
|
37
|
+
LessThan::AlwaysTrue.new(operation).optimizable? ||
|
|
38
|
+
Equality::AlwaysTrue.new(operation).optimizable?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class AlwaysTrue
|
|
42
|
+
|
|
43
|
+
Veritas::Logic::Predicate::LessThanOrEqualTo.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
AlwaysFalse,
|
|
46
|
+
AlwaysTrue,
|
|
47
|
+
NormalizableOperands
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
end # class LessThanOrEqualTo
|
|
51
|
+
end # class Predicate
|
|
52
|
+
end # module Logic
|
|
53
|
+
end # class Optimizer
|
|
54
|
+
end # module Veritas
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Veritas
|
|
2
|
+
class Optimizer
|
|
3
|
+
module Logic
|
|
4
|
+
class Predicate
|
|
5
|
+
|
|
6
|
+
# Abstract base class representing Match optimizations
|
|
7
|
+
class Match < self
|
|
8
|
+
|
|
9
|
+
Veritas::Logic::Predicate::Match.optimizer = chain(
|
|
10
|
+
ConstantOperands
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
end # class Match
|
|
14
|
+
end # class Predicate
|
|
15
|
+
end # module Logic
|
|
16
|
+
end # class Optimizer
|
|
17
|
+
end # module Veritas
|