Functional Weave
Code in Rust

fleet.emissions@1.0.0

vectors.json

6,107 bytes · view raw

[
  {
    "name": "100 litres of pump diesel in 2025 is 257.082 kg",
    "args": [
      "fuel-diesel",
      "100",
      "litres",
      2025
    ],
    "expect": {
      "co2eGrams": 257082,
      "factor": "2.57082",
      "factorYear": 2025,
      "activity": "fuel-diesel",
      "unit": "litres"
    }
  },
  {
    "name": "40.5 litres of petrol in 2025: 83,800.98 g rounds to 83,801",
    "args": [
      "fuel-petrol",
      "40.5",
      "litres",
      2025
    ],
    "expect": {
      "co2eGrams": 83801,
      "factor": "2.06916",
      "factorYear": 2025,
      "activity": "fuel-petrol",
      "unit": "litres"
    }
  },
  {
    "name": "one litre of diesel in the 2023 set",
    "args": [
      "fuel-diesel",
      "1",
      "litres",
      2023
    ],
    "expect": {
      "co2eGrams": 2512,
      "factor": "2.51206",
      "factorYear": 2023,
      "activity": "fuel-diesel",
      "unit": "litres"
    }
  },
  {
    "name": "one litre of diesel in the 2024 set",
    "args": [
      "fuel-diesel",
      "1",
      "litres",
      2024
    ],
    "expect": {
      "co2eGrams": 2513,
      "factor": "2.51279",
      "factorYear": 2024,
      "activity": "fuel-diesel",
      "unit": "litres"
    }
  },
  {
    "name": "one litre of diesel in the 2026 set",
    "args": [
      "fuel-diesel",
      "1",
      "litres",
      2026
    ],
    "expect": {
      "co2eGrams": 2584,
      "factor": "2.58354",
      "factorYear": 2026,
      "activity": "fuel-diesel",
      "unit": "litres"
    }
  },
  {
    "name": "an exact half gram rounds up: 0.1 litre of 2026 petrol is 207.5 g",
    "args": [
      "fuel-petrol",
      "0.1",
      "litres",
      2026
    ],
    "expect": {
      "co2eGrams": 208,
      "factor": "2.07500",
      "factorYear": 2026,
      "activity": "fuel-petrol",
      "unit": "litres"
    }
  },
  {
    "name": "1,000 km in an average petrol car, 2025",
    "args": [
      "car-average-petrol",
      "1000",
      "km",
      2025
    ],
    "expect": {
      "co2eGrams": 162720,
      "factor": "0.16272",
      "factorYear": 2025,
      "activity": "car-average-petrol",
      "unit": "km"
    }
  },
  {
    "name": "100 miles uses DESNZ's own per-mile factor",
    "args": [
      "car-average-petrol",
      "100",
      "miles",
      2025
    ],
    "expect": {
      "co2eGrams": 26187,
      "factor": "0.26187",
      "factorYear": 2025,
      "activity": "car-average-petrol",
      "unit": "miles"
    }
  },
  {
    "name": "the same trip in km (160.9344) agrees to the gram",
    "args": [
      "car-average-petrol",
      "160.9344",
      "km",
      2025
    ],
    "expect": {
      "co2eGrams": 26187,
      "factor": "0.16272",
      "factorYear": 2025,
      "activity": "car-average-petrol",
      "unit": "km"
    }
  },
  {
    "name": "250 km in an average laden HGV in 2026: 224,357.5 g rounds up",
    "args": [
      "hgv-all-hgvs-laden-average",
      "250",
      "km",
      2026
    ],
    "expect": {
      "co2eGrams": 224358,
      "factor": "0.89743",
      "factorYear": 2026,
      "activity": "hgv-all-hgvs-laden-average",
      "unit": "km"
    }
  },
  {
    "name": "zero distance is zero",
    "args": [
      "car-average-petrol",
      "0",
      "km",
      2025
    ],
    "expect": {
      "co2eGrams": 0,
      "factor": "0.16272",
      "factorYear": 2025,
      "activity": "car-average-petrol",
      "unit": "km"
    }
  },
  {
    "name": "a nine-decimal quantity is accepted and rounds to nothing",
    "args": [
      "fuel-diesel",
      "0.000000001",
      "litres",
      2025
    ],
    "expect": {
      "co2eGrams": 0,
      "factor": "2.57082",
      "factorYear": 2025,
      "activity": "fuel-diesel",
      "unit": "litres"
    }
  },
  {
    "name": "a fuel has no per-km factor",
    "args": [
      "fuel-diesel",
      "10",
      "km",
      2025
    ],
    "expectError": "no conversion factor for fuel-diesel per km in 2025"
  },
  {
    "name": "a vehicle class has no per-litre factor",
    "args": [
      "car-average-petrol",
      "10",
      "litres",
      2025
    ],
    "expectError": "no conversion factor for car-average-petrol per litres in 2025"
  },
  {
    "name": "battery electric cars are not carried: their emissions are electricity, not scope 1",
    "args": [
      "car-average-bev",
      "10",
      "km",
      2025
    ],
    "expectError": "unknown activity \"car-average-bev\" in the 2025 factors"
  },
  {
    "name": "van PHEV factors start in 2024",
    "args": [
      "van-average-phev",
      "10",
      "km",
      2023
    ],
    "expectError": "unknown activity \"van-average-phev\" in the 2023 factors"
  },
  {
    "name": "2022 factors are not carried",
    "args": [
      "fuel-diesel",
      "10",
      "litres",
      2022
    ],
    "expectError": "no conversion factors for 2022"
  },
  {
    "name": "a negative quantity is refused",
    "args": [
      "fuel-diesel",
      "-5",
      "litres",
      2025
    ],
    "expectError": "quantity must be plain decimal text, not negative"
  },
  {
    "name": "exponent notation is refused",
    "args": [
      "fuel-diesel",
      "1e3",
      "litres",
      2025
    ],
    "expectError": "quantity must be plain decimal text, not negative"
  },
  {
    "name": "a number instead of text is refused",
    "args": [
      "fuel-diesel",
      12,
      "litres",
      2025
    ],
    "expectError": "quantity must be plain decimal text, not negative"
  },
  {
    "name": "ten decimal places are too many",
    "args": [
      "fuel-diesel",
      "0.0000000001",
      "litres",
      2025
    ],
    "expectError": "at most 15 significant digits and 9 decimal places"
  },
  {
    "name": "an unknown unit is refused",
    "args": [
      "fuel-diesel",
      "10",
      "gallons",
      2025
    ],
    "expectError": "unknown unit \"gallons\""
  },
  {
    "name": "a result beyond 2^53 - 1 grams is refused",
    "args": [
      "fuel-diesel",
      "123456789012345",
      "litres",
      2025
    ],
    "expectError": "the result exceeds 2^53 - 1 grams"
  }
]