TAP version 13
# Subtest: calculates the undiscounted total by default
ok 1 - calculates the undiscounted total by default
  ---
  duration_ms: 1.848
  type: 'test'
  ...
# Subtest: applies a fractional discount and rounds to two decimals
ok 2 - applies a fractional discount and rounds to two decimals
  ---
  duration_ms: 1.2533
  type: 'test'
  ...
# Subtest: returns zero when quantity is zero
ok 3 - returns zero when quantity is zero
  ---
  duration_ms: 0.3187
  type: 'test'
  ...
# Subtest: supports the boundary discounts of zero and one
ok 4 - supports the boundary discounts of zero and one
  ---
  duration_ms: 0.1342
  type: 'test'
  ...
# Subtest: accepts a zero-priced item and zero discount
ok 5 - accepts a zero-priced item and zero discount
  ---
  duration_ms: 0.2193
  type: 'test'
  ...
# Subtest: rejects non-finite numeric inputs
ok 6 - rejects non-finite numeric inputs
  ---
  duration_ms: 0.5081
  type: 'test'
  ...
# Subtest: rejects negative price, quantity, and discount
ok 7 - rejects negative price, quantity, and discount
  ---
  duration_ms: 0.1383
  type: 'test'
  ...
# Subtest: rejects a discount greater than one
ok 8 - rejects a discount greater than one
  ---
  duration_ms: 0.0913
  type: 'test'
  ...
# Subtest: rejects fractional and non-numeric quantities
ok 9 - rejects fractional and non-numeric quantities
  ---
  duration_ms: 0.315
  type: 'test'
  ...
# Subtest: rejects non-finite and non-numeric prices or discounts
ok 10 - rejects non-finite and non-numeric prices or discounts
  ---
  duration_ms: 0.3876
  type: 'test'
  ...
1..10
# tests 10
# suites 0
# pass 10
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 213.5004
