Functional Weave
Code in Rust

property.floor-area@1.0.2

vectors.json

5,718 bytes · view raw

[
 {
  "name": "a 4 × 3 m lounge and a 2.5 × 2 m bedroom: 17 m², 182.99 sq ft",
  "args": [
   [
    {
     "name": "Lounge",
     "length": "4",
     "width": "3"
    },
    {
     "name": "Bedroom",
     "length": "2.5",
     "width": "2"
    }
   ],
   "m",
   2
  ],
  "expect": {
   "roomAreas": [
    "12",
    "5"
   ],
   "total": "17",
   "squareMetres": "17",
   "squareFeet": "182.99"
  }
 },
 {
  "name": "decimal dimensions multiply exactly: 4.1 × 3.3 is 13.53, not 13.529999",
  "args": [
   [
    {
     "name": "Kitchen",
     "length": "4.1",
     "width": "3.3"
    }
   ],
   "m",
   2
  ],
  "expect": {
   "roomAreas": [
    "13.53"
   ],
   "total": "13.53",
   "squareMetres": "13.53",
   "squareFeet": "145.64"
  }
 },
 {
  "name": "measured in feet: 12 × 10 and 15.5 × 11.25 is 294.375 sq ft, 27.35 m²",
  "args": [
   [
    {
     "name": "Bed 1",
     "length": "12",
     "width": "10"
    },
    {
     "name": "Lounge",
     "length": "15.5",
     "width": "11.25"
    }
   ],
   "ft",
   2
  ],
  "expect": {
   "roomAreas": [
    "120",
    "174.375"
   ],
   "total": "294.375",
   "squareMetres": "27.35",
   "squareFeet": "294.38"
  }
 },
 {
  "name": "the same at 6 places keeps the exact square feet",
  "args": [
   [
    {
     "name": "Bed 1",
     "length": "12",
     "width": "10"
    },
    {
     "name": "Lounge",
     "length": "15.5",
     "width": "11.25"
    }
   ],
   "ft",
   6
  ],
  "expect": {
   "roomAreas": [
    "120",
    "174.375"
   ],
   "total": "294.375",
   "squareMetres": "27.348332",
   "squareFeet": "294.375"
  }
 },
 {
  "name": "100 sq ft to whole square metres is 9",
  "args": [
   [
    {
     "name": "Office",
     "length": "10",
     "width": "10"
    }
   ],
   "ft",
   0
  ],
  "expect": {
   "roomAreas": [
    "100"
   ],
   "total": "100",
   "squareMetres": "9",
   "squareFeet": "100"
  }
 },
 {
  "name": "100 sq ft to 4 places is 9.2903 m²",
  "args": [
   [
    {
     "name": "Office",
     "length": "10",
     "width": "10"
    }
   ],
   "ft",
   4
  ],
  "expect": {
   "roomAreas": [
    "100"
   ],
   "total": "100",
   "squareMetres": "9.2903",
   "squareFeet": "100"
  }
 },
 {
  "name": "one square metre at 12 places: 10.76391041671 sq ft",
  "args": [
   [
    {
     "name": "Store",
     "length": "1",
     "width": "1"
    }
   ],
   "m",
   12
  ],
  "expect": {
   "roomAreas": [
    "1"
   ],
   "total": "1",
   "squareMetres": "1",
   "squareFeet": "10.76391041671"
  }
 },
 {
  "name": "millimetre precision: 0.001 × 0.001 m is a square millimetre",
  "args": [
   [
    {
     "name": "Tile",
     "length": "0.001",
     "width": "0.001"
    }
   ],
   "m",
   6
  ],
  "expect": {
   "roomAreas": [
    "0.000001"
   ],
   "total": "0.000001",
   "squareMetres": "0.000001",
   "squareFeet": "0.000011"
  }
 },
 {
  "name": "the largest room: 999.999 × 999.999 m",
  "args": [
   [
    {
     "name": "Warehouse",
     "length": "999.999",
     "width": "999.999"
    }
   ],
   "m",
   0
  ],
  "expect": {
   "roomAreas": [
    "999998.000001"
   ],
   "total": "999998.000001",
   "squareMetres": "999998",
   "squareFeet": "10763889"
  }
 },
 {
  "name": "trailing zeros are accepted and dropped: 3.50 × 2.00",
  "args": [
   [
    {
     "name": "Bath",
     "length": "3.50",
     "width": "2.00"
    }
   ],
   "m",
   2
  ],
  "expect": {
   "roomAreas": [
    "7"
   ],
   "total": "7",
   "squareMetres": "7",
   "squareFeet": "75.35"
  }
 },
 {
  "name": "no rooms is refused",
  "args": [
   [],
   "m",
   2
  ],
  "expectError": "rooms must not be empty"
 },
 {
  "name": "a zero dimension is refused",
  "args": [
   [
    {
     "name": "Cupboard",
     "length": "0",
     "width": "2"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Cupboard\": length must be greater than zero"
 },
 {
  "name": "four decimal places is refused",
  "args": [
   [
    {
     "name": "Hall",
     "length": "1.2345",
     "width": "2"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Hall\": length must be a decimal below 1000"
 },
 {
  "name": "1000 or more is refused",
  "args": [
   [
    {
     "name": "Field",
     "length": "1000",
     "width": "2"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Field\": length must be a decimal below 1000"
 },
 {
  "name": "feet and inches are not decimal feet",
  "args": [
   [
    {
     "name": "Hall",
     "length": "10'6",
     "width": "2"
    }
   ],
   "ft",
   2
  ],
  "expectError": "room \"Hall\": length must be a decimal below 1000"
 },
 {
  "name": "a negative width is refused",
  "args": [
   [
    {
     "name": "Hall",
     "length": "2",
     "width": "-3"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Hall\": width must be a decimal below 1000"
 },
 {
  "name": "an unknown unit is refused",
  "args": [
   [
    {
     "name": "Hall",
     "length": "2",
     "width": "3"
    }
   ],
   "yd",
   2
  ],
  "expectError": "unknown length unit"
 },
 {
  "name": "decimals beyond 12 are refused by units.convert",
  "args": [
   [
    {
     "name": "Hall",
     "length": "2",
     "width": "3"
    }
   ],
   "m",
   13
  ],
  "expectError": "decimals must be a whole number from 0 to 12"
 },
 {
  "name": "a trailing newline is not part of a length",
  "args": [
   [
    {
     "name": "Hall",
     "length": "4\n",
     "width": "3"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Hall\": length must be a decimal below 1000"
 },
 {
  "name": "a trailing newline is not part of a width",
  "args": [
   [
    {
     "name": "Hall",
     "length": "4",
     "width": "3.5\n"
    }
   ],
   "m",
   2
  ],
  "expectError": "room \"Hall\": width must be a decimal below 1000"
 }
]