Functional Weave
Code in Python

construction.concrete-volume@1.0.0

vectors.json

8,185 bytes · view raw

[
  {
    "name": "a 5 by 4 metre slab 100 mm thick is 2 cubic metres",
    "args": [
      [
        {
          "kind": "slab",
          "length": 5,
          "width": 4,
          "depth": 0.1,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        2
      ],
      "cubicMetres": 2,
      "orderCubicMetres": 2
    }
  },
  {
    "name": "a garage slab with 5 percent wastage orders up to the next tenth",
    "args": [
      [
        {
          "kind": "slab",
          "length": 4.8,
          "width": 3.6,
          "depth": 0.15,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      500
    ],
    "expect": {
      "elementCubicMetres": [
        2.592
      ],
      "cubicMetres": 2.592,
      "orderCubicMetres": 2.8
    }
  },
  {
    "name": "a strip footing lands on half a litre and rounds half up",
    "args": [
      [
        {
          "kind": "strip-footing",
          "length": 12.5,
          "width": 0.6,
          "depth": 0.225,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        1.688
      ],
      "cubicMetres": 1.688,
      "orderCubicMetres": 1.7
    }
  },
  {
    "name": "four identical pads",
    "args": [
      [
        {
          "kind": "pad",
          "length": 1,
          "width": 1,
          "depth": 0.5,
          "diameter": null,
          "height": null,
          "count": 4
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        2
      ],
      "cubicMetres": 2,
      "orderCubicMetres": 2
    }
  },
  {
    "name": "a 300 mm round column 3 m high",
    "args": [
      [
        {
          "kind": "column",
          "length": null,
          "width": null,
          "depth": null,
          "diameter": 0.3,
          "height": 3,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        0.212
      ],
      "cubicMetres": 0.212,
      "orderCubicMetres": 0.3
    }
  },
  {
    "name": "a slab and four columns, with 10 percent wastage",
    "args": [
      [
        {
          "kind": "slab",
          "length": 3,
          "width": 3,
          "depth": 0.1,
          "diameter": null,
          "height": null,
          "count": 1
        },
        {
          "kind": "column",
          "length": null,
          "width": null,
          "depth": null,
          "diameter": 0.25,
          "height": 2.4,
          "count": 4
        }
      ],
      1000
    ],
    "expect": {
      "elementCubicMetres": [
        0.9,
        0.471
      ],
      "cubicMetres": 1.371,
      "orderCubicMetres": 1.6
    }
  },
  {
    "name": "3 by 1 by 0.1 is 0.3 exactly, not the 0.4 a float ceiling orders",
    "args": [
      [
        {
          "kind": "slab",
          "length": 3,
          "width": 1,
          "depth": 0.1,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        0.3
      ],
      "cubicMetres": 0.3,
      "orderCubicMetres": 0.3
    }
  },
  {
    "name": "exactly a tenth orders a tenth",
    "args": [
      [
        {
          "kind": "slab",
          "length": 10,
          "width": 1,
          "depth": 0.01,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        0.1
      ],
      "cubicMetres": 0.1,
      "orderCubicMetres": 0.1
    }
  },
  {
    "name": "a litre over a tenth orders the next tenth",
    "args": [
      [
        {
          "kind": "slab",
          "length": 1,
          "width": 1,
          "depth": 0.101,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        0.101
      ],
      "cubicMetres": 0.101,
      "orderCubicMetres": 0.2
    }
  },
  {
    "name": "dimensions are taken to the nearest millimetre",
    "args": [
      [
        {
          "kind": "slab",
          "length": 2.0006,
          "width": 1,
          "depth": 1,
          "diameter": null,
          "height": null,
          "count": 1
        },
        {
          "kind": "slab",
          "length": 2.0004,
          "width": 1,
          "depth": 1,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expect": {
      "elementCubicMetres": [
        2.001,
        2
      ],
      "cubicMetres": 4.001,
      "orderCubicMetres": 4.1
    }
  },
  {
    "name": "100 percent wastage doubles the order",
    "args": [
      [
        {
          "kind": "pad",
          "length": 0.6,
          "width": 0.6,
          "depth": 0.5,
          "diameter": null,
          "height": null,
          "count": 3
        }
      ],
      10000
    ],
    "expect": {
      "elementCubicMetres": [
        0.54
      ],
      "cubicMetres": 0.54,
      "orderCubicMetres": 1.1
    }
  },
  {
    "name": "an empty list is an error",
    "args": [
      [],
      0
    ],
    "expectError": "elements must not be empty"
  },
  {
    "name": "a slab without a width is an error",
    "args": [
      [
        {
          "kind": "slab",
          "length": 5,
          "width": null,
          "depth": 0.1,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expectError": "element 1: slab needs length, width and depth"
  },
  {
    "name": "a column without a height is an error",
    "args": [
      [
        {
          "kind": "slab",
          "length": 1,
          "width": 1,
          "depth": 0.1,
          "diameter": null,
          "height": null,
          "count": 1
        },
        {
          "kind": "column",
          "length": null,
          "width": null,
          "depth": null,
          "diameter": 0.3,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expectError": "element 2: column needs diameter and height"
  },
  {
    "name": "a negative depth is an error",
    "args": [
      [
        {
          "kind": "pad",
          "length": 1,
          "width": 1,
          "depth": -0.2,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expectError": "element 1: depth must be a finite number greater than 0 and at most 1000 metres"
  },
  {
    "name": "a dimension under half a millimetre is an error",
    "args": [
      [
        {
          "kind": "slab",
          "length": 1,
          "width": 1,
          "depth": 0.0004,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expectError": "element 1: depth must be at least 1 millimetre"
  },
  {
    "name": "a count of zero is an error",
    "args": [
      [
        {
          "kind": "pad",
          "length": 1,
          "width": 1,
          "depth": 0.5,
          "diameter": null,
          "height": null,
          "count": 0
        }
      ],
      0
    ],
    "expectError": "element 1: count must be a whole number of at least 1"
  },
  {
    "name": "negative wastage is an error",
    "args": [
      [
        {
          "kind": "pad",
          "length": 1,
          "width": 1,
          "depth": 0.5,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      -1
    ],
    "expectError": "wastageBasisPoints must be a whole number from 0 to 10000"
  },
  {
    "name": "a volume beyond 2^53 cubic millimetres is an error",
    "args": [
      [
        {
          "kind": "slab",
          "length": 1000,
          "width": 1000,
          "depth": 1000,
          "diameter": null,
          "height": null,
          "count": 1
        }
      ],
      0
    ],
    "expectError": "the total volume is too large"
  }
]