logic 0.0.4 → 0.0.5
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/lib/array.rb +4 -0
- data/lib/logic_operations.rb +7 -2
- data/lib/test_case.rb +2 -2
- data/lib/test_case_set.rb +55 -0
- data/lib/truth_table.rb +4 -43
- data/spec/test_case_set_spec.rb +23 -0
- metadata +6 -5
- data/spec/truth_table_spec.rb +0 -27
    
        data/lib/array.rb
    CHANGED
    
    
    
        data/lib/logic_operations.rb
    CHANGED
    
    | @@ -1,14 +1,19 @@ | |
| 1 1 | 
             
            require 'array'
         | 
| 2 | 
            +
            require 'test_case_set'
         | 
| 2 3 | 
             
            require 'truth_table'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module LogicStatement
         | 
| 5 6 |  | 
| 7 | 
            +
              def test_cases
         | 
| 8 | 
            +
                @test_cases ||= TestCaseSet.new(condition_count, self)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 6 11 | 
             
              def truth_table
         | 
| 7 | 
            -
                TruthTable.new( | 
| 12 | 
            +
                TruthTable.new(test_cases)
         | 
| 8 13 | 
             
              end
         | 
| 9 14 |  | 
| 10 15 | 
             
              def mcdc_pairs
         | 
| 11 | 
            -
                 | 
| 16 | 
            +
                test_cases.mcdc_pairs
         | 
| 12 17 | 
             
              end
         | 
| 13 18 |  | 
| 14 19 | 
             
              def condition_count
         | 
    
        data/lib/test_case.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 | 
            +
            require 'integer'
         | 
| 1 2 | 
             
            require 'range'
         | 
| 2 3 | 
             
            require 'symbol'
         | 
| 3 | 
            -
            require 'integer'
         | 
| 4 4 |  | 
| 5 5 | 
             
            class TestCase
         | 
| 6 6 |  | 
| @@ -24,7 +24,7 @@ class TestCase | |
| 24 24 | 
             
              end
         | 
| 25 25 |  | 
| 26 26 | 
             
              def output
         | 
| 27 | 
            -
                @decision. | 
| 27 | 
            +
                @decision.evaluate(conditions.dup)
         | 
| 28 28 | 
             
              end
         | 
| 29 29 |  | 
| 30 30 | 
             
              def mcdc_pair(index)
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            require 'test_case'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestCaseSet
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def initialize(condition_count, decision)
         | 
| 6 | 
            +
                @condition_count = condition_count
         | 
| 7 | 
            +
                @decision = decision
         | 
| 8 | 
            +
                @test_cases = create_cases
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def create_cases
         | 
| 12 | 
            +
                case_numbers.map do |case_number|
         | 
| 13 | 
            +
                  TestCase.new(case_number, @condition_count, @decision)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def case_numbers
         | 
| 18 | 
            +
                1..2**@condition_count
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def condition_identifiers
         | 
| 22 | 
            +
                identifier_range.take(@condition_count)
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def identifier_range
         | 
| 26 | 
            +
                'a'..'z'
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def mcdc_pairs
         | 
| 30 | 
            +
                condition_identifiers.map do |condition_identifier|
         | 
| 31 | 
            +
                  "#{condition_identifier} => #{mcdc_pairs_for(condition_identifier)}"
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def mcdc_pairs_for(condition_identifier)
         | 
| 36 | 
            +
                @test_cases.inject([]) do |mcdc_cases, test_case|
         | 
| 37 | 
            +
                  mcdc_pair = test_case.mcdc_pair(index_of(condition_identifier))
         | 
| 38 | 
            +
                  mcdc_cases << mcdc_pair if test_case.is_mcdc_case_for_index?(index_of(condition_identifier))
         | 
| 39 | 
            +
                  mcdc_cases
         | 
| 40 | 
            +
                end.uniq
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              def index_of(condition_identifier)
         | 
| 44 | 
            +
                identifier_range.to_a.index(condition_identifier)
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def count
         | 
| 48 | 
            +
                @test_cases.count
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              def inject(initial, &block)
         | 
| 52 | 
            +
                @test_cases.inject(initial, &block)
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            end
         | 
    
        data/lib/truth_table.rb
    CHANGED
    
    | @@ -1,42 +1,7 @@ | |
| 1 | 
            -
            require 'test_case'
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            class TruthTable
         | 
| 4 2 |  | 
| 5 | 
            -
              def initialize( | 
| 6 | 
            -
                @ | 
| 7 | 
            -
                @decision = decision
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def condition_identifiers
         | 
| 11 | 
            -
                identifier_range.take(@condition_count)
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              def cases
         | 
| 15 | 
            -
                case_numbers.map do |case_number|
         | 
| 16 | 
            -
                  TestCase.new(case_number, @condition_count, @decision)
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
              def case_numbers
         | 
| 21 | 
            -
                1..2**@condition_count
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
              def mcdc_pairs
         | 
| 25 | 
            -
                condition_identifiers.map do |condition_identifier|
         | 
| 26 | 
            -
                  "#{condition_identifier} => #{mcdc_pairs_for(condition_identifier).inspect}"
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
              end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
              def mcdc_pairs_for(condition_identifier)
         | 
| 31 | 
            -
                cases.inject([]) do |mcdc_cases, test_case|
         | 
| 32 | 
            -
                  mcdc_pair = test_case.mcdc_pair(index_of(condition_identifier))
         | 
| 33 | 
            -
                  mcdc_cases << mcdc_pair if test_case.is_mcdc_case_for_index?(index_of(condition_identifier))
         | 
| 34 | 
            -
                  mcdc_cases
         | 
| 35 | 
            -
                end.uniq
         | 
| 36 | 
            -
              end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
              def index_of(condition_identifier)
         | 
| 39 | 
            -
                identifier_range.to_a.index(condition_identifier)
         | 
| 3 | 
            +
              def initialize(test_cases)
         | 
| 4 | 
            +
                @test_cases = test_cases
         | 
| 40 5 | 
             
              end
         | 
| 41 6 |  | 
| 42 7 | 
             
              def to_s
         | 
| @@ -44,18 +9,14 @@ class TruthTable | |
| 44 9 | 
             
              end
         | 
| 45 10 |  | 
| 46 11 | 
             
              def header
         | 
| 47 | 
            -
                conditions = condition_identifiers.join(" ")
         | 
| 12 | 
            +
                conditions = @test_cases.condition_identifiers.join(" ")
         | 
| 48 13 | 
             
                "#{conditions.rjust(conditions.length + 4)} | output\n"
         | 
| 49 14 | 
             
              end
         | 
| 50 15 |  | 
| 51 16 | 
             
              def formatted_cases
         | 
| 52 | 
            -
                 | 
| 17 | 
            +
                @test_cases.inject("") do |output, test_case|
         | 
| 53 18 | 
             
                  output += "#{test_case.number.to_s.rjust(2)}) #{test_case.conditions.join(' ')} | #{test_case.output.to_s.rjust(3)}\n"
         | 
| 54 19 | 
             
                end
         | 
| 55 20 | 
             
              end
         | 
| 56 21 |  | 
| 57 | 
            -
              def identifier_range
         | 
| 58 | 
            -
                'a'..'z'
         | 
| 59 | 
            -
              end
         | 
| 60 | 
            -
             | 
| 61 22 | 
             
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'test_case_set'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe TestCaseSet do
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              describe "with 1 condition" do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                let(:test_case_set) { TestCaseSet.new(1, nil) }
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                describe :condition_dentifiers do
         | 
| 10 | 
            +
                  
         | 
| 11 | 
            +
                  it "includes 'a'" do
         | 
| 12 | 
            +
                    test_case_set.condition_identifiers.should include('a')
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                
         | 
| 17 | 
            +
                it "has 2 test cases" do
         | 
| 18 | 
            +
                  test_case_set.count.should == 2
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
              
         | 
| 23 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 7 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0.0. | 
| 8 | 
            +
              - 5
         | 
| 9 | 
            +
              version: 0.0.5
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Bryan Ash
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2010-04- | 
| 17 | 
            +
            date: 2010-04-08 00:00:00 -04:00
         | 
| 18 18 | 
             
            default_executable: logic
         | 
| 19 19 | 
             
            dependencies: 
         | 
| 20 20 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -58,15 +58,16 @@ files: | |
| 58 58 | 
             
            - lib/array.rb
         | 
| 59 59 | 
             
            - lib/integer.rb
         | 
| 60 60 | 
             
            - lib/logic_operations.rb
         | 
| 61 | 
            +
            - lib/logic_parser.treetop
         | 
| 61 62 | 
             
            - lib/range.rb
         | 
| 62 63 | 
             
            - lib/symbol.rb
         | 
| 63 64 | 
             
            - lib/test_case.rb
         | 
| 65 | 
            +
            - lib/test_case_set.rb
         | 
| 64 66 | 
             
            - lib/truth_table.rb
         | 
| 65 | 
            -
            - lib/logic_parser.treetop
         | 
| 66 67 | 
             
            - bin/logic
         | 
| 67 68 | 
             
            - spec/logic_parser_spec.rb
         | 
| 68 69 | 
             
            - spec/spec.opts
         | 
| 69 | 
            -
            - spec/ | 
| 70 | 
            +
            - spec/test_case_set_spec.rb
         | 
| 70 71 | 
             
            - LICENSE
         | 
| 71 72 | 
             
            - README.rdoc
         | 
| 72 73 | 
             
            has_rdoc: true
         | 
    
        data/spec/truth_table_spec.rb
    DELETED
    
    | @@ -1,27 +0,0 @@ | |
| 1 | 
            -
            require 'truth_table'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe TruthTable do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              describe "with 1 condition" do
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                let(:table) { TruthTable.new(1) }
         | 
| 8 | 
            -
                
         | 
| 9 | 
            -
                describe :condition_dentifiers do
         | 
| 10 | 
            -
                  
         | 
| 11 | 
            -
                  it "includes 'a'" do
         | 
| 12 | 
            -
                    table.condition_identifiers.should include('a')
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                describe :cases do
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  it "has 2 cases" do
         | 
| 20 | 
            -
                    table.cases.length.should == 2
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
              
         | 
| 27 | 
            -
            end
         |