Решение на Четвърта задача - Unit тестване от Стоян Томицин

Обратно към всички решения

Към профила на Стоян Томицин

Резултати

  • 0 точки от тестове
  • 0 бонус точки
  • 0 точки общо
  • 0 успешни тест(а)
  • 1 неуспешни тест(а)

Код

RSpec.describe 'Version' do
describe Version do
it 'Is bigger then' do
expect( Version.new( '1.2.3' ) > Version.new( '1.1.1' ) ).to be true
expect( Version.new( '1.2' ) > Version.new( '1.1.3' ) ).to be true
end
it 'Is smaller then' do
expect( Version.new( '1.2.3' ) < Version.new( '1.3.1' ) ).to be true
expect( Version.new( '1.3' ) < Version.new( '1.5.1' ) ).to be true
end
it 'Is equal' do
expect(Version.new('1.1.3') == Version.new('1.1.4')).to be false
expect(Version.new('1.3.0') == Version.new('1.3')).to be true
expect(Version.new('0.3') == Version.new('3')).to be false
expect(Version.new('1.0.3') == Version.new('1.3')).to be false
end
it 'Is bigger or equal' do
expect(Version.new('1.3') >= Version.new('1.3.0')).to be true
expect(Version.new('0.4') >= Version.new('4')).to be false
expect(Version.new('1.3.2') >= Version.new('1.1.1')).to be true
expect(Version.new('1.3.2') >= Version.new('1.3.1')).to be true
expect(Version.new('1.1.0') >= Version.new('1.1')).to be true
expect(Version.new('1.0.1') >= Version.new('1.1')).to be false
expect(Version.new('1.5') >= Version.new('1.3')).to be true
end
it 'Is smaller or equal' do
expect(Version.new('0.8') <= Version.new('3')).to be true
expect(Version.new('0.8') <= Version.new('0.8.0')).to be true
expect(Version.new('1.8.5') <= Version.new('1.9.9')).to be true
expect(Version.new('1.1.0') <= Version.new('1.1')).to be true
expect(Version.new('1') <= Version.new('0.1')).to be false
end
it '<=>' do
expect(Version.new('1.2.3') <=> Version.new('1.2.5')).to eq 1
expect(Version.new('1.1.2') <=> Version.new('1.2.3')).to eq - 1
expect(Version.new('1.3.5') <=> Version.new('1.1.2')).to eq 1
expect(Version.new('1.1.0') <=> Version.new('1.1')).to eq 0
expect(Version.new('0.1') <=> Version.new('1')).to eq - 1
end
describe '#to_s' do
it 'return as string' do
expect(Version.new('1.2.3').to_s).to eq '1.2.3'
expect(Version.new('1.1.0').to_s).to eq '1.1'
expect(Version.new('1.0.2').to_s).to eq '1.0.2'
end
end
describe '#components' do
it 'return as array' do
expect(Version.new('1.2.3').components).to eq [1, 2, 3]
expect(Version.new('1.3.0').components).to eq [1, 3]
expect(Version.new('1.0.5').components).to eq [1, 0, 5]
end
end
end
end

Лог от изпълнението

F

Failures:

  1) spec passes for the correct solution
     Failure/Error: expect(SOLUTION).to pass_tests
       expected this solution to pass the tests:
       
         class Version
           VALID_VERSION_REGEXP = /\A\z|\A[0-9]+(\.[0-9]+)*\z/
         
           include Comparable
         
           def initialize(version = '')
             unless VALID_VERSION_REGEXP.match(version.to_s)
               raise ArgumentError, "Invalid version string '#{version}'"
             end
         
             @components = version.to_s
               .split('.')
               .map(&:to_i)
               .reverse
               .drop_while(&:zero?)
               .reverse
           end
         
           def <=>(other)
             @components <=> Version.new(other).internal_components
           end
         
           def internal_components(positions = 0)
             padding_size = positions - @components.size
         
             if padding_size > 0
               @components + [0] * padding_size
             elsif positions != 0
               @components.take(positions)
             else
               @components.dup
             end
           end
         
           def components(positions = 0)
             padding_size = positions - @components.size
         
             if padding_size > 0
               @components + [0] * padding_size
             elsif positions != 0
               @components.take(positions)
             else
               @components.dup
             end
           end
         
           def to_s
             @components.join('.')
           end
         
           class Range
             include Enumerable
         
             def initialize(start_version, end_version)
               @start_version = Version.new(start_version)
               @end_version   = Version.new(end_version)
             end
         
             def include?(version)
               (@start_version <=> version) < 1 && (@end_version <=> version) == 1
             end
         
             def each
               current_version = @start_version
         
               while (current_version <=> @end_version) == -1
                 yield current_version
         
                 current_version = increment_version(current_version)
               end
             end
         
             private
         
             def increment_version(version)
               components = version.internal_components(3)
         
               components[2] += 1
         
               components.to_enum.with_index.reverse_each do |_, index|
                 component = components[index]
         
                 if component >= 10 && components[index - 1]
                   components[index]      = 0
                   components[index - 1] += 1
                 end
               end
         
               Version.new(components.join('.'))
             end
           end
         end
       
       
       RSpec log:
       
         .....F..
         
         Failures:
         
           1) Version Version <=>
              Failure/Error: expect(Version.new('1.2.3') <=> Version.new('1.2.5')).to eq 1
                
                expected: 1
                     got: -1
                
                (compared using ==)
              # ./solution_spec.rb:34:in `block (3 levels) in <top (required)>'
         
         Finished in 0.00546 seconds
         8 examples, 1 failure
         
         Failed examples:
         
         rspec ./solution_spec.rb:33 # Version Version <=>
     # /tmp/d20161119-19072-ql8yrv/spec.rb:180:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>'

