Functional Weave
Code in Rust

construction.materials-area@1.0.0

vectors.json

3,838 bytes · view raw

[
  {
    "name": "ten square metres of tiles in 1 square metre boxes with 10 percent waste",
    "args": [
      10,
      1,
      1,
      1000
    ],
    "expect": {
      "areaToCover": 11,
      "packs": 11,
      "surplus": 0
    }
  },
  {
    "name": "8.64 square metres of 2.88 plasterboard is 3 sheets, not the 4 a float ceiling gives",
    "args": [
      8.64,
      2.88,
      1,
      0
    ],
    "expect": {
      "areaToCover": 8.64,
      "packs": 3,
      "surplus": 0
    }
  },
  {
    "name": "2.1 over 0.3 is exactly 7 packs",
    "args": [
      2.1,
      0.3,
      1,
      0
    ],
    "expect": {
      "areaToCover": 2.1,
      "packs": 7,
      "surplus": 0
    }
  },
  {
    "name": "two coats of paint on 42.5 square metres from 30 square metre tins",
    "args": [
      42.5,
      30,
      2,
      0
    ],
    "expect": {
      "areaToCover": 85,
      "packs": 3,
      "surplus": 5
    }
  },
  {
    "name": "20 square metres of plasterboard with 10 percent waste",
    "args": [
      20,
      2.88,
      1,
      1000
    ],
    "expect": {
      "areaToCover": 22,
      "packs": 8,
      "surplus": 1.04
    }
  },
  {
    "name": "flooring at 1.76 square metres a pack with 5 percent waste",
    "args": [
      14.3,
      1.76,
      1,
      500
    ],
    "expect": {
      "areaToCover": 15.015,
      "packs": 9,
      "surplus": 0.825
    }
  },
  {
    "name": "one basis point of waste tips over into a second pack",
    "args": [
      1,
      1,
      1,
      1
    ],
    "expect": {
      "areaToCover": 1.0001,
      "packs": 2,
      "surplus": 0.9999
    }
  },
  {
    "name": "area is taken to the square centimetre and the waste rounded up to it",
    "args": [
      0.33333,
      0.5,
      1,
      333
    ],
    "expect": {
      "areaToCover": 0.3444,
      "packs": 1,
      "surplus": 0.1556
    }
  },
  {
    "name": "100 percent waste doubles the area",
    "args": [
      5,
      3,
      1,
      10000
    ],
    "expect": {
      "areaToCover": 10,
      "packs": 4,
      "surplus": 2
    }
  },
  {
    "name": "an exact fit needs no spare",
    "args": [
      30,
      30,
      1,
      0
    ],
    "expect": {
      "areaToCover": 30,
      "packs": 1,
      "surplus": 0
    }
  },
  {
    "name": "nothing to cover needs no packs",
    "args": [
      0,
      2.5,
      2,
      1000
    ],
    "expect": {
      "areaToCover": 0,
      "packs": 0,
      "surplus": 0
    }
  },
  {
    "name": "zero coverage is an error",
    "args": [
      10,
      0,
      1,
      0
    ],
    "expectError": "coveragePerPack must be at least 0.0001 and at most 100000 square metres"
  },
  {
    "name": "coverage below a square centimetre is an error",
    "args": [
      10,
      4e-05,
      1,
      0
    ],
    "expectError": "coveragePerPack must be at least 0.0001 and at most 100000 square metres"
  },
  {
    "name": "a negative area is an error",
    "args": [
      -1,
      1,
      1,
      0
    ],
    "expectError": "areaSquareMetres must be a finite number from 0 to 1000000"
  },
  {
    "name": "zero coats is an error",
    "args": [
      10,
      1,
      0,
      0
    ],
    "expectError": "coats must be a whole number from 1 to 10"
  },
  {
    "name": "half a coat is an error",
    "args": [
      10,
      1,
      1.5,
      0
    ],
    "expectError": "coats must be a whole number from 1 to 10"
  },
  {
    "name": "more than 100 percent waste is an error",
    "args": [
      10,
      1,
      1,
      10001
    ],
    "expectError": "wastageBasisPoints must be a whole number from 0 to 10000"
  },
  {
    "name": "fractional basis points are an error",
    "args": [
      10,
      1,
      1,
      2.5
    ],
    "expectError": "wastageBasisPoints must be a whole number from 0 to 10000"
  }
]