[
{
"name": "60.00 at a 40 percent margin is 100.00, as finance.margin says",
"args": [
{
"minor": 6000,
"currency": "GBP"
},
4000,
"margin",
"half-up"
],
"expect": {
"minor": 10000,
"currency": "GBP"
}
},
{
"name": "100.00 at a 50 percent markup is 150.00",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
5000,
"markup",
"half-up"
],
"expect": {
"minor": 15000,
"currency": "GBP"
}
},
{
"name": "100.00 at a 50 percent margin is 200.00, not 150.00",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
5000,
"margin",
"half-up"
],
"expect": {
"minor": 20000,
"currency": "GBP"
}
},
{
"name": "6.99 at a 30.03 percent margin is 9.99, finance.margin backwards",
"args": [
{
"minor": 699,
"currency": "GBP"
},
3003,
"margin",
"half-up"
],
"expect": {
"minor": 999,
"currency": "GBP"
}
},
{
"name": "6.99 at a 42.92 percent markup is 9.99, finance.margin backwards",
"args": [
{
"minor": 699,
"currency": "GBP"
},
4292,
"markup",
"half-up"
],
"expect": {
"minor": 999,
"currency": "GBP"
}
},
{
"name": "10.00 at a 30 percent margin rounds half-up to 14.29",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
3000,
"margin",
"half-up"
],
"expect": {
"minor": 1429,
"currency": "GBP"
}
},
{
"name": "rounding down misses a 30 percent margin: 14.28 is 29.97 percent",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
3000,
"margin",
"down"
],
"expect": {
"minor": 1428,
"currency": "GBP"
}
},
{
"name": "rounding up never falls short of the target",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
3000,
"margin",
"up"
],
"expect": {
"minor": 1429,
"currency": "GBP"
}
},
{
"name": "an exact half penny rounds to even: 1.5 becomes 2",
"args": [
{
"minor": 1,
"currency": "GBP"
},
5000,
"markup",
"half-even"
],
"expect": {
"minor": 2,
"currency": "GBP"
}
},
{
"name": "zero margin is the cost",
"args": [
{
"minor": 4321,
"currency": "GBP"
},
0,
"margin",
"half-up"
],
"expect": {
"minor": 4321,
"currency": "GBP"
}
},
{
"name": "zero markup is the cost",
"args": [
{
"minor": 4321,
"currency": "GBP"
},
0,
"markup",
"half-up"
],
"expect": {
"minor": 4321,
"currency": "GBP"
}
},
{
"name": "zero cost is a zero price",
"args": [
{
"minor": 0,
"currency": "GBP"
},
4000,
"margin",
"half-up"
],
"expect": {
"minor": 0,
"currency": "GBP"
}
},
{
"name": "a negative markup is a discount below cost",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
-2000,
"markup",
"half-up"
],
"expect": {
"minor": 8000,
"currency": "GBP"
}
},
{
"name": "a markup of -100 percent is a giveaway",
"args": [
{
"minor": 500,
"currency": "GBP"
},
-10000,
"markup",
"half-up"
],
"expect": {
"minor": 0,
"currency": "GBP"
}
},
{
"name": "a negative margin prices below cost, as finance.margin reports it",
"args": [
{
"minor": 12000,
"currency": "GBP"
},
-2000,
"margin",
"half-up"
],
"expect": {
"minor": 10000,
"currency": "GBP"
}
},
{
"name": "yen at a 20 percent margin",
"args": [
{
"minor": 800,
"currency": "JPY"
},
2000,
"margin",
"half-up"
],
"expect": {
"minor": 1000,
"currency": "JPY"
}
},
{
"name": "a 100 percent margin has no finite price",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
10000,
"margin",
"half-up"
],
"expectError": "has no finite price"
},
{
"name": "a markup below -100 percent would be a negative price",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
-10001,
"markup",
"half-up"
],
"expectError": "gives a negative price"
},
{
"name": "a negative cost is an error",
"args": [
{
"minor": -1000,
"currency": "GBP"
},
2000,
"markup",
"half-up"
],
"expectError": "cost must not be negative"
},
{
"name": "the basis has no default and must be named",
"args": [
{
"minor": 1000,
"currency": "GBP"
},
2000,
"profit",
"half-up"
],
"expectError": "unknown pricing basis"
},
{
"name": "a calculation beyond 2^53 - 1 is refused",
"args": [
{
"minor": 900719925474100,
"currency": "GBP"
},
0,
"margin",
"half-up"
],
"expectError": "exceeds 2^53 - 1"
}
]