Finished in 0.73019 seconds
1 example, 1 failure

Failed examples:

rspec /tmp/d20161119-19072-ql8yrv/spec.rb:179 # spec passes for the correct solution

История (1 версия и 0 коментара)

Стоян обнови решението на 18.11.2016 21:32 (преди над 7 години)

+RSpec.describe 'Version' do
+ describe Version do
+ it 'Is bigger then' do
+ expect( Version.new( '1.2.3' ) > Version.new( '1.1.1' ) ).to be true
+ expect( Version.new( '1.2' ) > Version.new( '1.1.3' ) ).to be true
+ end
+ it 'Is smaller then' do
+ expect( Version.new( '1.2.3' ) < Version.new( '1.3.1' ) ).to be true
+ expect( Version.new( '1.3' ) < Version.new( '1.5.1' ) ).to be true
+ end
+ it 'Is equal' do
+ expect(Version.new('1.1.3') == Version.new('1.1.4')).to be false
+ expect(Version.new('1.3.0') == Version.new('1.3')).to be true
+ expect(Version.new('0.3') == Version.new('3')).to be false
+ expect(Version.new('1.0.3') == Version.new('1.3')).to be false
+ end
+ it 'Is bigger or equal' do
+ expect(Version.new('1.3') >= Version.new('1.3.0')).to be true
+ expect(Version.new('0.4') >= Version.new('4')).to be false
+ expect(Version.new('1.3.2') >= Version.new('1.1.1')).to be true
+ expect(Version.new('1.3.2') >= Version.new('1.3.1')).to be true
+ expect(Version.new('1.1.0') >= Version.new('1.1')).to be true
+ expect(Version.new('1.0.1') >= Version.new('1.1')).to be false
+ expect(Version.new('1.5') >= Version.new('1.3')).to be true
+ end
+ it 'Is smaller or equal' do
+ expect(Version.new('0.8') <= Version.new('3')).to be true
+ expect(Version.new('0.8') <= Version.new('0.8.0')).to be true
+ expect(Version.new('1.8.5') <= Version.new('1.9.9')).to be true
+ expect(Version.new('1.1.0') <= Version.new('1.1')).to be true
+ expect(Version.new('1') <= Version.new('0.1')).to be false
+ end
+ it '<=>' do
+ expect(Version.new('1.2.3') <=> Version.new('1.2.5')).to eq 1
+ expect(Version.new('1.1.2') <=> Version.new('1.2.3')).to eq - 1
+ expect(Version.new('1.3.5') <=> Version.new('1.1.2')).to eq 1
+ expect(Version.new('1.1.0') <=> Version.new('1.1')).to eq 0
+ expect(Version.new('0.1') <=> Version.new('1')).to eq - 1
+ end
+
+ describe '#to_s' do
+ it 'return as string' do
+ expect(Version.new('1.2.3').to_s).to eq '1.2.3'
+ expect(Version.new('1.1.0').to_s).to eq '1.1'
+ expect(Version.new('1.0.2').to_s).to eq '1.0.2'
+ end
+ end
+ describe '#components' do
+ it 'return as array' do
+ expect(Version.new('1.2.3').components).to eq [1, 2, 3]
+ expect(Version.new('1.3.0').components).to eq [1, 3]
+ expect(Version.new('1.0.5').components).to eq [1, 0, 5]
+ end
+ end
+ end
+end