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,236 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Function::Connective::Conjunction, '#optimize' do
|
|
6
|
+
subject { object.optimize }
|
|
7
|
+
|
|
8
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
|
9
|
+
let(:object) { described_class.new(left, right) }
|
|
10
|
+
|
|
11
|
+
it_should_behave_like 'Function::Connective::Binary#optimize'
|
|
12
|
+
|
|
13
|
+
context 'left and right are predicates' do
|
|
14
|
+
let(:left) { attribute.gt(1) }
|
|
15
|
+
let(:right) { attribute.lt(3) }
|
|
16
|
+
|
|
17
|
+
it { should equal(object) }
|
|
18
|
+
|
|
19
|
+
it_should_behave_like 'an optimize method'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'left and right are inverse predicates' do
|
|
23
|
+
let(:left) { Function::Connective::Negation.new(attribute.gt(1)) }
|
|
24
|
+
let(:right) { Function::Connective::Negation.new(attribute.lt(3)) }
|
|
25
|
+
|
|
26
|
+
it { should_not equal(object) }
|
|
27
|
+
|
|
28
|
+
it 'reverses the operands' do
|
|
29
|
+
should eql(described_class.new(attribute.lte(1), attribute.gte(3)))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_should_behave_like 'an optimize method'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'left and right are the same' do
|
|
36
|
+
let(:left) { attribute.gt(1) }
|
|
37
|
+
let(:right) { attribute.gt(1) }
|
|
38
|
+
|
|
39
|
+
it { should eql(left) }
|
|
40
|
+
|
|
41
|
+
it_should_behave_like 'an optimize method'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'left and right are tautologys' do
|
|
45
|
+
let(:left) { Function::Proposition::Tautology.instance }
|
|
46
|
+
let(:right) { Function::Proposition::Tautology.instance }
|
|
47
|
+
|
|
48
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
49
|
+
|
|
50
|
+
it_should_behave_like 'an optimize method'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context 'left and right are contradictions' do
|
|
54
|
+
let(:left) { Function::Proposition::Contradiction.instance }
|
|
55
|
+
let(:right) { Function::Proposition::Contradiction.instance }
|
|
56
|
+
|
|
57
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
58
|
+
|
|
59
|
+
it_should_behave_like 'an optimize method'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context 'right is a tautology' do
|
|
63
|
+
let(:left) { attribute.gt(1) }
|
|
64
|
+
let(:right) { Function::Proposition::Tautology.instance }
|
|
65
|
+
|
|
66
|
+
it { should equal(left) }
|
|
67
|
+
|
|
68
|
+
it_should_behave_like 'an optimize method'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'left is a tautology' do
|
|
72
|
+
let(:left) { Function::Proposition::Tautology.instance }
|
|
73
|
+
let(:right) { attribute.lt(3) }
|
|
74
|
+
|
|
75
|
+
it { should equal(right) }
|
|
76
|
+
|
|
77
|
+
it_should_behave_like 'an optimize method'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context 'right is a contradiction' do
|
|
81
|
+
let(:left) { attribute.gt(1) }
|
|
82
|
+
let(:right) { Function::Proposition::Contradiction.instance }
|
|
83
|
+
|
|
84
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
85
|
+
|
|
86
|
+
it_should_behave_like 'an optimize method'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
context 'left is a contradiction' do
|
|
90
|
+
let(:left) { Function::Proposition::Contradiction.instance }
|
|
91
|
+
let(:right) { attribute.lt(3) }
|
|
92
|
+
|
|
93
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
94
|
+
|
|
95
|
+
it_should_behave_like 'an optimize method'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context 'left and right are Equality predicates for the same attribute and different values' do
|
|
99
|
+
let(:left) { attribute.eq(1) }
|
|
100
|
+
let(:right) { attribute.eq(3) }
|
|
101
|
+
|
|
102
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
103
|
+
|
|
104
|
+
it_should_behave_like 'an optimize method'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'left and right are Inequality predicates for the same attribute and different values' do
|
|
108
|
+
let(:left) { attribute.ne(1) }
|
|
109
|
+
let(:right) { attribute.ne(3) }
|
|
110
|
+
|
|
111
|
+
it { should eql(attribute.exclude([ 1, 3 ])) }
|
|
112
|
+
|
|
113
|
+
it_should_behave_like 'an optimize method'
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context 'left is an Equality and right is an Inequality predicate for the same attribute and value' do
|
|
117
|
+
let(:left) { attribute.eq(1) }
|
|
118
|
+
let(:right) { attribute.ne(1) }
|
|
119
|
+
|
|
120
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
121
|
+
|
|
122
|
+
it_should_behave_like 'an optimize method'
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context 'left is an Inequality and right is an Equality predicate for the same attribute and value' do
|
|
126
|
+
let(:left) { attribute.ne(1) }
|
|
127
|
+
let(:right) { attribute.eq(1) }
|
|
128
|
+
|
|
129
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
130
|
+
|
|
131
|
+
it_should_behave_like 'an optimize method'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context 'left is an Inclusion and right is an Exclusion predicate for the same attribute and value' do
|
|
135
|
+
let(:left) { attribute.include([ 1, 2 ]) }
|
|
136
|
+
let(:right) { attribute.exclude([ 1, 2 ]) }
|
|
137
|
+
|
|
138
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
139
|
+
|
|
140
|
+
it_should_behave_like 'an optimize method'
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
context 'left is an Exclusion and right is an Inclusion predicate for the same attribute and value' do
|
|
144
|
+
let(:left) { attribute.exclude([ 1, 2 ]) }
|
|
145
|
+
let(:right) { attribute.include([ 1, 2 ]) }
|
|
146
|
+
|
|
147
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
148
|
+
|
|
149
|
+
it_should_behave_like 'an optimize method'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context 'left is a GreaterThan and right is a LessThanOrEqualTo predicate for the same attribute and value' do
|
|
153
|
+
let(:left) { attribute.gt(1) }
|
|
154
|
+
let(:right) { attribute.lte(1) }
|
|
155
|
+
|
|
156
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
157
|
+
|
|
158
|
+
it_should_behave_like 'an optimize method'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'left is an LessThanOrEqualTo and right is an GreaterThan predicate for the same attribute and value' do
|
|
162
|
+
let(:left) { attribute.lte(1) }
|
|
163
|
+
let(:right) { attribute.gt(1) }
|
|
164
|
+
|
|
165
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
166
|
+
|
|
167
|
+
it_should_behave_like 'an optimize method'
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
context 'left is a GreaterThanOrEqualTo and right is a LessThan predicate for the same attribute and value' do
|
|
171
|
+
let(:left) { attribute.gte(1) }
|
|
172
|
+
let(:right) { attribute.lt(1) }
|
|
173
|
+
|
|
174
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
175
|
+
|
|
176
|
+
it_should_behave_like 'an optimize method'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
context 'left is an LessThan and right is an GreaterThanOrEqualTo predicate for the same attribute and value' do
|
|
180
|
+
let(:left) { attribute.lt(1) }
|
|
181
|
+
let(:right) { attribute.gte(1) }
|
|
182
|
+
|
|
183
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
184
|
+
|
|
185
|
+
it_should_behave_like 'an optimize method'
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
context 'left is a Match and right is a NoMatch predicate for the same attribute and value' do
|
|
189
|
+
let(:attribute) { Attribute::String.new(:name) }
|
|
190
|
+
let(:left) { attribute.match(/Dan Kubb/) }
|
|
191
|
+
let(:right) { attribute.no_match(/Dan Kubb/) }
|
|
192
|
+
|
|
193
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
194
|
+
|
|
195
|
+
it_should_behave_like 'an optimize method'
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context 'left is an NoMatch and right is an Match predicate for the same attribute and value' do
|
|
199
|
+
let(:attribute) { Attribute::String.new(:name) }
|
|
200
|
+
let(:left) { attribute.no_match(/Dan Kubb/) }
|
|
201
|
+
let(:right) { attribute.match(/Dan Kubb/) }
|
|
202
|
+
|
|
203
|
+
it { should equal(Function::Proposition::Contradiction.instance) }
|
|
204
|
+
|
|
205
|
+
it_should_behave_like 'an optimize method'
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context 'left and right are predicates for the same attribute and the same values' do
|
|
209
|
+
let(:left) { attribute.eq(1) }
|
|
210
|
+
let(:right) { attribute.eq(1) }
|
|
211
|
+
|
|
212
|
+
it { should eql(attribute.eq(1)) }
|
|
213
|
+
|
|
214
|
+
it_should_behave_like 'an optimize method'
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
context 'left and right are predicates for the same attribute, but left.right is an attribute' do
|
|
218
|
+
let(:other) { Attribute::Integer.new(:other_id) }
|
|
219
|
+
let(:left) { attribute.eq(other) }
|
|
220
|
+
let(:right) { attribute.eq(1) }
|
|
221
|
+
|
|
222
|
+
it { should equal(object) }
|
|
223
|
+
|
|
224
|
+
it_should_behave_like 'an optimize method'
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
context 'left and right are predicates for the same attribute, but right.right is an attribute' do
|
|
228
|
+
let(:other) { Attribute::Integer.new(:other_id) }
|
|
229
|
+
let(:left) { attribute.eq(1) }
|
|
230
|
+
let(:right) { attribute.eq(other) }
|
|
231
|
+
|
|
232
|
+
it { should equal(object) }
|
|
233
|
+
|
|
234
|
+
it_should_behave_like 'an optimize method'
|
|
235
|
+
end
|
|
236
|
+
end
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Function::Connective::Disjunction, '#optimize' do
|
|
6
|
+
subject { object.optimize }
|
|
7
|
+
|
|
8
|
+
let(:attribute) { Attribute::Integer.new(:id) }
|
|
9
|
+
let(:object) { described_class.new(left, right) }
|
|
10
|
+
|
|
11
|
+
it_should_behave_like 'Function::Connective::Binary#optimize'
|
|
12
|
+
|
|
13
|
+
context 'left and right are predicates' do
|
|
14
|
+
let(:left) { attribute.gt(1) }
|
|
15
|
+
let(:right) { attribute.lt(3) }
|
|
16
|
+
|
|
17
|
+
it { should equal(object) }
|
|
18
|
+
|
|
19
|
+
it_should_behave_like 'an optimize method'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'left and right are inverse predicates' do
|
|
23
|
+
let(:left) { Function::Connective::Negation.new(attribute.gt(1)) }
|
|
24
|
+
let(:right) { Function::Connective::Negation.new(attribute.lt(3)) }
|
|
25
|
+
|
|
26
|
+
it { should_not equal(object) }
|
|
27
|
+
|
|
28
|
+
it 'reverses the operands' do
|
|
29
|
+
should eql(Function::Connective::Disjunction.new(attribute.lte(1), attribute.gte(3)))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_should_behave_like 'an optimize method'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'left and right are the same' do
|
|
36
|
+
let(:left) { attribute.gt(1) }
|
|
37
|
+
let(:right) { attribute.gt(1) }
|
|
38
|
+
|
|
39
|
+
it { should equal(left) }
|
|
40
|
+
|
|
41
|
+
it_should_behave_like 'an optimize method'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context 'left and right are tautologys' do
|
|
45
|
+
let(:left) { Function::Proposition::Tautology.instance }
|
|
46
|
+
let(:right) { Function::Proposition::Tautology.instance }
|
|
47
|
+
|
|
48
|
+
it { should equal(left) }
|
|
49
|
+
|
|
50
|
+
it_should_behave_like 'an optimize method'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context 'left and right are contradictions' do
|
|
54
|
+
let(:left) { Function::Proposition::Contradiction.instance }
|
|
55
|
+
let(:right) { Function::Proposition::Contradiction.instance }
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
it { should equal(left) }
|
|
59
|
+
|
|
60
|
+
it_should_behave_like 'an optimize method'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context 'right is a tautology' do
|
|
64
|
+
let(:left) { attribute.gt(1) }
|
|
65
|
+
let(:right) { Function::Proposition::Tautology.instance }
|
|
66
|
+
|
|
67
|
+
it { should equal(right) }
|
|
68
|
+
|
|
69
|
+
it_should_behave_like 'an optimize method'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context 'left is a tautology' do
|
|
73
|
+
let(:left) { Function::Proposition::Tautology.instance }
|
|
74
|
+
let(:right) { attribute.lt(3) }
|
|
75
|
+
|
|
76
|
+
it { should equal(left) }
|
|
77
|
+
|
|
78
|
+
it_should_behave_like 'an optimize method'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'right is a contradiction' do
|
|
82
|
+
let(:left) { attribute.gt(1) }
|
|
83
|
+
let(:right) { Function::Proposition::Contradiction.instance }
|
|
84
|
+
|
|
85
|
+
it { should equal(left) }
|
|
86
|
+
|
|
87
|
+
it_should_behave_like 'an optimize method'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context 'left is a contradiction' do
|
|
91
|
+
let(:left) { Function::Proposition::Contradiction.instance }
|
|
92
|
+
let(:right) { attribute.lt(3) }
|
|
93
|
+
|
|
94
|
+
it { should equal(right) }
|
|
95
|
+
|
|
96
|
+
it_should_behave_like 'an optimize method'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context 'left and right are Equality predicates for the same attribute and different values' do
|
|
100
|
+
let(:left) { attribute.eq(1) }
|
|
101
|
+
let(:right) { attribute.eq(3) }
|
|
102
|
+
|
|
103
|
+
it { should eql(attribute.include([ 1, 3 ])) }
|
|
104
|
+
|
|
105
|
+
it_should_behave_like 'an optimize method'
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context 'left and right are Inequality predicates for the same attribute and different values' do
|
|
109
|
+
let(:left) { attribute.ne(1) }
|
|
110
|
+
let(:right) { attribute.ne(3) }
|
|
111
|
+
|
|
112
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
113
|
+
|
|
114
|
+
it_should_behave_like 'an optimize method'
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context 'left is an Equality and right is an Inequality predicate for the same attribute and value' do
|
|
118
|
+
let(:left) { attribute.eq(1) }
|
|
119
|
+
let(:right) { attribute.ne(1) }
|
|
120
|
+
|
|
121
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
122
|
+
|
|
123
|
+
it_should_behave_like 'an optimize method'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context 'left is an Inequality and right is an Equality predicate for the same attribute and value' do
|
|
127
|
+
let(:left) { attribute.ne(1) }
|
|
128
|
+
let(:right) { attribute.eq(1) }
|
|
129
|
+
|
|
130
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
131
|
+
|
|
132
|
+
it_should_behave_like 'an optimize method'
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
context 'left is an Inclusion and right is an Exclusion predicate for the same attribute and value' do
|
|
136
|
+
let(:left) { attribute.include([ 1, 2 ]) }
|
|
137
|
+
let(:right) { attribute.exclude([ 1, 2 ]) }
|
|
138
|
+
|
|
139
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
140
|
+
|
|
141
|
+
it_should_behave_like 'an optimize method'
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
context 'left is an Exclusion and right is an Inclusion predicate for the same attribute and value' do
|
|
145
|
+
let(:left) { attribute.exclude([ 1, 2 ]) }
|
|
146
|
+
let(:right) { attribute.include([ 1, 2 ]) }
|
|
147
|
+
|
|
148
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
149
|
+
|
|
150
|
+
it_should_behave_like 'an optimize method'
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context 'left is a GreaterThan and right is a LessThanOrEqualTo predicate for the same attribute and value' do
|
|
154
|
+
let(:left) { attribute.gt(1) }
|
|
155
|
+
let(:right) { attribute.lte(1) }
|
|
156
|
+
|
|
157
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
158
|
+
|
|
159
|
+
it_should_behave_like 'an optimize method'
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
context 'left is an LessThanOrEqualTo and right is an GreaterThan predicate for the same attribute and value' do
|
|
163
|
+
let(:left) { attribute.lte(1) }
|
|
164
|
+
let(:right) { attribute.gt(1) }
|
|
165
|
+
|
|
166
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
167
|
+
|
|
168
|
+
it_should_behave_like 'an optimize method'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context 'left is a GreaterThanOrEqualTo and right is a LessThan predicate for the same attribute and value' do
|
|
172
|
+
let(:left) { attribute.gte(1) }
|
|
173
|
+
let(:right) { attribute.lt(1) }
|
|
174
|
+
|
|
175
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
176
|
+
|
|
177
|
+
it_should_behave_like 'an optimize method'
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
context 'left is an LessThan and right is an GreaterThanOrEqualTo predicate for the same attribute and value' do
|
|
181
|
+
let(:left) { attribute.lt(1) }
|
|
182
|
+
let(:right) { attribute.gte(1) }
|
|
183
|
+
|
|
184
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
185
|
+
|
|
186
|
+
it_should_behave_like 'an optimize method'
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context 'left is a Match and right is a NoMatch predicate for the same attribute and value' do
|
|
190
|
+
let(:attribute) { Attribute::String.new(:name) }
|
|
191
|
+
let(:left) { attribute.match(/Dan Kubb/) }
|
|
192
|
+
let(:right) { attribute.no_match(/Dan Kubb/) }
|
|
193
|
+
|
|
194
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
195
|
+
|
|
196
|
+
it_should_behave_like 'an optimize method'
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
context 'left is an NoMatch and right is an Match predicate for the same attribute and value' do
|
|
200
|
+
let(:attribute) { Attribute::String.new(:name) }
|
|
201
|
+
let(:left) { attribute.no_match(/Dan Kubb/) }
|
|
202
|
+
let(:right) { attribute.match(/Dan Kubb/) }
|
|
203
|
+
|
|
204
|
+
it { should equal(Function::Proposition::Tautology.instance) }
|
|
205
|
+
|
|
206
|
+
it_should_behave_like 'an optimize method'
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
context 'left and right are predicates for the same attribute and the same values' do
|
|
210
|
+
let(:left) { attribute.eq(1) }
|
|
211
|
+
let(:right) { attribute.eq(1) }
|
|
212
|
+
|
|
213
|
+
it { should eql(attribute.eq(1)) }
|
|
214
|
+
|
|
215
|
+
it_should_behave_like 'an optimize method'
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
context 'left and right are predicates for the same attribute, but left.right is an attribute' do
|
|
219
|
+
let(:other) { Attribute::Integer.new(:other_id) }
|
|
220
|
+
let(:left) { attribute.eq(other) }
|
|
221
|
+
let(:right) { attribute.eq(1) }
|
|
222
|
+
|
|
223
|
+
it { should equal(object) }
|
|
224
|
+
|
|
225
|
+
it_should_behave_like 'an optimize method'
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
context 'left and right are predicates for the same attribute, but right.right is an attribute' do
|
|
229
|
+
let(:other) { Attribute::Integer.new(:other_id) }
|
|
230
|
+
let(:left) { attribute.eq(1) }
|
|
231
|
+
let(:right) { attribute.eq(other) }
|
|
232
|
+
|
|
233
|
+
it { should equal(object) }
|
|
234
|
+
|
|
235
|
+
it_should_behave_like 'an optimize method'
|
|
236
|
+
end
|
|
237
|
+
end
|