[
{
"name": "£10,000 in thirds: the odd penny goes to the first flat",
"args": [
{
"minor": 1000000,
"currency": "GBP"
},
[
{
"unit": "Flat 1",
"share": 1,
"of": 3
},
{
"unit": "Flat 2",
"share": 1,
"of": 3
},
{
"unit": "Flat 3",
"share": 1,
"of": 3
}
],
"fraction"
],
"expect": [
{
"unit": "Flat 1",
"charge": {
"minor": 333334,
"currency": "GBP"
}
},
{
"unit": "Flat 2",
"charge": {
"minor": 333333,
"currency": "GBP"
}
},
{
"unit": "Flat 3",
"charge": {
"minor": 333333,
"currency": "GBP"
}
}
]
},
{
"name": "1/3, 1/6, 1/2 of £100.01: £33.34, £16.67, £50.00, not £100.02 by separate rounding",
"args": [
{
"minor": 10001,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": 3
},
{
"unit": "B",
"share": 1,
"of": 6
},
{
"unit": "C",
"share": 1,
"of": 2
}
],
"fraction"
],
"expect": [
{
"unit": "A",
"charge": {
"minor": 3334,
"currency": "GBP"
}
},
{
"unit": "B",
"charge": {
"minor": 1667,
"currency": "GBP"
}
},
{
"unit": "C",
"charge": {
"minor": 5000,
"currency": "GBP"
}
}
]
},
{
"name": "a half and two quarters",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "Shop",
"share": 1,
"of": 2
},
{
"unit": "Flat A",
"share": 1,
"of": 4
},
{
"unit": "Flat B",
"share": 1,
"of": 4
}
],
"fraction"
],
"expect": [
{
"unit": "Shop",
"charge": {
"minor": 5000,
"currency": "GBP"
}
},
{
"unit": "Flat A",
"charge": {
"minor": 2500,
"currency": "GBP"
}
},
{
"unit": "Flat B",
"charge": {
"minor": 2500,
"currency": "GBP"
}
}
]
},
{
"name": "twentieths and quarters mixed: 3/20, 7/20, 1/4, 1/4 of £4,000",
"args": [
{
"minor": 400000,
"currency": "GBP"
},
[
{
"unit": "1",
"share": 3,
"of": 20
},
{
"unit": "2",
"share": 7,
"of": 20
},
{
"unit": "3",
"share": 1,
"of": 4
},
{
"unit": "4",
"share": 1,
"of": 4
}
],
"fraction"
],
"expect": [
{
"unit": "1",
"charge": {
"minor": 60000,
"currency": "GBP"
}
},
{
"unit": "2",
"charge": {
"minor": 140000,
"currency": "GBP"
}
},
{
"unit": "3",
"charge": {
"minor": 100000,
"currency": "GBP"
}
},
{
"unit": "4",
"charge": {
"minor": 100000,
"currency": "GBP"
}
}
]
},
{
"name": "floor areas 50, 70 and 80 m² share £1,000",
"args": [
{
"minor": 100000,
"currency": "GBP"
},
[
{
"unit": "G",
"share": 50,
"of": null
},
{
"unit": "1",
"share": 70,
"of": null
},
{
"unit": "2",
"share": 80,
"of": null
}
],
"floor-area"
],
"expect": [
{
"unit": "G",
"charge": {
"minor": 25000,
"currency": "GBP"
}
},
{
"unit": "1",
"charge": {
"minor": 35000,
"currency": "GBP"
}
},
{
"unit": "2",
"charge": {
"minor": 40000,
"currency": "GBP"
}
}
]
},
{
"name": "areas in hundredths of a m²: the spare penny goes to the largest remainder",
"args": [
{
"minor": 234567,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 5525,
"of": null
},
{
"unit": "B",
"share": 7250,
"of": null
},
{
"unit": "C",
"share": 4725,
"of": null
}
],
"floor-area"
],
"expect": [
{
"unit": "A",
"charge": {
"minor": 74056,
"currency": "GBP"
}
},
{
"unit": "B",
"charge": {
"minor": 97178,
"currency": "GBP"
}
},
{
"unit": "C",
"charge": {
"minor": 63333,
"currency": "GBP"
}
}
]
},
{
"name": "fixed percentages 33.33%, 33.33%, 33.34% of £100",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "1",
"share": 3333,
"of": null
},
{
"unit": "2",
"share": 3333,
"of": null
},
{
"unit": "3",
"share": 3334,
"of": null
}
],
"percentage"
],
"expect": [
{
"unit": "1",
"charge": {
"minor": 3333,
"currency": "GBP"
}
},
{
"unit": "2",
"charge": {
"minor": 3333,
"currency": "GBP"
}
},
{
"unit": "3",
"charge": {
"minor": 3334,
"currency": "GBP"
}
}
]
},
{
"name": "a unit with a zero share pays nothing but keeps its line",
"args": [
{
"minor": 50000,
"currency": "GBP"
},
[
{
"unit": "Flat",
"share": 100,
"of": null
},
{
"unit": "Car port",
"share": 0,
"of": null
}
],
"floor-area"
],
"expect": [
{
"unit": "Flat",
"charge": {
"minor": 50000,
"currency": "GBP"
}
},
{
"unit": "Car port",
"charge": {
"minor": 0,
"currency": "GBP"
}
}
]
},
{
"name": "a surplus is shared out the same way",
"args": [
{
"minor": -10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": 3
},
{
"unit": "B",
"share": 1,
"of": 3
},
{
"unit": "C",
"share": 1,
"of": 3
}
],
"fraction"
],
"expect": [
{
"unit": "A",
"charge": {
"minor": -3333,
"currency": "GBP"
}
},
{
"unit": "B",
"charge": {
"minor": -3333,
"currency": "GBP"
}
},
{
"unit": "C",
"charge": {
"minor": -3334,
"currency": "GBP"
}
}
]
},
{
"name": "one unit takes it all",
"args": [
{
"minor": 123456,
"currency": "GBP"
},
[
{
"unit": "House",
"share": 1,
"of": 1
}
],
"fraction"
],
"expect": [
{
"unit": "House",
"charge": {
"minor": 123456,
"currency": "GBP"
}
}
]
},
{
"name": "fractions that do not make a whole are refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": 3
},
{
"unit": "B",
"share": 1,
"of": 3
}
],
"fraction"
],
"expectError": "the fractions add up to 2/3, not exactly 1"
},
{
"name": "fractions over a whole are refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": 2
},
{
"unit": "B",
"share": 2,
"of": 3
}
],
"fraction"
],
"expectError": "the fractions add up to 7/6, not exactly 1"
},
{
"name": "percentages short of 100% are refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "1",
"share": 5000,
"of": null
},
{
"unit": "2",
"share": 4999,
"of": null
}
],
"percentage"
],
"expectError": "the percentages add up to 9999 basis points, not 10000"
},
{
"name": "a fraction without a denominator is refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": null
},
{
"unit": "B",
"share": 1,
"of": 2
}
],
"fraction"
],
"expectError": "unit \"A\": a fraction needs a denominator"
},
{
"name": "a denominator on a floor area is refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 50,
"of": 100
}
],
"floor-area"
],
"expectError": "unit \"A\": \"of\" is only for the fraction basis"
},
{
"name": "a negative share is refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": -1,
"of": null
},
{
"unit": "B",
"share": 101,
"of": null
}
],
"floor-area"
],
"expectError": "unit \"A\": share must be a whole number"
},
{
"name": "no units is refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[],
"floor-area"
],
"expectError": "units must not be empty"
},
{
"name": "all-zero floor areas are refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 0,
"of": null
},
{
"unit": "B",
"share": 0,
"of": null
}
],
"floor-area"
],
"expectError": "the floor areas add up to zero"
},
{
"name": "an unknown basis is refused",
"args": [
{
"minor": 10000,
"currency": "GBP"
},
[
{
"unit": "A",
"share": 1,
"of": null
}
],
"rateable-value"
],
"expectError": "unknown basis"
}
]