Skip to content

Instantly share code, notes, and snippets.

@fuadsaud
Created November 24, 2015 00:45
Show Gist options
  • Select an option

  • Save fuadsaud/3963d4ccff696d7cf40d to your computer and use it in GitHub Desktop.

Select an option

Save fuadsaud/3963d4ccff696d7cf40d to your computer and use it in GitHub Desktop.

Revisions

  1. fuadsaud created this gist Nov 24, 2015.
    47 changes: 47 additions & 0 deletions test_price.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    require_relative 'check_out'
    require 'minitest/autorun'

    class TestPrice < Minitest::Test
    RULES = [
    ModPrice.new('A', 3, 50, 130),
    ModPrice.new('B', 2, 30, 45),
    FixedPrice.new('C', 20),
    FixedPrice.new('D', 15),
    ]

    def test_totals
    assert_equal( 0, price(""))
    assert_equal( 50, price("A"))
    assert_equal( 80, price("AB"))
    assert_equal(115, price("CDBA"))

    assert_equal(100, price("AA"))
    assert_equal(130, price("AAA"))
    assert_equal(180, price("AAAA"))
    assert_equal(230, price("AAAAA"))
    assert_equal(260, price("AAAAAA"))

    assert_equal(160, price("AAAB"))
    assert_equal(175, price("AAABB"))
    assert_equal(190, price("AAABBD"))
    assert_equal(190, price("DABABA"))
    end

    def test_incremental
    co = CheckOut.new(RULES)
    assert_equal( 0, co.total)
    co.scan("A"); assert_equal( 50, co.total)
    co.scan("B"); assert_equal( 80, co.total)
    co.scan("A"); assert_equal(130, co.total)
    co.scan("A"); assert_equal(160, co.total)
    co.scan("B"); assert_equal(175, co.total)
    end

    private

    def price(goods)
    co = CheckOut.new(RULES)
    goods.split(//).each { |item| co.scan(item) }
    co.total
    end
    end