axiom-optimizer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gemtest +0 -0
- data/.gitignore +37 -0
- data/.rspec +4 -0
- data/.rvmrc +1 -0
- data/.travis.yml +35 -0
- data/CONTRIBUTING.md +11 -0
- data/Gemfile +10 -0
- data/Gemfile.devtools +57 -0
- data/Guardfile +23 -0
- data/LICENSE +20 -0
- data/README.md +111 -0
- data/Rakefile +5 -0
- data/TODO +144 -0
- data/axiom-optimizer.gemspec +25 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/mutant.yml +3 -0
- data/config/reek.yml +162 -0
- data/config/roodi.yml +16 -0
- data/config/yardstick.yml +2 -0
- data/lib/axiom-optimizer.rb +3 -0
- data/lib/axiom/optimizer.rb +168 -0
- data/lib/axiom/optimizer/aggregate.rb +16 -0
- data/lib/axiom/optimizer/aggregate/count.rb +17 -0
- data/lib/axiom/optimizer/aggregate/maximum.rb +17 -0
- data/lib/axiom/optimizer/aggregate/mean.rb +17 -0
- data/lib/axiom/optimizer/aggregate/minimum.rb +17 -0
- data/lib/axiom/optimizer/aggregate/standard_deviation.rb +17 -0
- data/lib/axiom/optimizer/aggregate/sum.rb +17 -0
- data/lib/axiom/optimizer/aggregate/variance.rb +17 -0
- data/lib/axiom/optimizer/algebra/difference.rb +68 -0
- data/lib/axiom/optimizer/algebra/extension.rb +97 -0
- data/lib/axiom/optimizer/algebra/intersection.rb +68 -0
- data/lib/axiom/optimizer/algebra/join.rb +184 -0
- data/lib/axiom/optimizer/algebra/product.rb +70 -0
- data/lib/axiom/optimizer/algebra/projection.rb +212 -0
- data/lib/axiom/optimizer/algebra/rename.rb +381 -0
- data/lib/axiom/optimizer/algebra/restriction.rb +373 -0
- data/lib/axiom/optimizer/algebra/summarization.rb +200 -0
- data/lib/axiom/optimizer/algebra/union.rb +68 -0
- data/lib/axiom/optimizer/function.rb +87 -0
- data/lib/axiom/optimizer/function/binary.rb +124 -0
- data/lib/axiom/optimizer/function/connective/binary.rb +245 -0
- data/lib/axiom/optimizer/function/connective/conjunction.rb +122 -0
- data/lib/axiom/optimizer/function/connective/disjunction.rb +122 -0
- data/lib/axiom/optimizer/function/connective/negation.rb +65 -0
- data/lib/axiom/optimizer/function/numeric.rb +34 -0
- data/lib/axiom/optimizer/function/numeric/absolute.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/addition.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/division.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/exponentiation.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/modulo.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/multiplication.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/square_root.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/subtraction.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/unary_minus.rb +20 -0
- data/lib/axiom/optimizer/function/numeric/unary_plus.rb +20 -0
- data/lib/axiom/optimizer/function/predicate.rb +61 -0
- data/lib/axiom/optimizer/function/predicate/comparable.rb +144 -0
- data/lib/axiom/optimizer/function/predicate/enumerable.rb +138 -0
- data/lib/axiom/optimizer/function/predicate/equality.rb +44 -0
- data/lib/axiom/optimizer/function/predicate/exclusion.rb +43 -0
- data/lib/axiom/optimizer/function/predicate/greater_than.rb +55 -0
- data/lib/axiom/optimizer/function/predicate/greater_than_or_equal_to.rb +55 -0
- data/lib/axiom/optimizer/function/predicate/inclusion.rb +43 -0
- data/lib/axiom/optimizer/function/predicate/inequality.rb +44 -0
- data/lib/axiom/optimizer/function/predicate/less_than.rb +55 -0
- data/lib/axiom/optimizer/function/predicate/less_than_or_equal_to.rb +55 -0
- data/lib/axiom/optimizer/function/predicate/match.rb +20 -0
- data/lib/axiom/optimizer/function/predicate/no_match.rb +20 -0
- data/lib/axiom/optimizer/function/string/length.rb +31 -0
- data/lib/axiom/optimizer/function/unary.rb +86 -0
- data/lib/axiom/optimizer/optimizable.rb +60 -0
- data/lib/axiom/optimizer/relation/materialized.rb +40 -0
- data/lib/axiom/optimizer/relation/operation/binary.rb +134 -0
- data/lib/axiom/optimizer/relation/operation/combination.rb +33 -0
- data/lib/axiom/optimizer/relation/operation/deletion.rb +20 -0
- data/lib/axiom/optimizer/relation/operation/insertion.rb +20 -0
- data/lib/axiom/optimizer/relation/operation/limit.rb +141 -0
- data/lib/axiom/optimizer/relation/operation/offset.rb +106 -0
- data/lib/axiom/optimizer/relation/operation/order.rb +85 -0
- data/lib/axiom/optimizer/relation/operation/reverse.rb +85 -0
- data/lib/axiom/optimizer/relation/operation/unary.rb +124 -0
- data/lib/axiom/optimizer/support/predicate_partition.rb +184 -0
- data/lib/axiom/optimizer/version.rb +10 -0
- data/spec/integration/axiom/algebra/difference/optimize_spec.rb +160 -0
- data/spec/integration/axiom/algebra/intersection/optimize_spec.rb +160 -0
- data/spec/integration/axiom/algebra/join/optimize_spec.rb +112 -0
- data/spec/integration/axiom/algebra/product/optimize_spec.rb +178 -0
- data/spec/integration/axiom/algebra/projection/optimize_spec.rb +250 -0
- data/spec/integration/axiom/algebra/rename/optimize_spec.rb +442 -0
- data/spec/integration/axiom/algebra/restriction/optimize_spec.rb +218 -0
- data/spec/integration/axiom/algebra/summarization/optimize_spec.rb +49 -0
- data/spec/integration/axiom/algebra/union/optimize_spec.rb +200 -0
- data/spec/integration/axiom/function/connective/conjunction/optimize_spec.rb +236 -0
- data/spec/integration/axiom/function/connective/disjunction/optimize_spec.rb +237 -0
- data/spec/integration/axiom/function/connective/negation/optimize_spec.rb +43 -0
- data/spec/integration/axiom/function/optimize_spec.rb +30 -0
- data/spec/integration/axiom/function/predicate/equality/optimize_spec.rb +92 -0
- data/spec/integration/axiom/function/predicate/exclusion/optimize_spec.rb +133 -0
- data/spec/integration/axiom/function/predicate/greater_than/optimize_spec.rb +102 -0
- data/spec/integration/axiom/function/predicate/greater_than_or_equal_to/optimize_spec.rb +102 -0
- data/spec/integration/axiom/function/predicate/inclusion/optimize_spec.rb +133 -0
- data/spec/integration/axiom/function/predicate/inequality/optimize_spec.rb +92 -0
- data/spec/integration/axiom/function/predicate/less_than/optimize_spec.rb +102 -0
- data/spec/integration/axiom/function/predicate/less_than_or_equal_to/optimize_spec.rb +102 -0
- data/spec/integration/axiom/relation/empty/optimize_spec.rb +13 -0
- data/spec/integration/axiom/relation/materialized/optimize_spec.rb +29 -0
- data/spec/integration/axiom/relation/operation/limit/optimize_spec.rb +142 -0
- data/spec/integration/axiom/relation/operation/offset/optimize_spec.rb +100 -0
- data/spec/integration/axiom/relation/operation/order/optimize_spec.rb +105 -0
- data/spec/integration/axiom/relation/operation/reverse/optimize_spec.rb +115 -0
- data/spec/integration/axiom/relation/optimize_spec.rb +23 -0
- data/spec/rcov.opts +7 -0
- data/spec/shared/function_connective_binary_optimize_behavior.rb +102 -0
- data/spec/shared/optimize_method_behavior.rb +16 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/add_method_missing.rb +15 -0
- data/spec/support/config_alias.rb +3 -0
- data/spec/support/ice_nine_config.rb +6 -0
- data/spec/support/lazy_enumerable.rb +18 -0
- data/spec/unit/axiom/optimizer/algebra/difference/empty_left/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/difference/empty_right/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/difference/equal_operands/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/extension/extensions_spec.rb +31 -0
- data/spec/unit/axiom/optimizer/algebra/extension/order_operand/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/extension/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/extension/unoptimized_operand/optimizable_predicate_spec.rb +37 -0
- data/spec/unit/axiom/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/intersection/empty_left/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/intersection/empty_right/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/join/disjoint_headers/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/join/disjoint_headers/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/join/equal_headers/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/join/equal_headers/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/join/materialized_left/optimizable_predicate_spec.rb +42 -0
- data/spec/unit/axiom/optimizer/algebra/join/materialized_left/optimize_spec.rb +55 -0
- data/spec/unit/axiom/optimizer/algebra/join/materialized_right/optimizable_predicate_spec.rb +42 -0
- data/spec/unit/axiom/optimizer/algebra/join/materialized_right/optimize_spec.rb +55 -0
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_left/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_left/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_right/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/product/table_dee_right/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/algebra/projection/empty_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/projection/empty_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/projection/extension_operand/optimizable_predicate_spec.rb +35 -0
- data/spec/unit/axiom/optimizer/algebra/projection/extension_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/projection/projection_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/projection/projection_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/projection/union_operand/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/projection/union_operand/optimize_spec.rb +25 -0
- data/spec/unit/axiom/optimizer/algebra/projection/unoptimized_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/rename/aliases_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/empty_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/rename/empty_operand/optimize_spec.rb +21 -0
- data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/rename/limit_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/rename/offset_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/order_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/rename/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/rename/projection_operand/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/algebra/rename/projection_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand/optimizable_predicate_spec.rb +30 -0
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_predicate_spec.rb +37 -0
- data/spec/unit/axiom/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/algebra/rename/restriction_operand/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/reverse_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/set_operand/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/rename/set_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/rename/unoptimized_operand/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimizable_predicate_spec.rb +41 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/combination_operand/optimize_spec.rb +35 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/contradiction/optimizable_predicate_spec.rb +46 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/contradiction/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/join_operand/optimizable_predicate_spec.rb +51 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/join_operand/optimize_spec.rb +48 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/order_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/predicate_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/product_operand/optimizable_predicate_spec.rb +44 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/product_operand/optimize_spec.rb +48 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/restriction_operand/optimizable_predicate_spec.rb +30 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/set_operand/optimizable_predicate_spec.rb +30 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/set_operand/optimize_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/tautology/optimizable_predicate_spec.rb +33 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/tautology/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/unoptimized_operand/optimizable_predicate_spec.rb +44 -0
- data/spec/unit/axiom/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/class_methods/extension_default_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_operand/optimize_spec.rb +47 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_summarize_per/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/empty_summarize_per/optimize_spec.rb +25 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/order_operand/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/summarize_per_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/summarizers_spec.rb +31 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/unoptimized_operand/optimizable_predicate_spec.rb +49 -0
- data/spec/unit/axiom/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +30 -0
- data/spec/unit/axiom/optimizer/algebra/union/empty_left/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/union/empty_right/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/algebra/union/equal_operands/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/class_methods/chain_spec.rb +56 -0
- data/spec/unit/axiom/optimizer/function/binary/constant_operands/optimizable_predicate_spec.rb +36 -0
- data/spec/unit/axiom/optimizer/function/binary/constant_operands/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/function/binary/left_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/binary/right_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/binary/unoptimized_operands/optimizable_predicate_spec.rb +37 -0
- data/spec/unit/axiom/optimizer/function/binary/unoptimized_operands/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/function/class_methods/optimize_functions_spec.rb +26 -0
- data/spec/unit/axiom/optimizer/function/class_methods/optimize_operand_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/constant_operands/optimize_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/equal_operands/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/equal_operands/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/left_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_left/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_left/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_right/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/redundant_right/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/function/connective/binary/right_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimizable_predicate_spec.rb +64 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/contradiction/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/optimizable_to_exclusion/optimizable_predicate_spec.rb +61 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +76 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_left/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_left/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_right/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/connective/conjunction/tautology_right/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_left/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_left/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_right/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/contradiction_right/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/optimizable_to_inclusion/optimizable_predicate_spec.rb +61 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +76 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimizable_predicate_spec.rb +64 -0
- data/spec/unit/axiom/optimizer/function/connective/disjunction/tautology/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/function/connective/negation/constant_operand/optimize_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/function/connective/negation/invertible_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/connective/negation/invertible_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/function/connective/negation/operand_spec.rb +14 -0
- data/spec/unit/axiom/optimizer/function/predicate/comparable/never_comparable/optimizable_predicate_spec.rb +74 -0
- data/spec/unit/axiom/optimizer/function/predicate/comparable/never_equivalent/optimizable_predicate_spec.rb +74 -0
- data/spec/unit/axiom/optimizer/function/predicate/comparable/normalizable_operands/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/comparable/normalizable_operands/optimize_spec.rb +21 -0
- data/spec/unit/axiom/optimizer/function/predicate/constant_operands/optimize_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/function/predicate/contradiction/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/class_methods/sort_by_value_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/empty_right/optimizable_predicate_spec.rb +78 -0
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/one_right/optimizable_predicate_spec.rb +78 -0
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/unoptimized_operands/optimizable_predicate_spec.rb +51 -0
- data/spec/unit/axiom/optimizer/function/predicate/enumerable/unoptimized_operands/optimize_spec.rb +66 -0
- data/spec/unit/axiom/optimizer/function/predicate/equality/tautology/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/predicate/exclusion/empty_right/optimize_spec.rb +45 -0
- data/spec/unit/axiom/optimizer/function/predicate/exclusion/one_right/optimize_spec.rb +65 -0
- data/spec/unit/axiom/optimizer/function/predicate/greater_than/contradiction/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/greater_than/tautology/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/predicate/greater_than_or_equal_to/contradiction/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/greater_than_or_equal_to/tautology/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/inclusion/empty_right/optimize_spec.rb +45 -0
- data/spec/unit/axiom/optimizer/function/predicate/inclusion/one_right/optimize_spec.rb +66 -0
- data/spec/unit/axiom/optimizer/function/predicate/inequality/contradiction/optimizable_predicate_spec.rb +29 -0
- data/spec/unit/axiom/optimizer/function/predicate/less_than/contradiction/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/less_than/tautology/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/function/predicate/less_than_or_equal_to/contradiction/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/less_than_or_equal_to/tautology/optimizable_predicate_spec.rb +43 -0
- data/spec/unit/axiom/optimizer/function/predicate/tautology/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/function/unary/constant_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/unary/constant_operand/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/function/unary/operand_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/unary/unoptimized_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/unary/unoptimized_operand/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/function/util/class_methods/attribute_spec.rb +21 -0
- data/spec/unit/axiom/optimizer/function/util/class_methods/constant_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/util/class_methods/max_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/function/util/class_methods/min_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/operation_spec.rb +13 -0
- data/spec/unit/axiom/optimizer/optimizable/class_methods/optimizer_spec.rb +34 -0
- data/spec/unit/axiom/optimizer/optimizable/optimize_spec.rb +38 -0
- data/spec/unit/axiom/optimizer/optimizable_predicate_spec.rb +17 -0
- data/spec/unit/axiom/optimizer/optimize_spec.rb +17 -0
- data/spec/unit/axiom/optimizer/predicate_partition/left_spec.rb +149 -0
- data/spec/unit/axiom/optimizer/predicate_partition/remainder_spec.rb +149 -0
- data/spec/unit/axiom/optimizer/predicate_partition/right_spec.rb +149 -0
- data/spec/unit/axiom/optimizer/relation/materialized/empty_operand/optimizable_predicate_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/materialized/empty_operand/optimize_spec.rb +21 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/empty_left/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/empty_right/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/equal_operands/optimizable_predicate_spec.rb +31 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/left_spec.rb +15 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/materialized_operands/optimizable_predicate_spec.rb +37 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/materialized_operands/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_left/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_left/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_right/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/order_right/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/right_spec.rb +15 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/unoptimized_operands/optimizable_predicate_spec.rb +40 -0
- data/spec/unit/axiom/optimizer/relation/operation/binary/unoptimized_operands/optimize_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/relation/operation/combination/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimizable_predicate_spec.rb +33 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/limit_operand/optimize_spec.rb +35 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +21 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +17 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/one_limit_operand/optimizable_predicate_spec.rb +33 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +18 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/order_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/unoptimized_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/order_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +22 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/reverse_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +19 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_predicate_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/empty_operand/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +17 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/header_spec.rb +15 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/materialized_operand/optimizable_predicate_spec.rb +23 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +20 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/operand_spec.rb +16 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/order_operand/optimizable_predicate_spec.rb +28 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/order_operand/optimize_spec.rb +27 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/unchanged_header/optimizable_predicate_spec.rb +24 -0
- data/spec/unit/axiom/optimizer/relation/operation/unary/unchanged_header/optimize_spec.rb +14 -0
- metadata +697 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing Equality optimizations
|
|
9
|
+
class Equality < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operand are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Comparable::NeverEquivalent, Predicate::Contradiction
|
|
15
|
+
end # class Contradiction
|
|
16
|
+
|
|
17
|
+
# Optimize when the operand are a tautology
|
|
18
|
+
class Tautology < self
|
|
19
|
+
include Predicate::Tautology
|
|
20
|
+
|
|
21
|
+
# Test if the operands are a tautology
|
|
22
|
+
#
|
|
23
|
+
# @return [Boolean]
|
|
24
|
+
#
|
|
25
|
+
# @api private
|
|
26
|
+
def optimizable?
|
|
27
|
+
left.equal?(right)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end # class Tautology
|
|
31
|
+
|
|
32
|
+
Axiom::Function::Predicate::Equality.optimizer = chain(
|
|
33
|
+
ConstantOperands,
|
|
34
|
+
Contradiction,
|
|
35
|
+
Tautology,
|
|
36
|
+
NormalizableOperands,
|
|
37
|
+
UnoptimizedOperands
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
end # class Equality
|
|
41
|
+
end # class Predicate
|
|
42
|
+
end # module Function
|
|
43
|
+
end # class Optimizer
|
|
44
|
+
end # module Axiom
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing Exclusion optimizations
|
|
9
|
+
class Exclusion < self
|
|
10
|
+
include Enumerable
|
|
11
|
+
|
|
12
|
+
# Optimize when the right operand is empty
|
|
13
|
+
class EmptyRight < self
|
|
14
|
+
include Enumerable::EmptyRight, Predicate::Tautology
|
|
15
|
+
end # class EmptyRight
|
|
16
|
+
|
|
17
|
+
# Optimize when the right operand has one entry
|
|
18
|
+
class OneRight < self
|
|
19
|
+
include Enumerable::OneRight
|
|
20
|
+
|
|
21
|
+
# An Exclusion with a single right operand is equivalent to an Inequality
|
|
22
|
+
#
|
|
23
|
+
# @return [Inequality]
|
|
24
|
+
#
|
|
25
|
+
# @api private
|
|
26
|
+
def optimize
|
|
27
|
+
left.ne(right.first)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end # class OneRight
|
|
31
|
+
|
|
32
|
+
Axiom::Function::Predicate::Exclusion.optimizer = chain(
|
|
33
|
+
ConstantOperands,
|
|
34
|
+
EmptyRight,
|
|
35
|
+
OneRight,
|
|
36
|
+
Enumerable::UnoptimizedOperands
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
end # class Exclusion
|
|
40
|
+
end # class Predicate
|
|
41
|
+
end # module Function
|
|
42
|
+
end # class Optimizer
|
|
43
|
+
end # module Axiom
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing GreaterThan optimizations
|
|
9
|
+
class GreaterThan < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operands are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Predicate::Contradiction
|
|
15
|
+
|
|
16
|
+
# Test if the operands are a contradiction
|
|
17
|
+
#
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
def optimizable?
|
|
22
|
+
left.equal?(right) ||
|
|
23
|
+
GreaterThanOrEqualTo::Contradiction.new(operation).optimizable?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end # class Contradiction
|
|
27
|
+
|
|
28
|
+
# Optimize when the operands are a tautology
|
|
29
|
+
class Tautology < self
|
|
30
|
+
include Predicate::Tautology
|
|
31
|
+
|
|
32
|
+
# Test if the operands are a tautology
|
|
33
|
+
#
|
|
34
|
+
# @return [Boolean]
|
|
35
|
+
#
|
|
36
|
+
# @api private
|
|
37
|
+
def optimizable?
|
|
38
|
+
operation.class.call(Util.min(left), Util.max(right))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class Tautology
|
|
42
|
+
|
|
43
|
+
Axiom::Function::Predicate::GreaterThan.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
Contradiction,
|
|
46
|
+
Tautology,
|
|
47
|
+
NormalizableOperands,
|
|
48
|
+
UnoptimizedOperands
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
end # class GreaterThan
|
|
52
|
+
end # class Predicate
|
|
53
|
+
end # module Function
|
|
54
|
+
end # class Optimizer
|
|
55
|
+
end # module Axiom
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing GreaterThanOrEqualTo optimizations
|
|
9
|
+
class GreaterThanOrEqualTo < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operands are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Comparable::NeverComparable, Predicate::Contradiction
|
|
15
|
+
|
|
16
|
+
# Test if the operands are a contradiction
|
|
17
|
+
#
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
def optimizable?
|
|
22
|
+
super || LessThan::Tautology.new(operation.inverse).optimizable?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end # class Contradiction
|
|
26
|
+
|
|
27
|
+
# Optimize when the operands are a tautology
|
|
28
|
+
class Tautology < self
|
|
29
|
+
include Predicate::Tautology
|
|
30
|
+
|
|
31
|
+
# Test if the operands are a tautology
|
|
32
|
+
#
|
|
33
|
+
# @return [Boolean]
|
|
34
|
+
#
|
|
35
|
+
# @api private
|
|
36
|
+
def optimizable?
|
|
37
|
+
GreaterThan::Tautology.new(operation).optimizable? ||
|
|
38
|
+
Equality::Tautology.new(operation).optimizable?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class Tautology
|
|
42
|
+
|
|
43
|
+
Axiom::Function::Predicate::GreaterThanOrEqualTo.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
Contradiction,
|
|
46
|
+
Tautology,
|
|
47
|
+
NormalizableOperands,
|
|
48
|
+
UnoptimizedOperands
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
end # class GreaterThanOrEqualTo
|
|
52
|
+
end # class Predicate
|
|
53
|
+
end # module Function
|
|
54
|
+
end # class Optimizer
|
|
55
|
+
end # module Axiom
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing Inclusion optimizations
|
|
9
|
+
class Inclusion < self
|
|
10
|
+
include Enumerable
|
|
11
|
+
|
|
12
|
+
# Optimize when the right operand is empty
|
|
13
|
+
class EmptyRight < self
|
|
14
|
+
include Enumerable::EmptyRight, Predicate::Contradiction
|
|
15
|
+
end # class EmptyRight
|
|
16
|
+
|
|
17
|
+
# Optimize when the right operand has one entry
|
|
18
|
+
class OneRight < self
|
|
19
|
+
include Enumerable::OneRight
|
|
20
|
+
|
|
21
|
+
# An Inclusion with a single right operand is equivalent to an Equality
|
|
22
|
+
#
|
|
23
|
+
# @return [Equality]
|
|
24
|
+
#
|
|
25
|
+
# @api private
|
|
26
|
+
def optimize
|
|
27
|
+
left.eq(right.first)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end # class OneRight
|
|
31
|
+
|
|
32
|
+
Axiom::Function::Predicate::Inclusion.optimizer = chain(
|
|
33
|
+
ConstantOperands,
|
|
34
|
+
EmptyRight,
|
|
35
|
+
OneRight,
|
|
36
|
+
Enumerable::UnoptimizedOperands
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
end # class Inclusion
|
|
40
|
+
end # class Predicate
|
|
41
|
+
end # module Function
|
|
42
|
+
end # class Optimizer
|
|
43
|
+
end # module Axiom
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing Inequality optimizations
|
|
9
|
+
class Inequality < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operand are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Predicate::Contradiction
|
|
15
|
+
|
|
16
|
+
# Test if the operands are a contradiction
|
|
17
|
+
#
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
def optimizable?
|
|
22
|
+
left.equal?(right)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end # class Contradiction
|
|
26
|
+
|
|
27
|
+
# Optimize when the operand are a tautology
|
|
28
|
+
class Tautology < self
|
|
29
|
+
include Comparable::NeverEquivalent, Predicate::Tautology
|
|
30
|
+
end # class Tautology
|
|
31
|
+
|
|
32
|
+
Axiom::Function::Predicate::Inequality.optimizer = chain(
|
|
33
|
+
ConstantOperands,
|
|
34
|
+
Contradiction,
|
|
35
|
+
Tautology,
|
|
36
|
+
NormalizableOperands,
|
|
37
|
+
UnoptimizedOperands
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
end # class Inequality
|
|
41
|
+
end # class Predicate
|
|
42
|
+
end # module Function
|
|
43
|
+
end # class Optimizer
|
|
44
|
+
end # module Axiom
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing LessThan optimizations
|
|
9
|
+
class LessThan < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operands are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Predicate::Contradiction
|
|
15
|
+
|
|
16
|
+
# Test if the operands are a contradiction
|
|
17
|
+
#
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
def optimizable?
|
|
22
|
+
left.equal?(right) ||
|
|
23
|
+
LessThanOrEqualTo::Contradiction.new(operation).optimizable?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end # class Contradiction
|
|
27
|
+
|
|
28
|
+
# Optimize when the operands are a tautology
|
|
29
|
+
class Tautology < self
|
|
30
|
+
include Predicate::Tautology
|
|
31
|
+
|
|
32
|
+
# Test if the operands are a tautology
|
|
33
|
+
#
|
|
34
|
+
# @return [Boolean]
|
|
35
|
+
#
|
|
36
|
+
# @api private
|
|
37
|
+
def optimizable?
|
|
38
|
+
operation.class.call(Util.max(left), Util.min(right))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class Tautology
|
|
42
|
+
|
|
43
|
+
Axiom::Function::Predicate::LessThan.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
Contradiction,
|
|
46
|
+
Tautology,
|
|
47
|
+
NormalizableOperands,
|
|
48
|
+
UnoptimizedOperands
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
end # class LessThan
|
|
52
|
+
end # class Predicate
|
|
53
|
+
end # module Function
|
|
54
|
+
end # class Optimizer
|
|
55
|
+
end # module Axiom
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing LessThanOrEqualTo optimizations
|
|
9
|
+
class LessThanOrEqualTo < self
|
|
10
|
+
include Comparable
|
|
11
|
+
|
|
12
|
+
# Optimize when the operands are a contradiction
|
|
13
|
+
class Contradiction < self
|
|
14
|
+
include Comparable::NeverComparable, Predicate::Contradiction
|
|
15
|
+
|
|
16
|
+
# Test if the operands are a contradiction
|
|
17
|
+
#
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
def optimizable?
|
|
22
|
+
super || GreaterThan::Tautology.new(operation.inverse).optimizable?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end # class Contradiction
|
|
26
|
+
|
|
27
|
+
# Optimize when the operands are a tautology
|
|
28
|
+
class Tautology < self
|
|
29
|
+
include Predicate::Tautology
|
|
30
|
+
|
|
31
|
+
# Test if the operands are a tautology
|
|
32
|
+
#
|
|
33
|
+
# @return [Boolean]
|
|
34
|
+
#
|
|
35
|
+
# @api private
|
|
36
|
+
def optimizable?
|
|
37
|
+
LessThan::Tautology.new(operation).optimizable? ||
|
|
38
|
+
Equality::Tautology.new(operation).optimizable?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end # class Tautology
|
|
42
|
+
|
|
43
|
+
Axiom::Function::Predicate::LessThanOrEqualTo.optimizer = chain(
|
|
44
|
+
ConstantOperands,
|
|
45
|
+
Contradiction,
|
|
46
|
+
Tautology,
|
|
47
|
+
NormalizableOperands,
|
|
48
|
+
UnoptimizedOperands
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
end # class LessThanOrEqualTo
|
|
52
|
+
end # class Predicate
|
|
53
|
+
end # module Function
|
|
54
|
+
end # class Optimizer
|
|
55
|
+
end # module Axiom
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing Match optimizations
|
|
9
|
+
class Match < self
|
|
10
|
+
|
|
11
|
+
Axiom::Function::Predicate::Match.optimizer = chain(
|
|
12
|
+
ConstantOperands,
|
|
13
|
+
UnoptimizedOperands
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
end # class Match
|
|
17
|
+
end # class Predicate
|
|
18
|
+
end # module Function
|
|
19
|
+
end # class Optimizer
|
|
20
|
+
end # module Axiom
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Axiom
|
|
4
|
+
class Optimizer
|
|
5
|
+
module Function
|
|
6
|
+
class Predicate
|
|
7
|
+
|
|
8
|
+
# Abstract base class representing NoMatch optimizations
|
|
9
|
+
class NoMatch < self
|
|
10
|
+
|
|
11
|
+
Axiom::Function::Predicate::NoMatch.optimizer = chain(
|
|
12
|
+
ConstantOperands,
|
|
13
|
+
UnoptimizedOperands
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
end # class NoMatch
|
|
17
|
+
end # class Predicate
|
|
18
|
+
end # module Function
|
|
19
|
+
end # class Optimizer
|
|
20
|
+
end # module Axiom
|