Functional Weave
Code in Rust

charts.scale@1.0.0

vectors.json

4,570 bytes · view raw

[
  { "fn": "linearScale", "name": "a quarter of the way along a 500 pixel axis", "args": [[0, 100], [0, 500], 25, false], "expect": 125 },
  { "fn": "linearScale", "name": "the start of the domain is the start of the range", "args": [[0, 100], [0, 500], 0, false], "expect": 0 },
  { "fn": "linearScale", "name": "the end of the domain is the end of the range", "args": [[0, 100], [0, 500], 100, false], "expect": 500 },
  { "fn": "linearScale", "name": "a reversed range, as a y axis drawn downwards", "args": [[0, 50], [300, 0], 10, false], "expect": 240 },
  { "fn": "linearScale", "name": "a reversed domain", "args": [[100, 0], [0, 1], 75, false], "expect": 0.25 },
  { "fn": "linearScale", "name": "negative values", "args": [[-20, 40], [0, 600], -5, false], "expect": 150 },
  { "fn": "linearScale", "name": "past the end runs on without clamp", "args": [[0, 10], [0, 100], 15, false], "expect": 150 },
  { "fn": "linearScale", "name": "past the end stops at the range with clamp", "args": [[0, 10], [0, 100], 15, true], "expect": 100 },
  { "fn": "linearScale", "name": "before the start stops at the range with clamp", "args": [[0, 10], [100, 200], -3, true], "expect": 100 },
  { "fn": "linearScale", "name": "clamp changes nothing inside the domain", "args": [[0, 10], [0, 100], 2.5, true], "expect": 25 },
  { "fn": "linearScale", "name": "a third is rounded to 6 decimal places", "args": [[0, 3], [0, 1], 1, false], "expect": 0.333333 },
  { "fn": "linearScale", "name": "fractional domain", "args": [[0.1, 0.3], [0, 10], 0.2, false], "expect": 5 },
  { "fn": "linearScale", "name": "a domain with no width is an error", "args": [[5, 5], [0, 100], 5, false], "expectError": "domain has no width" },
  { "fn": "linearScale", "name": "a domain needs two ends", "args": [[0, 1, 2], [0, 100], 1, false], "expectError": "domain must have exactly 2 values, [from, to]" },
  { "fn": "invertLinear", "name": "a pixel back to its value", "args": [[0, 100], [0, 500], 125], "expect": 25 },
  { "fn": "invertLinear", "name": "the start of the range is the start of the domain", "args": [[0, 100], [0, 500], 0], "expect": 0 },
  { "fn": "invertLinear", "name": "a reversed range", "args": [[0, 50], [300, 0], 240], "expect": 10 },
  { "fn": "invertLinear", "name": "past the end of the axis is past the end of the data", "args": [[0, 10], [0, 100], 150], "expect": 15 },
  { "fn": "invertLinear", "name": "a third is rounded to 6 decimal places", "args": [[0, 1], [0, 3], 1], "expect": 0.333333 },
  { "fn": "invertLinear", "name": "negative domain", "args": [[-20, 40], [0, 600], 150], "expect": -5 },
  { "fn": "invertLinear", "name": "a range with no width is an error", "args": [[0, 10], [7, 7], 7], "expectError": "range has no width" },
  { "fn": "invertLinear", "name": "a range needs two ends", "args": [[0, 10], [7], 7], "expectError": "range must have exactly 2 values, [from, to]" },
  { "fn": "niceDomain", "name": "widens to whole tens", "args": [[3, 97], 10], "expect": { "domain": [0, 100], "step": 10 } },
  { "fn": "niceDomain", "name": "small numbers widen to tenths", "args": [[0.13, 0.87], 10], "expect": { "domain": [0.1, 0.9], "step": 0.1 } },
  { "fn": "niceDomain", "name": "a messy extent becomes 0 to 10", "args": [[0.13, 9.7], 5], "expect": { "domain": [0, 10], "step": 2 } },
  { "fn": "niceDomain", "name": "an already nice domain is unchanged", "args": [[0, 100], 10], "expect": { "domain": [0, 100], "step": 10 } },
  { "fn": "niceDomain", "name": "negative to positive", "args": [[-12.5, 37.2], 5], "expect": { "domain": [-20, 40], "step": 10 } },
  { "fn": "niceDomain", "name": "a reversed domain stays reversed", "args": [[97, 3], 10], "expect": { "domain": [100, 0], "step": 10 } },
  { "fn": "niceDomain", "name": "large values step in fives of a power of ten", "args": [[1234, 98765], 20], "expect": { "domain": [0, 100000], "step": 5000 } },
  { "fn": "niceDomain", "name": "one tick", "args": [[2, 9], 1], "expect": { "domain": [0, 10], "step": 10 } },
  { "fn": "niceDomain", "name": "a fractional step that divides badly", "args": [[0.3, 0.9], 6], "expect": { "domain": [0.3, 0.9], "step": 0.1 } },
  { "fn": "niceDomain", "name": "equal ends are returned as they are", "args": [[4, 4], 10], "expect": { "domain": [4, 4], "step": 0 } },
  { "fn": "niceDomain", "name": "count must be at least 1", "args": [[0, 10], 0], "expectError": "count must be a whole number of at least 1" },
  { "fn": "niceDomain", "name": "a domain needs two ends", "args": [[1], 5], "expectError": "domain must have exactly 2 values, [from, to]" }
]