Functional Weave
Code in Rust

fleet.fuel-cost@1.0.0

vectors.json

4,570 bytes · view raw

[
  {"name": "100 miles at 50 mpg (UK) and 145.9p: 9.09218 litres, 1326.549p", "args": ["100", "mi", "50", "mpg-uk", 1459, "GBP", "half-up"], "expect": {"litres": "9.092", "cost": {"minor": 1327, "currency": "GBP"}}},
  {"name": "100 km at 5.5 L/100km and 145.9p: 5.5 litres, 802.45p rounds down under half-up", "args": ["100", "km", "5.5", "l-per-100km", 1459, "GBP", "half-up"], "expect": {"litres": "5.500", "cost": {"minor": 802, "currency": "GBP"}}},
  {"name": "the same trip rounded up", "args": ["100", "km", "5.5", "l-per-100km", 1459, "GBP", "up"], "expect": {"litres": "5.500", "cost": {"minor": 803, "currency": "GBP"}}},
  {"name": "100 miles at 5.5 L/100km: 160.9344 km, 8.851392 litres", "args": ["100", "mi", "5.5", "l-per-100km", 1459, "GBP", "half-up"], "expect": {"litres": "8.851", "cost": {"minor": 1291, "currency": "GBP"}}},
  {"name": "100 km at 50 mpg (UK): 454.609 / 80.4672 = 5.6496... litres", "args": ["100", "km", "50", "mpg-uk", 1459, "GBP", "half-up"], "expect": {"litres": "5.650", "cost": {"minor": 824, "currency": "GBP"}}},
  {"name": "100 miles at 30 mpg (US): the US gallon is 3.785411784 litres", "args": ["100", "mi", "30", "mpg-us", 1459, "GBP", "half-up"], "expect": {"litres": "12.618", "cost": {"minor": 1841, "currency": "GBP"}}},
  {"name": "one mile at 1 mpg (UK) and 81.5p is 370.506335p: rounding to 4.546 litres first would give 370", "args": ["1", "mi", "1", "mpg-uk", 815, "GBP", "half-up"], "expect": {"litres": "4.546", "cost": {"minor": 371, "currency": "GBP"}}},
  {"name": "an exact half penny: 1 litre at 100.5p, half-up", "args": ["100", "km", "1", "l-per-100km", 1005, "GBP", "half-up"], "expect": {"litres": "1.000", "cost": {"minor": 101, "currency": "GBP"}}},
  {"name": "an exact half penny, half-even keeps the even 100", "args": ["100", "km", "1", "l-per-100km", 1005, "GBP", "half-even"], "expect": {"litres": "1.000", "cost": {"minor": 100, "currency": "GBP"}}},
  {"name": "an exact half penny, down", "args": ["100", "km", "1", "l-per-100km", 1005, "GBP", "down"], "expect": {"litres": "1.000", "cost": {"minor": 100, "currency": "GBP"}}},
  {"name": "no distance costs nothing", "args": ["0", "mi", "45", "mpg-uk", 1459, "GBP", "half-up"], "expect": {"litres": "0.000", "cost": {"minor": 0, "currency": "GBP"}}},
  {"name": "free fuel costs nothing", "args": ["250", "mi", "45", "mpg-uk", 0, "GBP", "half-up"], "expect": {"litres": "25.256", "cost": {"minor": 0, "currency": "GBP"}}},
  {"name": "euro cents work the same way: 12.5 km at 6.4 L/100km and 1.799 EUR a litre", "args": ["12.5", "km", "6.4", "l-per-100km", 1799, "EUR", "half-up"], "expect": {"litres": "0.800", "cost": {"minor": 144, "currency": "EUR"}}},
  {"name": "an economy of zero is an error", "args": ["100", "mi", "0", "mpg-uk", 1459, "GBP", "half-up"], "expectError": "economy must be greater than zero"},
  {"name": "a negative distance is an error", "args": ["-5", "mi", "50", "mpg-uk", 1459, "GBP", "half-up"], "expectError": "distance must be a plain decimal of 0 or more"},
  {"name": "an exponent is not a plain decimal", "args": ["1e3", "km", "50", "mpg-uk", 1459, "GBP", "half-up"], "expectError": "distance must be a plain decimal of 0 or more"},
  {"name": "a trailing point is not a plain decimal", "args": ["50", "km", "6.", "l-per-100km", 1459, "GBP", "half-up"], "expectError": "economy must be a plain decimal of 0 or more"},
  {"name": "an unknown distance unit is an error", "args": ["100", "yd", "50", "mpg-uk", 1459, "GBP", "half-up"], "expectError": "unknown distance unit"},
  {"name": "mpg without saying which gallon is an error", "args": ["100", "mi", "50", "mpg", 1459, "GBP", "half-up"], "expectError": "unknown economy unit"},
  {"name": "a negative price is an error", "args": ["100", "mi", "50", "mpg-uk", -1, "GBP", "half-up"], "expectError": "pricePerLitreTenths must not be negative"},
  {"name": "a fractional price must be given in tenths", "args": ["100", "mi", "50", "mpg-uk", 145.9, "GBP", "half-up"], "expectError": "pricePerLitreTenths must be an integer"},
  {"name": "a lower-case currency is an error", "args": ["100", "mi", "50", "mpg-uk", 1459, "gbp", "half-up"], "expectError": "is not an uppercase ISO 4217 currency code"},
  {"name": "an unknown rounding mode is an error", "args": ["100", "mi", "50", "mpg-uk", 1459, "GBP", "nearest"], "expectError": "unknown rounding mode"},
  {"name": "a cost beyond 2^53 - 1 minor units is refused", "args": ["999999999999999999", "mi", "1", "mpg-uk", 99999, "GBP", "half-up"], "expectError": "the fuel cost exceeds 2^53 - 1 minor units"}
]