Functional Weave
Code in TypeScript

charts.ticks@1.0.0

vectors.json

7,976 bytes · view raw

[
  {"fn": "tickStep", "name": "ten ticks over ten", "args": [0, 10, 10], "expect": 1},
  {"fn": "tickStep", "name": "ten ticks over a hundred", "args": [0, 100, 10], "expect": 10},
  {"fn": "tickStep", "name": "a tenth, exactly the double 0.1", "args": [0, 1, 10], "expect": 0.1},
  {"fn": "tickStep", "name": "a fifth, as 1/5 rather than 0.1 * 2", "args": [0, 1, 5], "expect": 0.2},
  {"fn": "tickStep", "name": "9.7 rounds up to 10", "args": [0, 97, 10], "expect": 10},
  {"fn": "tickStep", "name": "3.7 rounds to 5", "args": [0, 37, 10], "expect": 5},
  {"fn": "tickStep", "name": "1.5 rounds to 2", "args": [0, 15, 10], "expect": 2},
  {"fn": "tickStep", "name": "negative to positive", "args": [-12.5, 37.2, 5], "expect": 10},
  {"fn": "tickStep", "name": "a reversed extent still has a positive step", "args": [100, 0, 10], "expect": 10},
  {"fn": "tickStep", "name": "a small fractional step", "args": [0, 0.05, 10], "expect": 0.005},
  {"fn": "tickStep", "name": "0.7 for one tick rounds to 0.5", "args": [0, 0.7, 1], "expect": 0.5},
  {"fn": "tickStep", "name": "0.9 for one tick rounds up to a whole 1", "args": [0, 0.9, 1], "expect": 1},
  {"fn": "tickStep", "name": "large values", "args": [0, 1234567, 5], "expect": 200000},
  {"fn": "tickStep", "name": "equal ends have no step", "args": [5, 5, 10], "expect": 0},
  {"fn": "tickStep", "name": "count of zero is an error", "args": [0, 10, 0], "expectError": "count must be a whole number of at least 1"},
  {"fn": "tickStep", "name": "fractional count is an error", "args": [0, 10, 1.5], "expectError": "count must be a whole number of at least 1"},
  {"fn": "niceTicks", "name": "steps of two", "args": [0, 10, 5], "expect": [0, 2, 4, 6, 8, 10]},
  {"fn": "niceTicks", "name": "tenths are exact: the fourth tick is 0.3, not 0.30000000000000004", "args": [0, 1, 10], "expect": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]},
  {"fn": "niceTicks", "name": "ticks inside a messy extent", "args": [0.13, 0.87, 5], "expect": [0.2, 0.4, 0.6, 0.8]},
  {"fn": "niceTicks", "name": "negative to positive, the ends are not ticks", "args": [-12.5, 37.2, 5], "expect": [-10, 0, 10, 20, 30]},
  {"fn": "niceTicks", "name": "a reversed extent gives ticks in its direction", "args": [10, 0, 5], "expect": [10, 8, 6, 4, 2, 0]},
  {"fn": "niceTicks", "name": "equal ends give that one value", "args": [5, 5, 10], "expect": [5]},
  {"fn": "niceTicks", "name": "one tick", "args": [1.2, 3.8, 1], "expect": [2]},
  {"fn": "niceTicks", "name": "one tick with no whole number inside retries at two, as d3 does", "args": [2.1, 2.9, 1], "expect": [2.5]},
  {"fn": "niceTicks", "name": "millions", "args": [0, 1000000, 4], "expect": [0, 200000, 400000, 600000, 800000, 1000000]},
  {"fn": "niceTicks", "name": "thousandths", "args": [0.001, 0.0055, 4], "expect": [0.001, 0.002, 0.003, 0.004, 0.005]},
  {"fn": "niceTicks", "name": "all negative", "args": [-1, -0.5, 5], "expect": [-1, -0.9, -0.8, -0.7, -0.6, -0.5]},
  {"fn": "niceTicks", "name": "count of zero is an error", "args": [0, 10, 0], "expectError": "count must be a whole number of at least 1"},
  {"fn": "timeTickInterval", "name": "ten days, ten ticks: daily", "args": ["2026-01-01", "2026-01-11", 10], "expect": {"interval": "day", "step": 1}},
  {"fn": "timeTickInterval", "name": "a month, ten ticks: every other day", "args": ["2026-01-01", "2026-01-31", 10], "expect": {"interval": "day", "step": 2}},
  {"fn": "timeTickInterval", "name": "a quarter, ten ticks: weekly", "args": ["2026-01-01", "2026-04-01", 10], "expect": {"interval": "week", "step": 1}},
  {"fn": "timeTickInterval", "name": "a year, ten ticks: monthly", "args": ["2026-01-01", "2027-01-01", 10], "expect": {"interval": "month", "step": 1}},
  {"fn": "timeTickInterval", "name": "a reversed year is the same", "args": ["2027-01-01", "2026-01-01", 10], "expect": {"interval": "month", "step": 1}},
  {"fn": "timeTickInterval", "name": "two years, five ticks: quarterly", "args": ["2026-01-01", "2028-01-01", 5], "expect": {"interval": "quarter", "step": 1}},
  {"fn": "timeTickInterval", "name": "a hundred days for one tick is nearer a quarter than a year", "args": ["2026-01-01", "2026-04-11", 1], "expect": {"interval": "quarter", "step": 1}},
  {"fn": "timeTickInterval", "name": "a decade, five ticks: every two years", "args": ["2020-01-01", "2030-01-01", 5], "expect": {"interval": "year", "step": 2}},
  {"fn": "timeTickInterval", "name": "fifty years, five ticks: every ten years", "args": ["1975-01-01", "2025-01-01", 5], "expect": {"interval": "year", "step": 10}},
  {"fn": "timeTickInterval", "name": "the same day: daily", "args": ["2026-01-01", "2026-01-01", 5], "expect": {"interval": "day", "step": 1}},
  {"fn": "timeTickInterval", "name": "count of zero is an error", "args": ["2026-01-01", "2027-01-01", 0], "expectError": "count must be a whole number of at least 1"},
  {"fn": "timeTickInterval", "name": "an impossible date is an error", "args": ["2026-02-30", "2027-01-01", 5], "expectError": "is not a real calendar date"},
  {"fn": "timeTicks", "name": "every day across a month end", "args": ["2026-01-30", "2026-02-02", "day", 1], "expect": ["2026-01-30", "2026-01-31", "2026-02-01", "2026-02-02"]},
  {"fn": "timeTicks", "name": "every other day follows the day of the month, restarting on the 1st", "args": ["2026-01-28", "2026-02-04", "day", 2], "expect": ["2026-01-29", "2026-01-31", "2026-02-01", "2026-02-03"]},
  {"fn": "timeTicks", "name": "a leap day", "args": ["2024-02-28", "2024-03-01", "day", 1], "expect": ["2024-02-28", "2024-02-29", "2024-03-01"]},
  {"fn": "timeTicks", "name": "Mondays in September 2026", "args": ["2026-09-01", "2026-09-30", "week", 1], "expect": ["2026-09-07", "2026-09-14", "2026-09-21", "2026-09-28"]},
  {"fn": "timeTicks", "name": "every other Monday, counted from 1970-01-05", "args": ["2026-09-01", "2026-09-30", "week", 2], "expect": ["2026-09-14", "2026-09-28"]},
  {"fn": "timeTicks", "name": "Mondays either side of 1970", "args": ["1969-12-29", "1970-01-06", "week", 1], "expect": ["1969-12-29", "1970-01-05"]},
  {"fn": "timeTicks", "name": "month starts, the first after a mid-month start", "args": ["2026-01-15", "2026-05-01", "month", 1], "expect": ["2026-02-01", "2026-03-01", "2026-04-01", "2026-05-01"]},
  {"fn": "timeTicks", "name": "every third month is January, April, July, October", "args": ["2026-01-01", "2026-12-31", "month", 3], "expect": ["2026-01-01", "2026-04-01", "2026-07-01", "2026-10-01"]},
  {"fn": "timeTicks", "name": "quarter starts across a year end", "args": ["2025-11-15", "2026-08-01", "quarter", 1], "expect": ["2026-01-01", "2026-04-01", "2026-07-01"]},
  {"fn": "timeTicks", "name": "every other quarter", "args": ["2026-01-01", "2027-01-01", "quarter", 2], "expect": ["2026-01-01", "2026-07-01", "2027-01-01"]},
  {"fn": "timeTicks", "name": "1 January each year", "args": ["2023-06-01", "2026-01-01", "year", 1], "expect": ["2024-01-01", "2025-01-01", "2026-01-01"]},
  {"fn": "timeTicks", "name": "every fifth year falls on multiples of five", "args": ["2001-03-01", "2021-12-31", "year", 5], "expect": ["2005-01-01", "2010-01-01", "2015-01-01", "2020-01-01"]},
  {"fn": "timeTicks", "name": "a reversed extent gives ticks in its direction", "args": ["2026-02-02", "2026-01-30", "day", 1], "expect": ["2026-02-02", "2026-02-01", "2026-01-31", "2026-01-30"]},
  {"fn": "timeTicks", "name": "no month starts inside", "args": ["2026-01-02", "2026-01-30", "month", 1], "expect": []},
  {"fn": "timeTicks", "name": "step of zero is an error", "args": ["2026-01-01", "2026-02-01", "day", 0], "expectError": "step must be a whole number of at least 1"},
  {"fn": "timeTicks", "name": "an unknown interval is an error", "args": ["2026-01-01", "2026-02-01", "hour", 1], "expectError": "unknown time interval \"hour\""},
  {"fn": "timeTicks", "name": "more than 10,000 ticks is an error", "args": ["2000-01-01", "2030-01-01", "day", 1], "expectError": "too many ticks: more than 10000"}
]