Functional Weave
Code in Python

stats.standard-deviation@2.0.0

vectors.json

2,751 bytes · view raw

[
  { "name": "the textbook population example is exactly 2", "args": [[2, 4, 4, 4, 5, 5, 7, 9], "population", 6], "expect": 2 },
  { "name": "the same data as a sample is sqrt(32/7)", "args": [[2, 4, 4, 4, 5, 5, 7, 9], "sample", 6], "expect": 2.13809 },
  { "name": "a population deviation of exactly 0.5 rounds away from zero to 1", "args": [[0, 1], "population", 0], "expect": 1 },
  { "name": "sample of 0 and 1 is sqrt(1/2)", "args": [[0, 1], "sample", 4], "expect": 0.7071 },
  { "name": "large close values do not cancel (population sqrt 22.5)", "args": [[1000000004, 1000000007, 1000000013, 1000000016], "population", 6], "expect": 4.743416 },
  { "name": "large close values do not cancel (sample sqrt 30)", "args": [[1000000004, 1000000007, 1000000013, 1000000016], "sample", 6], "expect": 5.477226 },
  { "name": "one value has no population spread", "args": [[42.5], "population", 3], "expect": 0 },
  { "name": "a constant sample has no spread", "args": [[3, 3, 3], "sample", 3], "expect": 0 },
  { "name": "negative values: population of -1 and 1 is 1", "args": [[-1, 1], "population", 3], "expect": 1 },
  { "name": "negative values: sample of -1 and 1 is sqrt 2", "args": [[-1, 1], "sample", 3], "expect": 1.414 },
  { "name": "decimal inputs: population of 0.1, 0.2, 0.3 is sqrt(2/300)", "args": [[0.1, 0.2, 0.3], "population", 6], "expect": 0.08165 },
  { "name": "twelve places of sqrt 1.25", "args": [[1, 2, 3, 4], "population", 12], "expect": 1.11803398875 },
  { "name": "zero places rounds down below a half", "args": [[1, 2, 3, 4], "population", 0], "expect": 1 },
  {"name": "population deviation of 0 and 5.35 is the double 2.67499999..., so it rounds to 2.67 (1.x gave 2.68)", "args": [[0, 5.35], "population", 2], "expect": 2.67},
  {"name": "population deviation of -2.675 and 2.675 is 2.675 as stored, so 2.67 (1.x gave 2.68)", "args": [[-2.675, 2.675], "population", 2], "expect": 2.67},
  {"name": "1.45 is stored just below the tie, so it rounds to 1.4 at one place (1.x gave 1.5)", "args": [[1.45, -1.45], "population", 1], "expect": 1.4},
  { "name": "an empty list is an error", "args": [[], "population", 2], "expectError": "values must not be empty" },
  { "name": "a sample of one value is an error", "args": [[5], "sample", 2], "expectError": "sample standard deviation needs at least 2 values" },
  { "name": "an unknown kind is an error", "args": [[1, 2], "unbiased", 2], "expectError": "unknown standard deviation kind \"unbiased\"" },
  { "name": "negative decimals is an error", "args": [[1, 2], "sample", -1], "expectError": "decimals must be a whole number from 0 to 12" },
  { "name": "a non-number value is an error", "args": [[1, "x"], "sample", 2], "expectError": "values must be finite numbers" }
]