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.
- data/.gemtest +0 -0
- data/.rvmrc +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +20 -10
- data/Guardfile +22 -0
- data/README.rdoc +2 -0
- data/Rakefile +4 -2
- data/TODO +43 -2
- data/config/flay.yml +2 -2
- data/config/flog.yml +1 -1
- data/config/roodi.yml +4 -4
- data/lib/veritas/optimizer/aggregate/count.rb +17 -0
- data/lib/veritas/optimizer/aggregate/maximum.rb +17 -0
- data/lib/veritas/optimizer/aggregate/mean.rb +17 -0
- data/lib/veritas/optimizer/aggregate/minimum.rb +17 -0
- data/lib/veritas/optimizer/aggregate/standard_deviation.rb +17 -0
- data/lib/veritas/optimizer/aggregate/sum.rb +17 -0
- data/lib/veritas/optimizer/aggregate/variance.rb +17 -0
- data/lib/veritas/optimizer/aggregate.rb +16 -0
- data/lib/veritas/optimizer/algebra/difference.rb +3 -1
- data/lib/veritas/optimizer/algebra/extension.rb +58 -3
- data/lib/veritas/optimizer/algebra/intersection.rb +3 -1
- data/lib/veritas/optimizer/algebra/join.rb +6 -4
- data/lib/veritas/optimizer/algebra/product.rb +3 -1
- data/lib/veritas/optimizer/algebra/projection.rb +23 -54
- data/lib/veritas/optimizer/algebra/rename.rb +55 -80
- data/lib/veritas/optimizer/algebra/restriction.rb +33 -66
- data/lib/veritas/optimizer/algebra/summarization.rb +161 -3
- data/lib/veritas/optimizer/algebra/union.rb +3 -1
- data/lib/veritas/optimizer/function/binary.rb +124 -0
- data/lib/veritas/optimizer/{logic → function}/connective/binary.rb +48 -102
- data/lib/veritas/optimizer/{logic → function}/connective/conjunction.rb +12 -11
- data/lib/veritas/optimizer/{logic → function}/connective/disjunction.rb +15 -14
- data/lib/veritas/optimizer/function/connective/negation.rb +65 -0
- data/lib/veritas/optimizer/function/numeric/absolute.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/addition.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/division.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/exponentiation.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/modulo.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/multiplication.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/square_root.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/subtraction.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/unary_minus.rb +20 -0
- data/lib/veritas/optimizer/function/numeric/unary_plus.rb +20 -0
- data/lib/veritas/optimizer/function/numeric.rb +34 -0
- data/lib/veritas/optimizer/{logic → function}/predicate/comparable.rb +6 -4
- data/lib/veritas/optimizer/{logic → function}/predicate/enumerable.rb +24 -26
- data/lib/veritas/optimizer/{logic → function}/predicate/equality.rb +6 -6
- data/lib/veritas/optimizer/{logic → function}/predicate/exclusion.rb +6 -16
- data/lib/veritas/optimizer/{logic → function}/predicate/greater_than.rb +6 -5
- data/lib/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to.rb +6 -6
- data/lib/veritas/optimizer/{logic → function}/predicate/inclusion.rb +6 -16
- data/lib/veritas/optimizer/{logic → function}/predicate/inequality.rb +6 -6
- data/lib/veritas/optimizer/{logic → function}/predicate/less_than.rb +6 -5
- data/lib/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to.rb +6 -6
- data/lib/veritas/optimizer/{logic → function}/predicate/match.rb +5 -4
- data/lib/veritas/optimizer/{logic → function}/predicate/no_match.rb +5 -4
- data/lib/veritas/optimizer/function/predicate.rb +61 -0
- data/lib/veritas/optimizer/function/string/length.rb +31 -0
- data/lib/veritas/optimizer/function/unary.rb +86 -0
- data/lib/veritas/optimizer/function.rb +87 -0
- data/lib/veritas/optimizer/optimizable.rb +6 -3
- data/lib/veritas/optimizer/relation/operation/binary.rb +36 -70
- data/lib/veritas/optimizer/relation/operation/limit.rb +1 -9
- data/lib/veritas/optimizer/relation/operation/offset.rb +1 -9
- data/lib/veritas/optimizer/relation/operation/order.rb +1 -9
- data/lib/veritas/optimizer/relation/operation/reverse.rb +1 -9
- data/lib/veritas/optimizer/relation/operation/unary.rb +50 -13
- data/lib/veritas/optimizer/version.rb +1 -1
- data/lib/veritas/optimizer.rb +43 -16
- data/spec/integration/veritas/algebra/difference/optimize_spec.rb +6 -4
- data/spec/integration/veritas/algebra/intersection/optimize_spec.rb +6 -4
- data/spec/integration/veritas/algebra/join/optimize_spec.rb +4 -2
- data/spec/integration/veritas/algebra/product/optimize_spec.rb +2 -0
- data/spec/integration/veritas/algebra/projection/optimize_spec.rb +6 -4
- data/spec/integration/veritas/algebra/rename/optimize_spec.rb +2 -0
- data/spec/integration/veritas/algebra/restriction/optimize_spec.rb +9 -7
- data/spec/integration/veritas/algebra/summarization/optimize_spec.rb +49 -0
- data/spec/integration/veritas/algebra/union/optimize_spec.rb +6 -4
- data/spec/integration/veritas/{logic → function}/connective/conjunction/optimize_spec.rb +33 -31
- data/spec/integration/veritas/{logic → function}/connective/disjunction/optimize_spec.rb +30 -28
- data/spec/integration/veritas/{logic → function}/connective/negation/optimize_spec.rb +7 -5
- data/spec/integration/veritas/{logic/expression → function}/optimize_spec.rb +5 -3
- data/spec/integration/veritas/{logic → function}/predicate/equality/optimize_spec.rb +9 -7
- data/spec/integration/veritas/{logic → function}/predicate/exclusion/optimize_spec.rb +13 -11
- data/spec/integration/veritas/{logic → function}/predicate/greater_than/optimize_spec.rb +17 -15
- data/spec/integration/veritas/{logic → function}/predicate/greater_than_or_equal_to/optimize_spec.rb +17 -15
- data/spec/integration/veritas/{logic → function}/predicate/inclusion/optimize_spec.rb +13 -11
- data/spec/integration/veritas/{logic → function}/predicate/inequality/optimize_spec.rb +9 -7
- data/spec/integration/veritas/{logic → function}/predicate/less_than/optimize_spec.rb +17 -15
- data/spec/integration/veritas/{logic → function}/predicate/less_than_or_equal_to/optimize_spec.rb +17 -15
- data/spec/integration/veritas/relation/empty/optimize_spec.rb +2 -0
- data/spec/integration/veritas/relation/materialized/optimize_spec.rb +2 -0
- data/spec/integration/veritas/relation/operation/limit/optimize_spec.rb +3 -1
- data/spec/integration/veritas/relation/operation/offset/optimize_spec.rb +3 -1
- data/spec/integration/veritas/relation/operation/order/optimize_spec.rb +4 -2
- data/spec/integration/veritas/relation/operation/reverse/optimize_spec.rb +4 -2
- data/spec/integration/veritas/relation/optimize_spec.rb +2 -0
- data/spec/shared/{logic_connective_binary_optimize_behavior.rb → function_connective_binary_optimize_behavior.rb} +14 -12
- data/spec/shared/idempotent_method_behavior.rb +2 -0
- data/spec/shared/optimize_method_behavior.rb +2 -0
- data/spec/support/add_method_missing.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_left/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/difference/empty_right/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/difference/equal_operands/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/extension/extensions_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/extension/order_operand/optimizable_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/algebra/extension/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimizable_spec.rb +18 -8
- data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/projection/{set_operand → union_operand}/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/projection/{set_operand → union_operand}/optimize_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +6 -4
- data/spec/unit/veritas/optimizer/algebra/rename/aliases_spec.rb +5 -13
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimizable_spec.rb +17 -7
- data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +7 -5
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimizable_spec.rb +7 -20
- data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimizable_spec.rb +23 -3
- data/spec/unit/veritas/optimizer/algebra/restriction/contradiction/optimize_spec.rb +7 -5
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimize_spec.rb +7 -3
- data/spec/unit/veritas/optimizer/algebra/restriction/predicate_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimizable_spec.rb +5 -3
- data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimize_spec.rb +5 -3
- data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimizable_spec.rb +11 -3
- data/spec/unit/veritas/optimizer/algebra/restriction/tautology/optimize_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimizable_spec.rb +7 -5
- data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/empty_operand/optimize_spec.rb +47 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/empty_summarize_per/optimizable_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/empty_summarize_per/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/order_operand/optimizable_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/summarize_per_spec.rb +29 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/summarizers_spec.rb +31 -0
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimizable_spec.rb +30 -8
- data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +12 -9
- data/spec/unit/veritas/optimizer/algebra/union/empty_left/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/union/empty_right/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/algebra/union/equal_operands/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/class_methods/chain_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/function/binary/constant_operands/optimizable_spec.rb +36 -0
- data/spec/unit/veritas/optimizer/function/binary/constant_operands/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/function/binary/left_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/function/binary/right_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/function/binary/unoptimized_operands/optimizable_spec.rb +37 -0
- data/spec/unit/veritas/optimizer/function/binary/unoptimized_operands/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/function/class_methods/optimize_functions_spec.rb +26 -0
- data/spec/unit/veritas/optimizer/function/class_methods/optimize_operand_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/function/connective/binary/constant_operands/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/equal_operands/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/equal_operands/optimize_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/left_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_left_operand/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_left_operand/optimize_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_right_operand/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/redundant_right_operand/optimize_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/binary/right_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/function/connective/conjunction/contradiction/optimizable_spec.rb +64 -0
- data/spec/unit/veritas/optimizer/function/connective/conjunction/contradiction/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/{logic/connective/disjunction/contradiction_left_operand → function/connective/conjunction/left_operand_tautology}/optimizable_spec.rb +9 -7
- data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/left_operand_tautology/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/optimizable_to_exclusion/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +5 -3
- data/spec/unit/veritas/optimizer/{logic → function}/connective/conjunction/right_operand_tautology/optimizable_spec.rb +6 -4
- data/spec/unit/veritas/optimizer/function/connective/conjunction/right_operand_tautology/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/{logic/connective/conjunction/left_operand_tautology → function/connective/disjunction/contradiction_left_operand}/optimizable_spec.rb +9 -7
- data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_left_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_right_operand/optimizable_spec.rb +6 -4
- data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/contradiction_right_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/optimizable_to_inclusion/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +5 -3
- data/spec/unit/veritas/optimizer/function/connective/disjunction/tautology/optimizable_spec.rb +64 -0
- data/spec/unit/veritas/optimizer/function/connective/disjunction/tautology/optimize_spec.rb +19 -0
- data/spec/unit/veritas/optimizer/function/connective/negation/constant_operand/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/function/connective/negation/invertible_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/function/connective/negation/invertible_operand/optimize_spec.rb +22 -0
- data/spec/unit/veritas/optimizer/{logic → function}/connective/negation/operand_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/never_comparable/optimizable_spec.rb +23 -7
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/never_equivalent/optimizable_spec.rb +23 -7
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/normalizable_operands/optimizable_spec.rb +7 -5
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/comparable/normalizable_operands/optimize_spec.rb +7 -5
- data/spec/unit/veritas/optimizer/function/predicate/constant_operands/optimize_spec.rb +16 -0
- data/spec/unit/veritas/optimizer/function/predicate/contradiction/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/function/predicate/enumerable/class_methods/sort_by_value_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/enumerable/empty_right_operand/optimizable_spec.rb +6 -4
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/enumerable/one_right_operand/optimizable_spec.rb +9 -7
- data/spec/unit/veritas/optimizer/{logic/predicate/enumerable/unoptimized_operand → function/predicate/enumerable/unoptimized_operands}/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic/predicate/enumerable/unoptimized_operand → function/predicate/enumerable/unoptimized_operands}/optimize_spec.rb +18 -5
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/equality/tautology/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/exclusion/empty_right_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/exclusion/one_right_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than/contradiction/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than/tautology/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to/contradiction/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/greater_than_or_equal_to/tautology/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/inclusion/empty_right_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/inclusion/one_right_operand/optimize_spec.rb +8 -6
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/inequality/contradiction/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than/contradiction/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than/tautology/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to/contradiction/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic → function}/predicate/less_than_or_equal_to/tautology/optimizable_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/function/predicate/tautology/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/function/unary/constant_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/function/unary/constant_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/function/unary/operand_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/function/unary/unoptimized_operand/optimizable_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/function/unary/unoptimized_operand/optimize_spec.rb +18 -0
- data/spec/unit/veritas/optimizer/{logic/predicate → function}/util/class_methods/attribute_spec.rb +4 -2
- data/spec/unit/veritas/optimizer/{logic/predicate → function}/util/class_methods/constant_spec.rb +13 -5
- data/spec/unit/veritas/optimizer/function/util/class_methods/max_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/function/util/class_methods/min_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/operation_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/optimizable/class_methods/optimizer_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/optimizable/optimize_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_left/optimizable_spec.rb +2 -4
- data/spec/unit/veritas/optimizer/relation/operation/binary/empty_right/optimizable_spec.rb +2 -4
- data/spec/unit/veritas/optimizer/relation/operation/binary/equal_operands/optimizable_spec.rb +2 -5
- data/spec/unit/veritas/optimizer/relation/operation/binary/left_order_operand/optimizable_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/left_order_operand/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/left_spec.rb +2 -4
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/right_order_operand/optimizable_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/right_order_operand/optimize_spec.rb +23 -0
- data/spec/unit/veritas/optimizer/relation/operation/binary/right_spec.rb +2 -4
- data/spec/unit/veritas/optimizer/relation/operation/binary/{unoptimized_operand → unoptimized_operands}/optimizable_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/relation/operation/binary/{unoptimized_operand → unoptimized_operands}/optimize_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/relation/operation/combination/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimize_spec.rb +3 -1
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimizable_spec.rb +5 -2
- data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/header_spec.rb +15 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimizable_spec.rb +5 -2
- data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +2 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/operand_spec.rb +8 -5
- data/spec/unit/veritas/optimizer/relation/operation/unary/order_operand/optimizable_spec.rb +28 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/order_operand/optimize_spec.rb +27 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/unchanged_header/optimizable_spec.rb +24 -0
- data/spec/unit/veritas/optimizer/relation/operation/unary/unchanged_header/optimize_spec.rb +14 -0
- data/tasks/metrics/ci.rake +7 -0
- data/tasks/{quality → metrics}/flay.rake +0 -0
- data/tasks/{quality → metrics}/flog.rake +0 -0
- data/tasks/{quality → metrics}/heckle.rake +1 -0
- data/tasks/{quality → metrics}/metric_fu.rake +3 -0
- data/tasks/{quality → metrics}/reek.rake +0 -0
- data/tasks/{quality → metrics}/roodi.rake +0 -0
- data/tasks/{quality → metrics}/yardstick.rake +0 -0
- data/tasks/spec.rake +1 -0
- data/veritas-optimizer.gemspec +183 -352
- metadata +232 -357
- data/lib/veritas/optimizer/logic/connective/negation.rb +0 -71
- data/lib/veritas/optimizer/logic/predicate.rb +0 -177
- data/spec/unit/veritas/optimizer/algebra/projection/header_spec.rb +0 -16
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimizable_spec.rb +0 -26
- data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimize_spec.rb +0 -16
- data/spec/unit/veritas/optimizer/algebra/rename/class_methods/union_aliases_spec.rb +0 -27
- data/spec/unit/veritas/optimizer/algebra/rename/header_spec.rb +0 -19
- data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimizable_spec.rb +0 -26
- data/spec/unit/veritas/optimizer/algebra/rename/unchanged_header/optimize_spec.rb +0 -16
- data/spec/unit/veritas/optimizer/algebra/restriction/class_methods/optimize_predicate_spec.rb +0 -31
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimizable_spec.rb +0 -26
- data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimize_spec.rb +0 -18
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimizable_spec.rb +0 -34
- data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimize_spec.rb +0 -21
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimizable_spec.rb +0 -41
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/contradiction/optimize_spec.rb +0 -17
- data/spec/unit/veritas/optimizer/logic/connective/conjunction/right_operand_tautology/optimize_spec.rb +0 -17
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimizable_spec.rb +0 -41
- data/spec/unit/veritas/optimizer/logic/connective/disjunction/tautology/optimize_spec.rb +0 -17
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimizable_spec.rb +0 -26
- data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimize_spec.rb +0 -20
- data/spec/unit/veritas/optimizer/logic/predicate/class_methods/optimize_operand_spec.rb +0 -20
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimizable_spec.rb +0 -29
- data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimize_spec.rb +0 -14
- data/spec/unit/veritas/optimizer/logic/predicate/contradiction/optimize_spec.rb +0 -16
- data/spec/unit/veritas/optimizer/logic/predicate/left_spec.rb +0 -25
- data/spec/unit/veritas/optimizer/logic/predicate/right_spec.rb +0 -25
- data/spec/unit/veritas/optimizer/logic/predicate/tautology/optimize_spec.rb +0 -16
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/max_spec.rb +0 -19
- data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/min_spec.rb +0 -19
- 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
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
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::
|
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
|
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
|
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::
|
27
|
+
Veritas::Function::Predicate::Inequality.new(left, right.first)
|
38
28
|
end
|
39
29
|
|
40
30
|
end # class OneRightOperand
|
41
31
|
|
42
|
-
Veritas::
|
32
|
+
Veritas::Function::Predicate::Exclusion.optimizer = chain(
|
43
33
|
ConstantOperands,
|
44
34
|
EmptyRightOperand,
|
45
35
|
OneRightOperand,
|
46
|
-
|
36
|
+
Enumerable::UnoptimizedOperands
|
47
37
|
)
|
48
38
|
|
49
39
|
end # class Exclusion
|
50
40
|
end # class Predicate
|
51
|
-
end # module
|
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
|
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(
|
38
|
+
operation.class.call(Util.min(left), Util.max(right))
|
39
39
|
end
|
40
40
|
|
41
41
|
end # class Tautology
|
42
42
|
|
43
|
-
Veritas::
|
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
|
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
|
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::
|
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
|
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
|
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::
|
27
|
+
Veritas::Function::Predicate::Equality.new(left, right.first)
|
38
28
|
end
|
39
29
|
|
40
30
|
end # class OneRightOperand
|
41
31
|
|
42
|
-
Veritas::
|
32
|
+
Veritas::Function::Predicate::Inclusion.optimizer = chain(
|
43
33
|
ConstantOperands,
|
44
34
|
EmptyRightOperand,
|
45
35
|
OneRightOperand,
|
46
|
-
|
36
|
+
Enumerable::UnoptimizedOperands
|
47
37
|
)
|
48
38
|
|
49
39
|
end # class Inclusion
|
50
40
|
end # class Predicate
|
51
|
-
end # module
|
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
|
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::
|
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
|
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
|
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(
|
38
|
+
operation.class.call(Util.max(left), Util.min(right))
|
39
39
|
end
|
40
40
|
|
41
41
|
end # class Tautology
|
42
42
|
|
43
|
-
Veritas::
|
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
|
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
|
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::
|
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
|
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
|
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::
|
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
|
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
|
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::
|
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
|
18
|
+
end # module Function
|
18
19
|
end # class Optimizer
|
19
20
|
end # module Veritas
|