Functional Weave
Code in TypeScript

agri.growing-degree-days@1.0.0

vectors.json

3,175 bytes · view raw

[
  { "name": "one day 10 to 20 °C over base 10 is 5 degree days", "args": [[{ "min": 10, "max": 20 }], 10, null, "average"], "expect": { "total": 5, "daily": [5] } },
  { "name": "maize 10/30: averaging caps the hot max but keeps the cool min", "args": [[{ "min": 5, "max": 35 }], 10, 30, "average"], "expect": { "total": 7.5, "daily": [7.5] } },
  { "name": "maize 10/30: clamping raises the cool min to the base as well", "args": [[{ "min": 5, "max": 35 }], 10, 30, "clamped"], "expect": { "total": 10, "daily": [10] } },
  { "name": "a cold day: the average method floors a negative day at zero", "args": [[{ "min": -2, "max": 8 }], 5, null, "average"], "expect": { "total": 0, "daily": [0] } },
  { "name": "the same cold day clamped still counts the warm afternoon", "args": [[{ "min": -2, "max": 8 }], 5, null, "clamped"], "expect": { "total": 1.5, "daily": [1.5] } },
  { "name": "three days of 0.05 total 0.15, rounded once to 0.2, not 0.3 from rounding each day", "args": [[{ "min": 10, "max": 10.1 }, { "min": 10, "max": 10.1 }, { "min": 10, "max": 10.1 }], 10, null, "average"], "expect": { "total": 0.2, "daily": [0.05, 0.05, 0.05] } },
  { "name": "readings are taken to 0.1 °C before averaging", "args": [[{ "min": 10.04, "max": 20.06 }], 10, null, "average"], "expect": { "total": 5.1, "daily": [5.05] } },
  { "name": "a day entirely above the cap counts only up to the cap", "args": [[{ "min": 32, "max": 38 }], 10, 30, "average"], "expect": { "total": 20, "daily": [20] } },
  { "name": "clamped, a day entirely above the cap is the same", "args": [[{ "min": 32, "max": 38 }], 10, 30, "clamped"], "expect": { "total": 20, "daily": [20] } },
  { "name": "base 0 with a frost: average floors, clamped counts the thaw", "args": [[{ "min": -5, "max": 5 }], 0, null, "clamped"], "expect": { "total": 2.5, "daily": [2.5] } },
  { "name": "base 0 with a frost averaged is zero", "args": [[{ "min": -5, "max": 5 }], 0, null, "average"], "expect": { "total": 0, "daily": [0] } },
  { "name": "a spring week for grass T-sum at base 0", "args": [[{ "min": 2, "max": 8 }, { "min": -1, "max": 7 }, { "min": -4, "max": 2 }, { "min": 4, "max": 12 }], 0, null, "average"], "expect": { "total": 16, "daily": [5, 3, 0, 8] } },
  { "name": "no days is zero", "args": [[], 10, null, "average"], "expect": { "total": 0, "daily": [] } },
  { "name": "a day with min equal to max", "args": [[{ "min": 15, "max": 15 }], 10, null, "average"], "expect": { "total": 5, "daily": [5] } },
  { "name": "min above max is an error", "args": [[{ "min": 10, "max": 20 }, { "min": 21, "max": 20 }], 10, null, "average"], "expectError": "day 2: min must not be above max" },
  { "name": "an upper cap at the base is an error", "args": [[{ "min": 10, "max": 20 }], 10, 10, "average"], "expectError": "upperCelsius must be above baseCelsius" },
  { "name": "an impossible temperature is an error", "args": [[{ "min": 10, "max": 200 }], 10, null, "average"], "expectError": "day 1: temperatures must be finite numbers from -100 to 100" },
  { "name": "an unknown method is an error", "args": [[{ "min": 10, "max": 20 }], 10, null, "triangle"], "expectError": "unknown method \"triangle\"" }
]