{"version":3,"sources":["../../src/test-data/types.ts","../../src/test-data/generators.ts","../../src/test-data/real-world-tests.ts","../../src/test-data/scatter-tests.ts","../../src/test-data/bar-tests.ts","../../src/test-data/distribution-tests.ts","../../src/test-data/density-2d-tests.ts","../../src/test-data/violin-tests.ts","../../src/test-data/line-tests.ts","../../src/test-data/sparkline-tests.ts","../../src/test-data/line-area-tests.ts","../../src/test-data/slope-tests.ts","../../src/test-data/connected-scatter-tests.ts","../../src/test-data/area-tests.ts","../../src/test-data/range-area-tests.ts","../../src/test-data/ecdf-tests.ts","../../src/test-data/specialized-tests.ts","../../src/test-data/facet-tests.ts","../../src/test-data/stress-tests.ts","../../src/test-data/gas-pressure-tests.ts","../../src/test-data/line-area-stretch-tests.ts","../../src/test-data/echarts-tests.ts","../../src/test-data/chartjs-tests.ts","../../src/test-data/plotly-tests.ts","../../src/test-data/discrete-axis-tests.ts","../../src/test-data/date-tests.ts","../../src/test-data/semantic-tests.ts","../../src/test-data/map-tests.ts","../../src/test-data/gantt-bullet-tests.ts","../../src/test-data/omni-viz-dataset.ts","../../src/test-data/omni-viz-tests.ts","../../src/test-data/static-series-tests.ts","../../src/gallery/regional-survey-data.ts","../../src/gallery/regional-survey-tests.ts","../../src/gallery/bi-tests.ts","../../src/test-data/gallery-facet-tests.ts","../../src/test-data/index.ts"],"names":["meta","Date","data","cats","gauss","normal","genBarData","genScatterData","genScatterColorData","genLineData","genMultiSeriesLineData","genStackedBarData","genGroupedBarData","MONTHS","region","CITIES"],"mappings":"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AM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,GAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACjG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,GAAI,CAAA;AAAA,EACjG,CAAC,IAAA,EAAM,IAAA,EAAM,GAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACjG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EACjG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,GAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,GAAI,CAAA;AAAA,EACjG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAAG,CA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","file":"index.cjs","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Types and helper utilities for chart gallery test cases.\n * No React/UI dependencies — pure TypeScript.\n */\n\nimport { Type } from './df-types';\nimport { Channel, EncodingItem, FieldItem } from './df-types';\nimport { AssembleOptions } from '../core/types';\nimport type { SemanticAnnotation } from '../core/field-semantics';\n\n// ============================================================================\n// Test Case Definition\n// ============================================================================\n\nexport interface TestCase {\n    title: string;\n    description: string;\n    tags: string[];  // e.g., ['temporal', 'large-cardinality', 'color']\n    chartType: string;\n    data: Record<string, any>[];\n    fields: FieldItem[];\n    metadata: Record<string, { type: Type; semanticType: string; levels: any[] }>;\n    encodingMap: Partial<Record<Channel, EncodingItem>>;\n    chartProperties?: Record<string, any>;\n    assembleOptions?: AssembleOptions;\n    /**\n     * Enriched semantic annotations that override the plain semanticType strings\n     * in metadata. Use this when a field needs extra info like intrinsicDomain or unit.\n     * E.g., { rating: { semanticType: 'Score', intrinsicDomain: [1, 5] } }\n     */\n    semanticAnnotations?: Record<string, SemanticAnnotation>;\n}\n\n/** Date format definition for date stress tests */\nexport interface DateFormat {\n    label: string;\n    description: string;\n    values: any[];\n    fieldName: string;\n    expectedType: Type;\n    semanticType: string;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function makeField(name: string, tableRef = 'test'): FieldItem {\n    return { id: name, name, source: 'original', tableRef };\n}\n\nexport function makeEncodingItem(fieldID: string, opts?: Partial<EncodingItem>): EncodingItem {\n    return { fieldID, ...opts };\n}\n\nexport function inferType(values: any[]): Type {\n    if (values.length === 0) return Type.String;\n    const sample = values.find(v => v != null);\n    if (typeof sample === 'number') return Type.Number;\n    if (typeof sample === 'boolean') return Type.String;\n    if (sample instanceof Date) return Type.Date;\n    // Check if string looks like a date\n    if (typeof sample === 'string' && !isNaN(Date.parse(sample)) && sample.length > 4) return Type.Date;\n    return Type.String;\n}\n\nexport function buildMetadata(data: Record<string, any>[]): Record<string, { type: Type; semanticType: string; levels: any[] }> {\n    if (data.length === 0) return {};\n    const meta: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    for (const key of Object.keys(data[0])) {\n        const values = data.map(r => r[key]).filter(v => v != null);\n        const type = inferType(values);\n        const levels = [...new Set(values)];\n        // Assign semantic types heuristically\n        let semanticType = '';\n        if (type === Type.Date || type === Type.DateTime || type === Type.Time) semanticType = 'Date';\n        else if (type === Type.Number || type === Type.Duration) semanticType = 'Quantity';\n        else semanticType = 'Category';\n        meta[key] = { type, semanticType, levels };\n    }\n    return meta;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Synthetic data generators for chart gallery test cases.\n * Pure utility functions — no React/UI dependencies.\n */\n\n// ============================================================================\n// Synthetic Data Generators\n// ============================================================================\n\n/** Seeded random for reproducibility */\nexport function seededRandom(seed: number) {\n    return () => {\n        seed = (seed * 16807 + 0) % 2147483647;\n        return (seed - 1) / 2147483646;\n    };\n}\n\n/** Generate an array of sequential dates */\nexport function genDates(n: number, startYear = 2018): string[] {\n    const dates: string[] = [];\n    const start = new Date(startYear, 0, 1);\n    for (let i = 0; i < n; i++) {\n        const d = new Date(start);\n        d.setDate(start.getDate() + Math.floor(i * (365 * 3 / n)));\n        dates.push(d.toISOString().slice(0, 10));\n    }\n    return dates;\n}\n\n/** Generate month names */\nexport function genMonths(n: number): string[] {\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    return months.slice(0, Math.min(n, 12));\n}\n\n/** Generate year values */\nexport function genYears(n: number, start = 2000): number[] {\n    return Array.from({ length: n }, (_, i) => start + i);\n}\n\n/** Generate natural-looking date strings like \"Jun 12 1998\" */\nexport function genNaturalDates(n: number, startYear = 1998): string[] {\n    const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const dates: string[] = [];\n    const start = new Date(startYear, 0, 1);\n    for (let i = 0; i < n; i++) {\n        const d = new Date(start);\n        d.setDate(start.getDate() + Math.floor(i * (365 * 5 / n)));\n        dates.push(`${monthNames[d.getMonth()]} ${String(d.getDate()).padStart(2, '0')} ${d.getFullYear()}`);\n    }\n    return dates;\n}\n\n/** Generate ordinal labels with inherent sequence: \"Stage 1\", \"Stage 2\", etc. */\nexport function genOrdinalLabels(prefix: string, n: number): string[] {\n    return Array.from({ length: n }, (_, i) => `${prefix} ${i + 1}`);\n}\n\n/** Ordinal label prefixes — rotated for variety across channels */\nexport const ORDINAL_PREFIXES = ['Stage', 'Step', 'Phase', 'Level', 'Round'];\n\n/** Generate category names by semantic type */\nexport function genCategories(semanticType: string, n: number): string[] {\n    const pools: Record<string, string[]> = {\n        Country: ['USA', 'China', 'Japan', 'Germany', 'UK', 'France', 'India', 'Brazil', 'Canada', 'Australia',\n            'South Korea', 'Mexico', 'Italy', 'Spain', 'Russia', 'Netherlands', 'Sweden', 'Norway', 'Denmark', 'Finland',\n            'Switzerland', 'Belgium', 'Austria', 'Poland', 'Portugal', 'Turkey', 'Argentina', 'Chile', 'Colombia', 'Peru'],\n        Company: ['Apple', 'Google', 'Microsoft', 'Amazon', 'Meta', 'Tesla', 'Netflix', 'Adobe', 'Intel', 'Nvidia',\n            'Samsung', 'IBM', 'Oracle', 'SAP', 'Salesforce', 'Uber', 'Lyft', 'Spotify', 'Snap', 'Twitter',\n            'Palantir', 'Shopify', 'Square', 'Zoom', 'Slack', 'Twilio', 'Datadog', 'Snowflake', 'Confluent', 'MongoDB'],\n        Product: ['Laptop', 'Phone', 'Tablet', 'Desktop', 'Monitor', 'Keyboard', 'Mouse', 'Headphones', 'Speaker', 'Camera',\n            'TV', 'Router', 'Printer', 'Scanner', 'SSD', 'HDD', 'RAM', 'GPU', 'CPU', 'Motherboard'],\n        Category: ['Electronics', 'Clothing', 'Food', 'Books', 'Sports', 'Home', 'Garden', 'Auto', 'Health', 'Beauty',\n            'Toys', 'Music', 'Movies', 'Software', 'Games', 'Office', 'Pet', 'Baby', 'Tools', 'Crafts'],\n        City: ['New York', 'London', 'Tokyo', 'Paris', 'Berlin', 'Sydney', 'Toronto', 'Madrid', 'Rome', 'Seoul',\n            'Mumbai', 'Dubai', 'Singapore', 'Chicago', 'Boston', 'Austin', 'Denver', 'Seattle', 'Miami', 'Atlanta'],\n        Department: ['Engineering', 'Sales', 'Marketing', 'HR', 'Finance', 'Legal', 'Operations', 'Support', 'Design', 'Research',\n            'QA', 'DevOps', 'Security', 'Analytics', 'Product'],\n        Status: ['Active', 'Inactive', 'Pending', 'Completed', 'Failed'],\n        Name: ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Hank', 'Ivy', 'Jack',\n            'Kate', 'Leo', 'Mona', 'Nick', 'Olivia', 'Pat', 'Quinn', 'Ray', 'Sara', 'Tom',\n            'Uma', 'Vic', 'Wendy', 'Xander', 'Yara', 'Zoe', 'Aaron', 'Beth', 'Carl', 'Dana'],\n        Director: ['Steven Spielberg', 'James Cameron', 'Chris Columbus', 'George Lucas', 'Peter Jackson',\n            'Robert Zemeckis', 'Michael Bay', 'Roland Emmerich', 'Gore Verbinski', 'Tim Burton',\n            'Andrew Adamson', 'Sam Raimi', 'Ron Howard', 'Christopher Nolan', 'M. Night Shyamalan',\n            'David Yates', 'John Lasseter', 'Carlos Saldanha', 'Andy Wachowski', 'Ridley Scott'],\n        MovieTitle: ['The Dark Knight', 'Spider-Man', 'Avatar', 'Titanic', 'Jurassic Park', 'Star Wars',\n            'The Matrix', 'Inception', 'Interstellar', 'Gladiator', 'The Avengers', 'Iron Man',\n            'Frozen', 'Toy Story', 'Finding Nemo', 'Shrek', 'Cars', 'Up', 'WALL-E', 'Coco',\n            'Moana', 'Ratatouille', 'Inside Out', 'Big Hero 6', 'Brave', 'Tangled', 'Zootopia',\n            'The Lion King', 'Aladdin', 'Beauty and the Beast'],\n    };\n    const pool = pools[semanticType] || pools.Category;\n    return pool.slice(0, Math.min(n, pool.length));\n}\n\n/** Generate n random unique names (first + last) for very large discrete tests */\nexport function genRandomNames(n: number, seed = 777): string[] {\n    const firsts = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer', 'Michael', 'Linda', 'William', 'Elizabeth',\n        'David', 'Barbara', 'Richard', 'Susan', 'Joseph', 'Jessica', 'Thomas', 'Sarah', 'Charles', 'Karen',\n        'Christopher', 'Lisa', 'Daniel', 'Nancy', 'Matthew', 'Betty', 'Anthony', 'Margaret', 'Mark', 'Sandra',\n        'Steven', 'Ashley', 'Paul', 'Dorothy', 'Andrew', 'Kimberly', 'Joshua', 'Emily', 'Kenneth', 'Donna'];\n    const lasts = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez',\n        'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin',\n        'Lee', 'Perez', 'Thompson', 'White', 'Harris', 'Sanchez', 'Clark', 'Ramirez', 'Lewis', 'Robinson',\n        'Walker', 'Young', 'Allen', 'King', 'Wright', 'Scott', 'Torres', 'Nguyen', 'Hill', 'Flores'];\n    const rand = seededRandom(seed);\n    const names = new Set<string>();\n    while (names.size < n) {\n        const f = firsts[Math.floor(rand() * firsts.length)];\n        const l = lasts[Math.floor(rand() * lasts.length)];\n        names.add(`${f} ${l}`);\n    }\n    return [...names];\n}\n\n/** Generate random numeric measure values */\nexport function genMeasure(n: number, min = 10, max = 1000, integers = false): number[] {\n    return Array.from({ length: n }, () => {\n        const v = min + Math.random() * (max - min);\n        return integers ? Math.round(v) : Math.round(v * 100) / 100;\n    });\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Real-world gallery cases.\n *\n * A curated set of examples backed by **real, recognizable datasets** (public\n * domain / CC-BY / government facts) rather than synthetic random numbers. They\n * are appended into the per-chart-type gallery generators and tagged\n * `gallery-pin` so `selectVariants` always surfaces them on the wall, alongside\n * (or in place of) the synthetic coverage cases.\n *\n * Each case is built from a compact spec via {@link realCase}, which fills in\n * the `fields` / `metadata` / `encodingMap` boilerplate (metadata is inferred\n * with {@link buildMetadata}, then the given semantic types are applied).\n *\n * Provenance for every dataset is recorded in the case `description` and in\n * design-docs/gallery-data-audit.md (§6 licensing). Numbers are real values\n * transcribed from the cited source (small samples, re-keyed — facts are not\n * copyrightable).\n */\n\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\n\ninterface RealSpec {\n    chartType: string;\n    title: string;\n    description: string;\n    tags?: string[];\n    /** field name → semantic type override (applied over inferred metadata). */\n    semantic: Record<string, string>;\n    /** channel → field name (bare-field encodings). */\n    encodings: Record<string, string>;\n    data: Record<string, any>[];\n    chartProperties?: Record<string, any>;\n}\n\nfunction realCase(spec: RealSpec): TestCase {\n    const keys = Object.keys(spec.data[0] ?? {});\n    const metadata = buildMetadata(spec.data);\n    for (const [field, st] of Object.entries(spec.semantic)) {\n        if (metadata[field]) metadata[field].semanticType = st;\n    }\n    const encodingMap: TestCase['encodingMap'] = {};\n    for (const [channel, field] of Object.entries(spec.encodings)) {\n        (encodingMap as any)[channel] = makeEncodingItem(field);\n    }\n    return {\n        title: spec.title,\n        description: spec.description,\n        tags: ['real', 'gallery-pin', ...(spec.tags ?? [])],\n        chartType: spec.chartType,\n        data: spec.data,\n        fields: keys.map((k) => makeField(k)),\n        metadata,\n        encodingMap,\n        ...(spec.chartProperties ? { chartProperties: spec.chartProperties } : {}),\n    };\n}\n\n// ── Shared datasets (reused across a few chart types) ──────────────────────\n\nconst PENGUINS: [string, number, number][] = [\n    ['Adelie', 181, 3750], ['Adelie', 186, 3800], ['Adelie', 195, 3250], ['Adelie', 193, 3450],\n    ['Adelie', 190, 3650], ['Adelie', 181, 3625], ['Adelie', 195, 4675], ['Adelie', 182, 3200],\n    ['Adelie', 191, 3800], ['Adelie', 198, 4400], ['Adelie', 185, 3700],\n    ['Chinstrap', 192, 3500], ['Chinstrap', 196, 3900], ['Chinstrap', 193, 3650],\n    ['Chinstrap', 188, 3525], ['Chinstrap', 197, 3950], ['Chinstrap', 198, 3800],\n    ['Chinstrap', 178, 3300], ['Chinstrap', 207, 4800], ['Chinstrap', 201, 4050], ['Chinstrap', 191, 3550],\n    ['Gentoo', 211, 4500], ['Gentoo', 230, 5700], ['Gentoo', 210, 4450], ['Gentoo', 218, 5700],\n    ['Gentoo', 215, 5400], ['Gentoo', 219, 5550], ['Gentoo', 209, 4800], ['Gentoo', 215, 5000],\n    ['Gentoo', 214, 4650], ['Gentoo', 216, 5550], ['Gentoo', 221, 5950], ['Gentoo', 217, 5250],\n];\n\nconst FAITHFUL: number[] = [\n    3.6, 1.8, 3.333, 2.283, 4.533, 2.883, 4.7, 3.6, 1.95, 4.35, 1.833, 3.917, 4.2, 1.75,\n    4.7, 2.167, 1.75, 4.8, 1.6, 4.25, 1.8, 1.75, 3.45, 3.067, 4.533, 3.6, 1.967, 4.083,\n    3.85, 4.433, 4.3, 4.467, 3.367, 4.033, 3.833, 2.017,\n];\n\nconst DRIVING: [number, number, number][] = [\n    [1956, 3675, 2.38], [1957, 3706, 2.40], [1958, 3766, 2.26], [1959, 3905, 2.31], [1960, 3935, 2.27],\n    [1961, 3977, 2.25], [1962, 4085, 2.22], [1963, 4218, 2.12], [1964, 4369, 2.11], [1965, 4538, 2.14],\n    [1966, 4676, 2.14], [1967, 4827, 2.14], [1968, 5038, 2.13], [1969, 5207, 2.07], [1970, 5376, 2.01],\n    [1971, 5617, 1.93], [1972, 5973, 1.87], [1973, 6154, 1.90], [1974, 5943, 2.34], [1975, 6111, 2.31],\n    [1976, 6389, 2.32], [1977, 6630, 2.36], [1978, 6883, 2.23], [1979, 6744, 2.68], [1980, 6672, 3.30],\n    [1981, 6732, 3.30], [1982, 6835, 2.92], [1983, 6943, 2.66], [1984, 7130, 2.48], [1985, 7323, 2.36],\n    [1986, 7558, 1.76], [1987, 7770, 1.76], [1988, 8089, 1.68], [1989, 8397, 1.75], [1990, 8529, 1.88],\n    [1991, 8535, 1.78], [1992, 8662, 1.69], [1993, 8855, 1.60], [1994, 8909, 1.59], [1995, 9150, 1.60],\n    [1996, 9192, 1.67], [1997, 9416, 1.65], [1998, 9590, 1.39], [1999, 9687, 1.50], [2000, 9717, 1.89],\n    [2001, 9699, 1.77], [2002, 9814, 1.64], [2003, 9868, 1.86], [2004, 9994, 2.14], [2005, 10067, 2.53],\n    [2006, 10037, 2.79], [2007, 10025, 2.95], [2008, 9880, 3.31], [2009, 9657, 2.38], [2010, 9596, 2.61],\n];\n\n// ── Per-chart-type case builders ───────────────────────────────────────────\n\nexport function realConnectedScatterCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Connected Scatter Plot',\n            title: 'Driving Shifts Into Reverse — miles vs gas price (US, 1956–2010)',\n            description: 'Miles driven per capita vs the price of gas, connected in year order — the classic self-crossing connected scatterplot (NYT / Hannah Fairfield; FHWA + EIA data).',\n            tags: ['quantitative', 'temporal-order', 'self-crossing', 'large'],\n            semantic: { Year: 'Year', 'Miles/person': 'Quantity', 'Gas price': 'Quantity' },\n            encodings: { x: 'Miles/person', y: 'Gas price', order: 'Year' },\n            data: DRIVING.map(([Year, miles, gas]) => ({ Year, 'Miles/person': miles, 'Gas price': gas })),\n        }),\n    ];\n}\n\nexport function realScatterCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Scatter Plot',\n            title: 'Palmer Penguins — flipper length vs body mass',\n            description: 'Three species form crisp clusters — the modern replacement for the iris dataset (Palmer Station LTER, CC0).',\n            tags: ['quantitative', 'color', 'clusters'],\n            semantic: { Species: 'Category', 'Flipper length (mm)': 'Quantity', 'Body mass (g)': 'Quantity' },\n            encodings: { x: 'Flipper length (mm)', y: 'Body mass (g)', color: 'Species' },\n            data: PENGUINS.map(([Species, flip, mass]) => ({ Species, 'Flipper length (mm)': flip, 'Body mass (g)': mass })),\n        }),\n        realCase({\n            chartType: 'Scatter Plot',\n            title: 'Gapminder — life expectancy vs income per capita (2018)',\n            description: 'The Rosling bubble chart: wealth vs health, bubble size = population, colour = continent, on a log income axis (Gapminder / World Bank).',\n            tags: ['quantitative', 'color', 'size', 'log'],\n            semantic: { 'GDP per capita': 'Quantity', 'Life expectancy': 'Quantity', 'Population (M)': 'Quantity', Continent: 'Category' },\n            encodings: { x: 'GDP per capita', y: 'Life expectancy', size: 'Population (M)', color: 'Continent' },\n            chartProperties: { logScale_x: true },\n            data: [\n                ['Norway', 64800, 82.3, 5.3, 'Europe'], ['United States', 62600, 78.6, 327, 'Americas'],\n                ['Japan', 39300, 84.2, 127, 'Asia'], ['China', 16800, 76.7, 1393, 'Asia'],\n                ['India', 6900, 69.4, 1353, 'Asia'], ['Nigeria', 5300, 54.3, 196, 'Africa'],\n                ['Brazil', 15600, 75.7, 209, 'Americas'], ['Germany', 50900, 81.0, 83, 'Europe'],\n                ['Ethiopia', 2000, 66.2, 109, 'Africa'], ['Russia', 25800, 72.4, 145, 'Europe'],\n                ['Mexico', 19800, 75.0, 126, 'Americas'], ['Indonesia', 12400, 71.5, 268, 'Asia'],\n                ['Qatar', 116900, 80.1, 2.8, 'Asia'], ['South Africa', 13000, 63.9, 57, 'Africa'],\n                ['Bangladesh', 4200, 72.3, 161, 'Asia'],\n            ].map(([Country, gdp, life, pop, Continent]) => ({ Country, 'GDP per capita': gdp, 'Life expectancy': life, 'Population (M)': pop, Continent })),\n        }),\n    ];\n}\n\nexport function realRegressionCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Regression',\n            title: 'Auto MPG — horsepower vs fuel economy',\n            description: 'The classic inverse relationship: more horsepower, fewer miles per gallon (UCI / StatLib Auto MPG sample).',\n            tags: ['quantitative', 'trend'],\n            semantic: { Horsepower: 'Quantity', MPG: 'Quantity' },\n            encodings: { x: 'Horsepower', y: 'MPG' },\n            data: [[130, 18], [165, 15], [150, 18], [150, 16], [140, 17], [198, 15], [220, 14], [215, 14], [97, 22], [85, 26], [88, 25], [46, 26], [90, 25], [95, 24], [68, 29], [70, 27], [52, 30], [65, 31], [67, 30], [48, 43], [66, 32], [100, 22]].map(([Horsepower, MPG]) => ({ Horsepower, MPG })),\n        }),\n        realCase({\n            chartType: 'Regression',\n            title: \"Anscombe's Quartet — same stats, different shapes\",\n            description: 'Four datasets with identical means, variances and regression lines, but wildly different when plotted (Anscombe 1973).',\n            tags: ['quantitative', 'facet', 'teaching'],\n            semantic: { Dataset: 'Category', X: 'Quantity', Y: 'Quantity' },\n            encodings: { x: 'X', y: 'Y', column: 'Dataset' },\n            chartProperties: { facetColumns: 2 },\n            data: (() => {\n                const x1 = [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5];\n                const sets: Record<string, { x: number[]; y: number[] }> = {\n                    I: { x: x1, y: [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68] },\n                    II: { x: x1, y: [9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74] },\n                    III: { x: x1, y: [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73] },\n                    IV: { x: [8, 8, 8, 8, 8, 8, 8, 19, 8, 8, 8], y: [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.50, 5.56, 7.91, 6.89] },\n                };\n                const rows: Record<string, any>[] = [];\n                for (const [Dataset, { x, y }] of Object.entries(sets)) x.forEach((X, i) => rows.push({ Dataset, X, Y: y[i] }));\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realLineCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Line Chart',\n            title: 'Keeling Curve — atmospheric CO₂ at Mauna Loa',\n            description: 'The defining climate record: annual-mean CO₂ rising from 316 ppm (1959) to 421 ppm (2023) (Scripps / NOAA).',\n            tags: ['temporal', 'single'],\n            semantic: { Year: 'Year', 'CO₂ (ppm)': 'Quantity' },\n            encodings: { x: 'Year', y: 'CO₂ (ppm)' },\n            data: [[1959, 315.98], [1965, 320.04], [1970, 325.68], [1975, 331.11], [1980, 338.80], [1985, 346.12], [1990, 354.45], [1995, 360.82], [2000, 369.71], [2005, 379.98], [2010, 389.90], [2015, 400.83], [2020, 414.24], [2023, 421.08]].map(([Year, ppm]) => ({ Year, 'CO₂ (ppm)': ppm })),\n        }),\n        realCase({\n            chartType: 'Line Chart',\n            title: 'US unemployment rate, 2000–2023 (%)',\n            description: 'The 2009 financial-crisis plateau and the sharp 2020 pandemic spike (US Bureau of Labor Statistics).',\n            tags: ['temporal', 'single'],\n            semantic: { Year: 'Year', 'Unemployment (%)': 'Quantity' },\n            encodings: { x: 'Year', y: 'Unemployment (%)' },\n            data: [[2000, 4.0], [2001, 4.7], [2002, 5.8], [2003, 6.0], [2004, 5.5], [2005, 5.1], [2006, 4.6], [2007, 4.6], [2008, 5.8], [2009, 9.3], [2010, 9.6], [2011, 8.9], [2012, 8.1], [2013, 7.4], [2014, 6.2], [2015, 5.3], [2016, 4.9], [2017, 4.4], [2018, 3.9], [2019, 3.7], [2020, 8.1], [2021, 5.3], [2022, 3.6], [2023, 3.6]].map(([Year, v]) => ({ Year, 'Unemployment (%)': v })),\n        }),\n    ];\n}\n\nexport function realAreaCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Area Chart',\n            title: 'Share of the world online, 1995–2023 (%)',\n            description: 'From ~1% to two-thirds of humanity in under three decades (Our World in Data / ITU).',\n            tags: ['temporal', 'single'],\n            semantic: { Year: 'Year', 'Internet users (%)': 'Quantity' },\n            encodings: { x: 'Year', y: 'Internet users (%)' },\n            data: [[1995, 1], [2000, 7], [2005, 16], [2010, 29], [2015, 43], [2018, 51], [2020, 60], [2023, 67]].map(([Year, v]) => ({ Year, 'Internet users (%)': v })),\n        }),\n    ];\n}\n\nexport function realBarCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Bar Chart',\n            title: 'Most populous countries, 2023 (millions)',\n            description: 'The year India overtook China (UN World Population Prospects / World Bank).',\n            tags: ['nominal', 'single', 'horizontal'],\n            semantic: { Country: 'Country', Population: 'Quantity' },\n            encodings: { y: 'Country', x: 'Population' },\n            data: [['India', 1428.6], ['China', 1425.7], ['United States', 339.9], ['Indonesia', 277.5], ['Pakistan', 240.5], ['Nigeria', 223.8], ['Brazil', 216.4], ['Bangladesh', 173.0], ['Russia', 144.4], ['Mexico', 128.5]].map(([Country, Population]) => ({ Country, Population })),\n        }),\n        realCase({\n            chartType: 'Bar Chart',\n            title: 'Global temperature anomaly by decade (°C vs 1951–1980)',\n            description: 'Bars cross zero — cool early decades below, rapid warming above (NASA GISTEMP).',\n            tags: ['nominal', 'diverging'],\n            semantic: { Decade: 'Category', 'Anomaly (°C)': 'Quantity' },\n            encodings: { x: 'Decade', y: 'Anomaly (°C)' },\n            data: [['1880s', -0.17], ['1900s', -0.16], ['1920s', -0.27], ['1940s', 0.12], ['1960s', -0.03], ['1980s', 0.26], ['2000s', 0.40], ['2010s', 0.72], ['2020s', 1.02]].map(([Decade, v]) => ({ Decade, 'Anomaly (°C)': v })),\n        }),\n    ];\n}\n\nexport function realLollipopCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Lollipop Chart',\n            title: 'CO₂ emissions per capita, 2022 (tonnes)',\n            description: 'Per-person emissions vary ~20× across countries (Our World in Data / Global Carbon Project).',\n            tags: ['nominal', 'single'],\n            semantic: { Country: 'Country', 'Tonnes/person': 'Quantity' },\n            encodings: { x: 'Country', y: 'Tonnes/person' },\n            data: [['Qatar', 37], ['UAE', 22], ['United States', 15], ['Canada', 14], ['Russia', 11], ['Japan', 8.5], ['China', 8.0], ['Germany', 8.0], ['UK', 5.0], ['France', 4.6], ['Brazil', 2.3], ['India', 2.0]].map(([Country, v]) => ({ Country, 'Tonnes/person': v })),\n        }),\n    ];\n}\n\nexport function realHistogramCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Histogram',\n            title: 'Old Faithful — distribution of eruption durations',\n            description: 'Two humps: short (~2 min) and long (~4.5 min) eruptions — a mean would hide this (R \"faithful\" sample).',\n            tags: ['quantitative', 'bimodal'],\n            semantic: { 'Duration (min)': 'Quantity' },\n            encodings: { x: 'Duration (min)' },\n            data: FAITHFUL.map((d) => ({ 'Duration (min)': d })),\n        }),\n    ];\n}\n\nexport function realDensityCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Density Plot',\n            title: 'Old Faithful — eruption duration density',\n            description: 'The same bimodal shape as a smooth density curve (R \"faithful\" sample).',\n            tags: ['quantitative', 'bimodal'],\n            semantic: { 'Duration (min)': 'Quantity' },\n            encodings: { x: 'Duration (min)' },\n            data: FAITHFUL.map((d) => ({ 'Duration (min)': d })),\n        }),\n    ];\n}\n\nexport function realBoxplotCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Boxplot',\n            title: 'Penguin body mass by species',\n            description: 'Gentoo penguins are markedly heavier than Adélie and Chinstrap (Palmer Station LTER, CC0).',\n            tags: ['quantitative', 'category'],\n            semantic: { Species: 'Category', 'Body mass (g)': 'Quantity' },\n            encodings: { x: 'Species', y: 'Body mass (g)' },\n            data: PENGUINS.map(([Species, , mass]) => ({ Species, 'Body mass (g)': mass })),\n        }),\n    ];\n}\n\nexport function realStripCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Strip Plot',\n            title: 'Iris petal length by species',\n            description: 'Setosa petals are tiny and tightly clustered; the other two overlap more (Fisher 1936 sample).',\n            tags: ['quantitative', 'category'],\n            semantic: { Species: 'Category', 'Petal length (cm)': 'Quantity' },\n            encodings: { x: 'Species', y: 'Petal length (cm)' },\n            data: (() => {\n                const t: Record<string, number[]> = { Setosa: [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.5, 1.6], Versicolor: [4.7, 4.5, 4.9, 4.0, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9], Virginica: [6.0, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1] };\n                const rows: Record<string, any>[] = [];\n                for (const [Species, arr] of Object.entries(t)) for (const v of arr) rows.push({ Species, 'Petal length (cm)': v });\n                return rows;\n            })(),\n        }),\n    ];\n}\n\n// ── More shared datasets ───────────────────────────────────────────────────\n\nconst MO = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nconst POP_REGION: Record<number, Record<string, number>> = {\n    1950: { Asia: 1404, Africa: 227, Europe: 549, Americas: 339, Oceania: 13 },\n    1970: { Asia: 2142, Africa: 365, Europe: 657, Americas: 512, Oceania: 20 },\n    1990: { Asia: 3226, Africa: 630, Europe: 721, Americas: 724, Oceania: 27 },\n    2010: { Asia: 4194, Africa: 1039, Europe: 736, Americas: 934, Oceania: 37 },\n    2020: { Asia: 4641, Africa: 1361, Europe: 748, Americas: 1023, Oceania: 45 },\n};\n\nexport function realEcdfCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'ECDF Plot',\n            title: 'Exam scores — cumulative distribution',\n            description: 'Read percentiles directly: the median is where the curve crosses 0.5.',\n            tags: ['quantitative'],\n            semantic: { Score: 'Quantity' },\n            encodings: { x: 'Score' },\n            data: [55, 62, 68, 71, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 85, 86, 87, 88, 88, 89, 90, 91, 92, 93, 94, 95, 97, 99].map((Score) => ({ Score })),\n        }),\n    ];\n}\n\nexport function realGroupedBarCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Grouped Bar Chart',\n            title: 'Titanic survival rate by class and sex',\n            description: '\"Women and children first\" — and first class — are stark in the numbers (Encyclopedia Titanica).',\n            tags: ['nominal', 'group'],\n            semantic: { Class: 'Category', Sex: 'Category', 'Survival (%)': 'Quantity' },\n            encodings: { x: 'Class', y: 'Survival (%)', group: 'Sex' },\n            data: (() => {\n                const t: Record<string, [number, number]> = { '1st': [97, 34], '2nd': [89, 15], '3rd': [49, 15] };\n                const rows: Record<string, any>[] = [];\n                for (const [Class, [fem, male]] of Object.entries(t)) { rows.push({ Class, Sex: 'Female', 'Survival (%)': fem }); rows.push({ Class, Sex: 'Male', 'Survival (%)': male }); }\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realStackedBarCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Stacked Bar Chart',\n            title: 'Electricity generation mix by country, 2023',\n            description: 'How each country splits generation across sources (Our World in Data / Ember).',\n            tags: ['nominal', 'color'],\n            semantic: { Country: 'Country', Source: 'Category', Share: 'Quantity' },\n            encodings: { x: 'Country', y: 'Share', color: 'Source' },\n            data: (() => {\n                const t: Record<string, Record<string, number>> = { France: { Nuclear: 65, Renewables: 27, Fossil: 8 }, Germany: { Renewables: 52, Fossil: 45, Nuclear: 3 }, 'United States': { Fossil: 60, Nuclear: 18, Renewables: 22 }, China: { Fossil: 62, Renewables: 33, Nuclear: 5 }, Brazil: { Renewables: 89, Fossil: 9, Nuclear: 2 } };\n                const rows: Record<string, any>[] = [];\n                for (const [Country, by] of Object.entries(t)) for (const [Source, Share] of Object.entries(by)) rows.push({ Country, Source, Share });\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realStreamgraphCases(): TestCase[] {\n    const rows: Record<string, any>[] = [];\n    for (const [yr, by] of Object.entries(POP_REGION)) for (const [Region, Population] of Object.entries(by)) rows.push({ Year: Number(yr), Region, Population });\n    return [\n        realCase({\n            chartType: 'Streamgraph',\n            title: 'World population by region, 1950–2020',\n            description: \"Asia's dominance and Africa's acceleration as a centre-stacked stream (UN World Population Prospects).\",\n            tags: ['temporal', 'color'],\n            semantic: { Year: 'Year', Region: 'Category', Population: 'Quantity' },\n            encodings: { x: 'Year', y: 'Population', color: 'Region' },\n            data: rows,\n        }),\n    ];\n}\n\nexport function realRangeAreaCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Range Area Chart',\n            title: 'Seattle average monthly temperature range',\n            description: 'The band spans the average daily low to high each month (NOAA climate normals).',\n            tags: ['temporal', 'band'],\n            semantic: { Month: 'Category', Low: 'Quantity', High: 'Quantity' },\n            encodings: { x: 'Month', y: 'Low', y2: 'High' },\n            data: (() => { const lo = [37, 37, 40, 43, 48, 53, 56, 57, 53, 46, 40, 36], hi = [47, 50, 54, 59, 65, 70, 76, 77, 71, 60, 51, 46]; return MO.map((Month, i) => ({ Month, Low: lo[i], High: hi[i] })); })(),\n        }),\n    ];\n}\n\nexport function realBumpCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Bump Chart',\n            title: 'Olympic medal-table rank, 2012–2024',\n            description: 'Rank across four Summer Games (1 = top of the table) (IOC medal tables).',\n            tags: ['temporal', 'color', 'rank'],\n            semantic: { Games: 'Year', Country: 'Country', Rank: 'Quantity' },\n            encodings: { x: 'Games', y: 'Rank', color: 'Country' },\n            data: (() => {\n                const games = [2012, 2016, 2020, 2024];\n                const t: Record<string, number[]> = { 'United States': [1, 1, 1, 1], China: [2, 3, 2, 2], 'Great Britain': [3, 2, 4, 7], Japan: [6, 6, 5, 3] };\n                const rows: Record<string, any>[] = [];\n                for (const [Country, ranks] of Object.entries(t)) games.forEach((Games, i) => rows.push({ Games, Country, Rank: ranks[i] }));\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realSparklineCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Sparkline',\n            title: 'Monthly KPIs — revenue, users, churn',\n            description: 'Three business metrics as mini trend lines, one per row.',\n            tags: ['temporal', 'multi-series'],\n            semantic: { Month: 'Category', Metric: 'Category', Value: 'Quantity' },\n            encodings: { x: 'Month', y: 'Value', color: 'Metric' },\n            data: (() => {\n                const t: Record<string, number[]> = { 'Revenue ($k)': [120, 125, 130, 128, 140, 145, 150, 148, 160, 165, 170, 180], 'Active users (k)': [40, 42, 45, 47, 50, 52, 55, 58, 60, 63, 66, 70], 'Churn (%)': [5.2, 5.0, 4.8, 4.9, 4.6, 4.5, 4.3, 4.4, 4.1, 4.0, 3.9, 3.8] };\n                const rows: Record<string, any>[] = [];\n                for (const [Metric, arr] of Object.entries(t)) arr.forEach((Value, i) => rows.push({ Month: MO[i], Metric, Value }));\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realPieCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Pie Chart',\n            title: 'Desktop browser market share, 2024',\n            description: 'Chrome dominates; Safari and Edge trail (StatCounter).',\n            tags: ['nominal'],\n            semantic: { Browser: 'Category', Share: 'Quantity' },\n            encodings: { size: 'Share', color: 'Browser' },\n            data: [['Chrome', 65], ['Safari', 12], ['Edge', 12], ['Firefox', 6], ['Other', 5]].map(([Browser, Share]) => ({ Browser, Share })),\n        }),\n    ];\n}\n\nexport function realDonutCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Donut Chart',\n            title: 'Mobile OS market share, 2024',\n            description: 'Android vs iOS worldwide (StatCounter).',\n            tags: ['nominal'],\n            semantic: { OS: 'Category', Share: 'Quantity' },\n            encodings: { size: 'Share', color: 'OS' },\n            data: [['Android', 71], ['iOS', 28], ['Other', 1]].map(([OS, Share]) => ({ OS, Share })),\n        }),\n    ];\n}\n\nexport function realRoseCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Rose Chart',\n            title: 'Seattle monthly rainfall',\n            description: 'Wet winters, dry midsummer — as polar bars around the year (NOAA climate normals).',\n            tags: ['nominal', 'cyclic'],\n            semantic: { Month: 'Category', 'Rainfall (mm)': 'Quantity' },\n            encodings: { x: 'Month', y: 'Rainfall (mm)' },\n            data: (() => { const r = [140, 90, 95, 70, 50, 40, 18, 25, 40, 100, 165, 155]; return MO.map((Month, i) => ({ Month, 'Rainfall (mm)': r[i] })); })(),\n        }),\n    ];\n}\n\nexport function realRadarCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Radar Chart',\n            title: 'Nutrition profile per 100 g — almonds vs oats vs yogurt',\n            description: 'Compare three foods across five nutrients; each traces a distinct polygon (USDA FoodData Central).',\n            tags: ['nominal', 'color'],\n            semantic: { Nutrient: 'Category', Food: 'Category', 'Grams/100g': 'Quantity' },\n            encodings: { x: 'Nutrient', y: 'Grams/100g', color: 'Food' },\n            data: (() => {\n                const table: Record<string, Record<string, number>> = { Almonds: { Protein: 21, Fat: 50, Carbs: 22, Fiber: 12, Sugar: 4 }, Oats: { Protein: 17, Fat: 7, Carbs: 66, Fiber: 11, Sugar: 1 }, 'Greek yogurt': { Protein: 10, Fat: 5, Carbs: 4, Fiber: 0, Sugar: 4 } };\n                const rows: Record<string, any>[] = [];\n                for (const [Food, by] of Object.entries(table)) for (const [Nutrient, g] of Object.entries(by)) rows.push({ Food, Nutrient, 'Grams/100g': g });\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realWaterfallCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Waterfall Chart',\n            title: 'World population growth 1950 → 2020, by region',\n            description: 'A bridge from 2.5B to ~7.8B people, broken down by each region\\'s addition (UN World Population Prospects).',\n            tags: ['nominal', 'change'],\n            semantic: { Step: 'Category', 'Population (M)': 'Quantity' },\n            encodings: { x: 'Step', y: 'Population (M)' },\n            chartProperties: { totals: 'last' },\n            data: [\n                { Step: '1950', 'Population (M)': 2536 },\n                { Step: 'Asia', 'Population (M)': 3237 },\n                { Step: 'Africa', 'Population (M)': 1134 },\n                { Step: 'Americas', 'Population (M)': 684 },\n                { Step: 'Europe', 'Population (M)': 199 },\n                { Step: 'Oceania', 'Population (M)': 32 },\n            ],\n        }),\n    ];\n}\n\nexport function realCandlestickCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Candlestick Chart',\n            title: 'Daily stock OHLC over two weeks',\n            description: 'Open-high-low-close candles over ~10 trading days.',\n            tags: ['temporal', 'ohlc'],\n            semantic: { Date: 'Date', Open: 'Quantity', High: 'Quantity', Low: 'Quantity', Close: 'Quantity' },\n            encodings: { x: 'Date', open: 'Open', high: 'High', low: 'Low', close: 'Close' },\n            data: [['2024-01-02', 187, 188, 183, 185], ['2024-01-03', 184, 185, 182, 184], ['2024-01-04', 182, 183, 180, 182], ['2024-01-05', 182, 182, 179, 181], ['2024-01-08', 182, 186, 182, 185], ['2024-01-09', 184, 185, 183, 185], ['2024-01-10', 184, 186, 183, 186], ['2024-01-11', 186, 187, 183, 186], ['2024-01-12', 186, 188, 185, 185]].map(([Date, Open, High, Low, Close]) => ({ Date, Open, High, Low, Close })),\n        }),\n    ];\n}\n\nexport function realHeatmapCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Heatmap',\n            title: 'Average monthly temperature by city',\n            description: 'Warm bands for the tropics, cold winters for Moscow (climate normals).',\n            tags: ['grid'],\n            semantic: { Month: 'Category', City: 'Category', 'Temp (°C)': 'Quantity' },\n            encodings: { x: 'Month', y: 'City', color: 'Temp (°C)' },\n            data: (() => {\n                const t: Record<string, number[]> = { Singapore: [26, 27, 28, 28, 28, 28, 27, 27, 27, 27, 26, 26], Cairo: [14, 15, 18, 22, 26, 28, 29, 29, 27, 24, 20, 16], Moscow: [-9, -7, -1, 7, 13, 17, 19, 17, 11, 5, -1, -6], Seattle: [5, 6, 8, 10, 13, 16, 19, 19, 16, 11, 7, 4] };\n                const rows: Record<string, any>[] = [];\n                for (const [City, arr] of Object.entries(t)) arr.forEach((v, i) => rows.push({ City, Month: MO[i], 'Temp (°C)': v }));\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realPyramidCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Pyramid Chart',\n            title: 'US population by age and sex, 2020',\n            description: 'A classic population pyramid — male vs female by age band (US Census 2020).',\n            tags: ['nominal', 'diverging'],\n            semantic: { Age: 'Category', Sex: 'Category', Population: 'Quantity' },\n            encodings: { x: 'Population', y: 'Age', color: 'Sex' },\n            data: (() => {\n                const ages = ['0–14', '15–29', '30–44', '45–59', '60–74', '75+'];\n                const m = [31, 34, 33, 30, 26, 10], f = [30, 32, 33, 31, 28, 15];\n                const rows: Record<string, any>[] = [];\n                ages.forEach((Age, i) => { rows.push({ Age, Sex: 'Male', Population: m[i] }); rows.push({ Age, Sex: 'Female', Population: f[i] }); });\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realBarTableCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Bar Table',\n            title: 'GDP by country, 2023 (trillion USD)',\n            description: 'Compact ranked bars with value labels (IMF / World Bank 2023).',\n            tags: ['nominal'],\n            semantic: { Country: 'Country', 'GDP ($T)': 'Quantity' },\n            encodings: { y: 'Country', x: 'GDP ($T)' },\n            data: [['United States', 27.4], ['China', 17.8], ['Germany', 4.5], ['Japan', 4.2], ['India', 3.9], ['UK', 3.3], ['France', 3.0], ['Brazil', 2.2]].map(([Country, v]) => ({ Country, 'GDP ($T)': v })),\n        }),\n    ];\n}\n\nexport function realRangedDotCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Ranged Dot Plot',\n            title: 'Life expectancy gap, male vs female (2021)',\n            description: 'The dumbbell length is the female–male gap in years (World Bank 2021).',\n            tags: ['nominal', 'color'],\n            semantic: { Country: 'Country', Sex: 'Category', 'Life expectancy': 'Quantity' },\n            encodings: { x: 'Life expectancy', y: 'Country', color: 'Sex' },\n            data: (() => {\n                const t: Record<string, number[]> = { Japan: [81.5, 87.6], 'United States': [73.5, 79.3], India: [66.0, 69.0], Brazil: [69.0, 76.0], Nigeria: [51.0, 54.0], Germany: [78.5, 83.4] };\n                const rows: Record<string, any>[] = [];\n                for (const [Country, [mm, ff]] of Object.entries(t)) { rows.push({ Country, Sex: 'Male', 'Life expectancy': mm }); rows.push({ Country, Sex: 'Female', 'Life expectancy': ff }); }\n                return rows;\n            })(),\n        }),\n    ];\n}\n\nexport function realGanttCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Gantt Chart',\n            title: 'Software release schedule',\n            description: 'Overlapping phases from planning to launch.',\n            tags: ['temporal', 'schedule'],\n            semantic: { Task: 'Category', Start: 'Date', End: 'Date' },\n            encodings: { y: 'Task', x: 'Start', x2: 'End' },\n            data: [['Planning', '2024-01-01', '2024-01-14'], ['Design', '2024-01-15', '2024-02-04'], ['Implementation', '2024-02-05', '2024-03-17'], ['Testing', '2024-03-11', '2024-04-07'], ['Launch', '2024-04-08', '2024-04-15']].map(([Task, Start, End]) => ({ Task, Start, End })),\n        }),\n    ];\n}\n\nexport function realBulletCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'Bullet Chart',\n            title: 'Renewable electricity share vs 2030 target',\n            description: 'Each bar is the current share; the tick marks the 2030 target (OWID / Ember).',\n            tags: ['nominal', 'target'],\n            semantic: { Country: 'Country', Share: 'Quantity', Target: 'Quantity' },\n            encodings: { y: 'Country', x: 'Share', goal: 'Target' },\n            data: [['Norway', 98.6, 100], ['Brazil', 89.2, 95], ['Germany', 51.6, 80], ['World', 30.3, 60], ['United States', 22.7, 50]].map(([Country, Share, Target]) => ({ Country, Share, Target })),\n        }),\n    ];\n}\n\nexport function realKpiCases(): TestCase[] {\n    return [\n        realCase({\n            chartType: 'KPI Card',\n            title: 'Global clean-energy progress vs 2030 targets',\n            description: 'Headline climate & connectivity metrics against their 2030 targets, with progress bars (OWID / IEA / ITU).',\n            tags: ['bi', 'goal', 'progress'],\n            semantic: { Metric: 'Category', Value: 'Quantity', Goal: 'Quantity' },\n            encodings: { metric: 'Metric', value: 'Value', goal: 'Goal' },\n            chartProperties: { layout: 'horizontal' },\n            data: [\n                { Metric: 'Renewable electricity (%)', Value: 30.3, Goal: 45 },\n                { Metric: 'EV share of car sales (%)', Value: 18, Goal: 40 },\n                { Metric: 'World online (%)', Value: 67, Goal: 90 },\n                { Metric: 'Electricity access (%)', Value: 91, Goal: 100 },\n            ],\n        }),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realScatterCases, realRegressionCases } from './real-world-tests';\nimport { seededRandom, genDates, genCategories, genRandomNames } from './generators';\n\n// ============================================================================\n// Scatter Plot Tests — Matrix-driven\n//\n// Each test is defined as a compact row in SCATTER_MATRIX.  A generator\n// function converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   Axis types:  Q (quantitative), T (temporal), N (nominal)\n//   xy combos:   9 = [Q,T,N] × [Q,T,N]\n//   3rd channel: none | color(Q/T/N) | size(Q/N) | both\n//   Density:     small (≤25 pts), medium (26–100), large (>100)\n//\n// Note: Scatter plots don't distinguish nominal from ordinal visually —\n// all categorical channels use N (nominal).  The one exception is size='N'\n// which generates ranked labels (Low/Medium/High) for ordinal size levels.\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N';\n\n/** A single row in the scatter test matrix. */\ninterface MatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // data points (0 → derive from xCard × yCard for C×C grid)\n    color?: DimType;\n    size?: DimType;\n    xCard?: number;      // C cardinality for x\n    yCard?: number;      // C cardinality for y\n    colorCard?: number;  // C cardinality for color\n    sizeCard?: number;   // C/ordinal cardinality for size\n    hugeRange?: boolean; // size field 1K–1B\n    desc?: string;       // override auto-generated description\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRIX — one row per test case (25 tests)\n// ============================================================================\n\nconst SCATTER_MATRIX: MatrixEntry[] = [\n    // ── Q × Q (15 tests) ─────────────────────────────────────────────\n    //  xy only\n    { x: 'Q', y: 'Q', n: 20,  desc: 'Baseline — two quantitative axes, no extra encodings' },\n    //  + color\n    { x: 'Q', y: 'Q', n: 20,  color: 'N', colorCard: 3 },\n    { x: 'Q', y: 'Q', n: 20,  color: 'Q', desc: 'Continuous color — expect gradient legend' },\n    { x: 'Q', y: 'Q', n: 30,  color: 'T', desc: 'Temporal color gradient — shows progression over time' },\n    //  + size\n    { x: 'Q', y: 'Q', n: 50,  size: 'Q' },\n    { x: 'Q', y: 'Q', n: 20,  size: 'N', sizeCard: 4, desc: 'Ordinal size — 4 discrete priority levels' },\n    //  + size + color\n    { x: 'Q', y: 'Q', n: 15,  size: 'Q', color: 'N', colorCard: 3, desc: 'Gapminder-style: bubbles + 3 color groups' },\n    { x: 'Q', y: 'Q', n: 30,  size: 'Q', color: 'Q', desc: 'Both size and color are continuous — 4D encoding' },\n    { x: 'Q', y: 'Q', n: 20,  size: 'Q', color: 'N', colorCard: 20, hugeRange: true, desc: 'Size 1K–1B — tests sqrt scale discrimination' },\n    //  density / scaling\n    { x: 'Q', y: 'Q', n: 100, desc: 'Moderate density — point-size reduction' },\n    { x: 'Q', y: 'Q', n: 500, desc: 'High density — aggressive point-size reduction' },\n    { x: 'Q', y: 'Q', n: 200, color: 'N', colorCard: 20, desc: 'Dense scatter with 20 nominal color groups' },\n    { x: 'Q', y: 'Q', n: 100, color: 'N', colorCard: 50, desc: '50 colors — tests legend overflow', extraTags: ['overflow'] },\n    //  bubble scaling\n    { x: 'Q', y: 'Q', n: 10,  size: 'Q', desc: 'Sparse — large bubbles expected', extraTags: ['scaling'] },\n    { x: 'Q', y: 'Q', n: 200, size: 'Q', desc: 'Dense — bubbles should shrink significantly', extraTags: ['scaling'] },\n\n    // ── N × Q (4 tests) ──────────────────────────────────────────────\n    { x: 'N', y: 'Q', n: 25,  xCard: 5,  color: 'Q', desc: 'Strip + continuous color gradient' },\n    { x: 'N', y: 'Q', n: 25,  xCard: 5,  size: 'Q', desc: 'Bubble strip — size encodes a measure' },\n    { x: 'N', y: 'Q', n: 30,  xCard: 2,  desc: 'Binary category strip (e.g., Yes/No)', extraTags: ['edge-case'] },\n    { x: 'N', y: 'Q', n: 60,  xCard: 60, desc: '60 categories — heavy discrete-axis overflow', extraTags: ['overflow'] },\n\n    // ── Q × N (3 tests) — mirrors N×Q with flipped orientation ──────\n    { x: 'Q', y: 'N', n: 25,  yCard: 5,  color: 'Q', desc: 'Horizontal strip + continuous color' },\n    { x: 'Q', y: 'N', n: 25,  yCard: 5,  size: 'Q', desc: 'Horizontal bubble strip' },\n    { x: 'Q', y: 'N', n: 60,  yCard: 60, desc: 'Horizontal 60-cat overflow on y', extraTags: ['overflow'] },\n\n    // ── N × N (3 tests) ──────────────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,   xCard: 5,  yCard: 6,  size: 'Q', desc: 'Bubble grid — partial grid occupancy' },\n    { x: 'N', y: 'N', n: 0,   xCard: 5,  yCard: 4,  color: 'Q', desc: 'Heatmap-like scatter — continuous color on grid' },\n    { x: 'N', y: 'N', n: 0,   xCard: 15, yCard: 12, size: 'Q', desc: 'Large grid — high-cardinality overflow on both axes', extraTags: ['overflow', 'scaling'] },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface ChannelInfo {\n    role: 'x' | 'y' | 'color' | 'size';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\n/** Preferred field names per (role, dimType). */\nconst PREFERRED_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Category' },\n    y:     { Q: 'Y',        T: 'EndDate',   N: 'Group' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Segment' },\n    size:  { Q: 'Size',     T: 'Period',    N: 'Level' },\n};\n\n/** Fallback pools when the preferred name is already taken. */\nconst FALLBACK_NAMES: Record<DimType, string[]> = {\n    Q: ['X', 'Y', 'Measure', 'Value', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Category', 'Group', 'Segment', 'Level', 'Type'],\n};\n\n/** Semantic-type pool so multiple C channels get distinct category sets. */\nconst CAT_SEMANTICS = ['Category', 'Country', 'Department', 'Product', 'Company'];\n\n/** Start years for temporal channels (staggered to avoid overlap in T×T). */\nconst T_START_YEARS = [2020, 2023, 2019, 2022];\n\n// ---------------------------------------------------------------------------\n// Channel & data generation\n// ---------------------------------------------------------------------------\n\nfunction buildChannels(entry: MatrixEntry): ChannelInfo[] {\n    const used = new Set<string>();\n    const channels: ChannelInfo[] = [];\n    let tIdx = 0;   // temporal channel counter\n    let cIdx = 0;   // categorical channel counter\n    let cSeed = 500;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = PREFERRED_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of FALLBACK_NAMES[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color' | 'size'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n    if (entry.size)  specs.push({ role: 'size',  dim: entry.size,  card: entry.sizeCard });\n\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n\n    for (const { role, dim, card } of specs) {\n        const ch: ChannelInfo = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || (role === 'size' ? 4 : role === 'color' ? 3 : 5);\n            ch.card = c;\n            if (role === 'size') {\n                ch.levels = ['Low', 'Medium', 'High', 'Critical', 'Extreme'].slice(0, c);\n            } else if (c > 30) {\n                ch.levels = genRandomNames(c, cSeed);\n                cSeed += 100;\n            } else {\n                ch.levels = genCategories(CAT_SEMANTICS[cIdx % CAT_SEMANTICS.length], c);\n            }\n            cIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(effectiveN, T_START_YEARS[tIdx % T_START_YEARS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n/** Generate a single field value for row `i`. */\nfunction genValue(\n    ch: ChannelInfo, i: number, entry: MatrixEntry, rand: () => number,\n): any {\n    switch (ch.dimType) {\n        case 'Q': {\n            if (entry.hugeRange && ch.role === 'size')\n                return Math.round(1e3 + rand() * 1e9);\n            return Math.round(rand() * 1000) / 10;\n        }\n        case 'T':\n            return ch.dates![i % ch.dates!.length];\n        case 'N':\n            return ch.levels![i % ch.levels!.length];\n    }\n}\n\n/** Generate data for C×C grid mode (cross-product, ~70 % occupancy). */\nfunction genGridData(\n    channels: ChannelInfo[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const extras = channels.filter(c => c.role !== 'x' && c.role !== 'y');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = {\n                    [xCh.fieldName]: xVal,\n                    [yCh.fieldName]: yVal,\n                };\n                for (const ch of extras) {\n                    if (ch.dimType === 'Q') row[ch.fieldName] = Math.round(100 + rand() * 900);\n                    else if (ch.dimType === 'N') row[ch.fieldName] = ch.levels![Math.floor(rand() * ch.levels!.length)];\n                }\n                data.push(row);\n            }\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildTitle(entry: MatrixEntry): string {\n    const xLabel = entry.x === 'N' && entry.xCard ? `N(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'N' && entry.yCard ? `N(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n\n    const extras: string[] = [];\n    if (entry.color) {\n        extras.push(`color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.size) {\n        extras.push(`size(${entry.size === 'N' ? `N,${entry.sizeCard || 4}` : entry.size})`);\n    }\n    if (extras.length) parts.push('+' + extras.join('+'));\n\n    if (entry.hugeRange) parts.push('hugeRange');\n\n    if (entry.n === 0)   parts.push('grid');\n    else                 parts.push(`(${entry.n} ${entry.n === 1 ? 'pt' : 'pts'})`);\n\n    return parts.join(' ');\n}\n\nfunction buildTags(entry: MatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n\n    // Dimension types present\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (entry.size)  dims.add(entry.size);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n\n    // Channel presence\n    if (entry.color) tags.push('color');\n    if (entry.size)  tags.push('size');\n    if (entry.color === 'Q' || entry.color === 'T') tags.push('continuous-color');\n\n    // Scale\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); tags.push('scaling'); }\n\n    if (entry.extraTags) tags.push(...entry.extraTags);\n\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction matrixToTestCase(entry: MatrixEntry, rand: () => number): TestCase {\n    const channels = buildChannels(entry);\n\n    const isGrid = entry.x === 'N' && entry.y === 'N' && entry.n === 0;\n\n    // Generate data\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genGridData(channels, rand);\n    } else {\n        data = Array.from({ length: entry.n }, (_, i) => {\n            const row: Record<string, any> = {};\n            for (const ch of channels) row[ch.fieldName] = genValue(ch, i, entry, rand);\n            return row;\n        });\n    }\n\n    // Build fields, metadata, encodingMap\n    const fields = channels.map(ch => makeField(ch.fieldName));\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category' };\n\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        let semanticType = semMap[ch.dimType];\n        if (ch.role === 'size' && ch.dimType === 'N') semanticType = 'Rank';\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType,\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildTitle(entry),\n        description: entry.desc || buildTitle(entry),\n        tags: buildTags(entry, data.length),\n        chartType: 'Scatter Plot',\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genScatterTests(): TestCase[] {\n    const rand = seededRandom(42);\n    const tests = SCATTER_MATRIX.map(entry => matrixToTestCase(entry, rand));\n\n    // Categorical shape encoding — folded back from the former \"Custom Point\".\n    // Scatter is the most flexible point family member, so the `shape` channel\n    // lives here; it promotes the mark to `point` so distinct glyphs render.\n    {\n        const groups = genCategories('Category', 4);\n        const data = Array.from({ length: 40 }, (_, i) => ({\n            X: Math.round(rand() * 1000) / 10,\n            Y: Math.round(rand() * 1000) / 10,\n            Group: groups[i % groups.length],\n        }));\n        tests.push({\n            title: 'Q×Q +shape(N,4) (40 pts)',\n            description: 'Categorical shape encoding — 4 distinct marker glyphs',\n            tags: ['quantitative', 'nominal', 'shape', 'medium'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), shape: makeEncodingItem('Group') },\n        });\n    }\n\n    return [...tests, ...realScatterCases()];\n}\n\n// ============================================================================\n// Regression Tests  (not matrix-driven)\n// ============================================================================\n\nexport function genRegressionTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(55);\n\n    // 1. Basic regression (quant × quant)\n    {\n        const n = 40;\n        const data = Array.from({ length: n }, () => {\n            const x = 10 + rand() * 80;\n            return { Hours: Math.round(x * 10) / 10, Score: Math.round(20 + x * 0.8 + (rand() - 0.5) * 30) };\n        });\n        tests.push({\n            title: 'Basic regression (40 pts)',\n            description: 'Hours vs Score — simple linear trend',\n            tags: ['quantitative', 'small'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Hours'), makeField('Score')],\n            metadata: {\n                Hours: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Hours'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Regression with color (grouped lines)\n    {\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Male' ? 5 : -5;\n            for (let i = 0; i < 30; i++) {\n                const x = 10 + rand() * 80;\n                data.push({\n                    Experience: Math.round(x * 10) / 10,\n                    Salary: Math.round(30 + x * 0.6 + offset + (rand() - 0.5) * 20),\n                    Gender: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (2 groups)',\n            description: '60 points — separate regression per gender',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Experience'), makeField('Salary'), makeField('Gender')],\n            metadata: {\n                Experience: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Salary: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Experience'), y: makeEncodingItem('Salary'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 3. Regression with 4 color groups\n    {\n        const regions = ['North', 'South', 'East', 'West'];\n        const data: any[] = [];\n        const offsets: Record<string, number> = { North: 10, South: -5, East: 3, West: -8 };\n        const slopes: Record<string, number> = { North: 0.7, South: 0.5, East: 0.9, West: 0.4 };\n        for (const r of regions) {\n            for (let i = 0; i < 25; i++) {\n                const x = 5 + rand() * 90;\n                data.push({\n                    Advertising: Math.round(x * 10) / 10,\n                    Revenue: Math.round(offsets[r] + x * slopes[r] + (rand() - 0.5) * 15),\n                    Region: r,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (4 groups)',\n            description: '100 points — separate regression per region with distinct slopes',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Advertising'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Advertising: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Advertising'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 4. Regression with 6 color groups (many categories)\n    {\n        const subjects = ['Math', 'Science', 'English', 'History', 'Art', 'Music'];\n        const data: any[] = [];\n        const baseIntercepts = [15, 25, 20, 10, 30, 5];\n        const baseSlopes = [0.8, 0.6, 0.5, 0.7, 0.3, 0.9];\n        for (let si = 0; si < subjects.length; si++) {\n            for (let i = 0; i < 20; i++) {\n                const x = 10 + rand() * 80;\n                data.push({\n                    StudyHours: Math.round(x * 10) / 10,\n                    ExamScore: Math.round(baseIntercepts[si] + x * baseSlopes[si] + (rand() - 0.5) * 18),\n                    Subject: subjects[si],\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (6 groups)',\n            description: '120 points — separate regression per subject',\n            tags: ['quantitative', 'color', 'large'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('StudyHours'), makeField('ExamScore'), makeField('Subject')],\n            metadata: {\n                StudyHours: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                ExamScore: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Subject: { type: Type.String, semanticType: 'Category', levels: subjects },\n            },\n            encodingMap: { x: makeEncodingItem('StudyHours'), y: makeEncodingItem('ExamScore'), color: makeEncodingItem('Subject') },\n        });\n    }\n\n    // 5. Regression with 3 color groups + size encoding\n    {\n        const tiers = ['Budget', 'Mid-Range', 'Premium'];\n        const data: any[] = [];\n        const tierOffsets = [5, 20, 40];\n        const tierSlopes = [0.3, 0.5, 0.8];\n        for (let ti = 0; ti < tiers.length; ti++) {\n            for (let i = 0; i < 30; i++) {\n                const x = 10 + rand() * 85;\n                const weight = Math.round(50 + rand() * 150);\n                data.push({\n                    EngineSize: Math.round(x * 10) / 10,\n                    Horsepower: Math.round(tierOffsets[ti] + x * tierSlopes[ti] + (rand() - 0.5) * 12),\n                    Tier: tiers[ti],\n                    Weight: weight,\n                });\n            }\n        }\n        tests.push({\n            title: 'Regression + Color (3 groups) + Size',\n            description: '90 points — regression per tier with weight as size',\n            tags: ['quantitative', 'color', 'size', 'medium'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('EngineSize'), makeField('Horsepower'), makeField('Tier'), makeField('Weight')],\n            metadata: {\n                EngineSize: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Horsepower: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Tier: { type: Type.String, semanticType: 'Category', levels: tiers },\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('EngineSize'),\n                y: makeEncodingItem('Horsepower'),\n                color: makeEncodingItem('Tier'),\n                size: makeEncodingItem('Weight'),\n            },\n        });\n    }\n\n    // 6. Logarithmic regression\n    {\n        const n = 50;\n        const data = Array.from({ length: n }, () => {\n            const x = 1 + rand() * 99;  // avoid log(0)\n            return { Investment: Math.round(x * 10) / 10, Returns: Math.round(10 * Math.log(x) + 5 + (rand() - 0.5) * 8) };\n        });\n        tests.push({\n            title: 'Logarithmic regression (50 pts)',\n            description: 'Investment vs Returns — log trend',\n            tags: ['quantitative', 'small', 'log'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Investment'), makeField('Returns')],\n            metadata: {\n                Investment: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Returns: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Investment'), y: makeEncodingItem('Returns') },\n            chartProperties: { regressionMethod: 'log' },\n        });\n    }\n\n    // 7. Quadratic regression\n    {\n        const n = 60;\n        const data = Array.from({ length: n }, () => {\n            const x = -10 + rand() * 20;\n            const y = 0.5 * x * x - 2 * x + 3 + (rand() - 0.5) * 6;\n            return { Position: Math.round(x * 10) / 10, Height: Math.round(y * 10) / 10 };\n        });\n        tests.push({\n            title: 'Quadratic regression (60 pts)',\n            description: 'Parabolic data — quad fit',\n            tags: ['quantitative', 'medium', 'quad'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Position'), makeField('Height')],\n            metadata: {\n                Position: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Position'), y: makeEncodingItem('Height') },\n            chartProperties: { regressionMethod: 'quad' },\n        });\n    }\n\n    // 8. Polynomial regression (order 4) with color\n    {\n        const groups = ['Group A', 'Group B', 'Group C'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const shift = groups.indexOf(g) * 3;\n            for (let i = 0; i < 30; i++) {\n                const x = -5 + rand() * 10;\n                const y = shift + 0.05 * Math.pow(x, 3) - 0.3 * x * x + x + 5 + (rand() - 0.5) * 4;\n                data.push({\n                    Input: Math.round(x * 10) / 10,\n                    Output: Math.round(y * 10) / 10,\n                    Category: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Poly regression (3 groups, order 4)',\n            description: '90 points — cubic-ish data with poly(4) fit per group',\n            tags: ['quantitative', 'color', 'medium', 'poly'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Input'), makeField('Output'), makeField('Category')],\n            metadata: {\n                Input: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Output: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Category: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Input'), y: makeEncodingItem('Output'), color: makeEncodingItem('Category') },\n            chartProperties: { regressionMethod: 'poly', polyOrder: 4 },\n        });\n    }\n\n    // 9. Exponential regression\n    {\n        const n = 45;\n        const data = Array.from({ length: n }, () => {\n            const x = rand() * 5;\n            const y = 2 * Math.exp(0.4 * x) + (rand() - 0.5) * 3;\n            return { Time: Math.round(x * 10) / 10, Growth: Math.round(Math.max(0.1, y) * 10) / 10 };\n        });\n        tests.push({\n            title: 'Exponential regression (45 pts)',\n            description: 'Time vs Growth — exponential trend',\n            tags: ['quantitative', 'small', 'exp'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('Time'), makeField('Growth')],\n            metadata: {\n                Time: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Growth: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Time'), y: makeEncodingItem('Growth') },\n            chartProperties: { regressionMethod: 'exp' },\n        });\n    }\n\n    // 10. Power regression with 2 color groups\n    {\n        const classes = ['Species A', 'Species B'];\n        const data: any[] = [];\n        for (const cls of classes) {\n            const scale = cls === 'Species A' ? 1.5 : 0.8;\n            const exp = cls === 'Species A' ? 0.6 : 0.8;\n            for (let i = 0; i < 30; i++) {\n                const x = 1 + rand() * 50;\n                const y = scale * Math.pow(x, exp) + (rand() - 0.5) * 3;\n                data.push({\n                    BodyMass: Math.round(x * 10) / 10,\n                    MetabolicRate: Math.round(Math.max(0.1, y) * 10) / 10,\n                    Species: cls,\n                });\n            }\n        }\n        tests.push({\n            title: 'Power regression + Color (2 groups)',\n            description: '60 points — allometric scaling per species',\n            tags: ['quantitative', 'color', 'medium', 'pow'],\n            chartType: 'Regression',\n            data,\n            fields: [makeField('BodyMass'), makeField('MetabolicRate'), makeField('Species')],\n            metadata: {\n                BodyMass: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                MetabolicRate: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Species: { type: Type.String, semanticType: 'Category', levels: classes },\n            },\n            encodingMap: { x: makeEncodingItem('BodyMass'), y: makeEncodingItem('MetabolicRate'), color: makeEncodingItem('Species') },\n            chartProperties: { regressionMethod: 'pow' },\n        });\n    }\n\n    return [...tests, ...realRegressionCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realBarCases, realStackedBarCases, realGroupedBarCases } from './real-world-tests';\nimport { seededRandom, genDates, genCategories, genRandomNames } from './generators';\n\n// ============================================================================\n// Bar Chart Tests — Matrix-driven\n//\n// Three bar chart variants share a common matrix entry type and generator:\n//   - Bar Chart:         x, y, optional color\n//   - Stacked Bar Chart: x, y, required color (stacking dimension)\n//   - Grouped Bar Chart: x, y, required group (encoding key = 'group')\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), N (nominal)\n//   y axis type:  same\n//   color/group:  — | N (nominal) | Q (discrete numeric or continuous)\n//   n:            total data points (0 → N×N grid mode)\n//\n// Note: Bar charts don't distinguish nominal from ordinal visually —\n// all categorical channels use N (nominal).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N';\n\ninterface BarMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points (0 → C×C grid)\n    color?: DimType;     // third channel (mapped to 'color' or 'group')\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;  // cardinality; omit for continuous Q color\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRICES\n// ============================================================================\n\nconst BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q (6 tests) — classic vertical bars ─────────────────────\n    { x: 'N', y: 'Q', n: 5,   xCard: 5,   desc: 'Basic bar — 5 categories' },\n    { x: 'N', y: 'Q', n: 20,  xCard: 20,  desc: '20 bars — label rotation' },\n    { x: 'N', y: 'Q', n: 30,  xCard: 30,  desc: '30 bars — thin bar handling' },\n    { x: 'N', y: 'Q', n: 100, xCard: 100, desc: '100 bars — discrete cutoff', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 15,  xCard: 5,   color: 'N', colorCard: 3, desc: '5 cats × 3 color groups' },\n    { x: 'N', y: 'Q', n: 100, xCard: 5,   color: 'N', colorCard: 20, desc: '5 cats × 20 colors — saturation', extraTags: ['overflow'] },\n\n    // ── Q × N (3 tests) — horizontal bars ───────────────────────────\n    { x: 'Q', y: 'N', n: 10,  yCard: 10,  desc: 'Horizontal — 10 bars' },\n    { x: 'Q', y: 'N', n: 100, yCard: 100, desc: 'Horizontal — 100 bars cutoff', extraTags: ['overflow', 'cutoff'] },\n    { x: 'Q', y: 'N', n: 30,  yCard: 10,  color: 'N', colorCard: 3, desc: 'Horizontal + 3 color groups' },\n\n    // ── T × Q (3 tests) — temporal bars ─────────────────────────────\n    { x: 'T', y: 'Q', n: 24,  desc: 'Temporal bars — 24 dates' },\n    { x: 'T', y: 'Q', n: 100, desc: '100 dates — dynamic bar sizing', extraTags: ['overflow'] },\n    { x: 'T', y: 'Q', n: 72,  color: 'N', colorCard: 3, desc: '24 dates × 3 cats — temporal + color' },\n\n    // ── Q × T (2 tests) — horizontal temporal ──────────────────────\n    { x: 'Q', y: 'T', n: 18,  desc: 'Horizontal temporal — 18 dates on y' },\n    { x: 'Q', y: 'T', n: 54,  color: 'N', colorCard: 3, desc: 'Horizontal temporal + 3 colors' },\n\n    // ── Q × Q (2 tests) — continuous banded ─────────────────────────\n    { x: 'Q', y: 'Q', n: 20,  desc: 'Both quantitative — dynamic mark resizing' },\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Equally spaced 1..30 — continuous banded', extraTags: ['equally-spaced'] },\n\n    // ── Edge combos (3 tests) ───────────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, desc: 'Cat × cat bars (degenerate)', extraTags: ['edge-case'] },\n    { x: 'T', y: 'N', n: 25, yCard: 5,  desc: 'Temporal x, categorical y' },\n    { x: 'N', y: 'T', n: 25, xCard: 5,  desc: 'Categorical x, temporal y' },\n];\n\nconst STACKED_BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q + color (5 tests) ─────────────────────────────────────\n    { x: 'N', y: 'Q', n: 12,  xCard: 4,  color: 'N', colorCard: 3, desc: 'Basic stack — 4 cats × 3 colors' },\n    { x: 'N', y: 'Q', n: 75,  xCard: 15, color: 'N', colorCard: 5, desc: 'Large — 15 cats × 5 colors' },\n    { x: 'N', y: 'Q', n: 240, xCard: 80, color: 'N', colorCard: 3, desc: 'Very large — 80 cats × 3 (cutoff)', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 24,  xCard: 6,  color: 'Q', colorCard: 4, desc: 'Numeric color (1–4) — small' },\n    { x: 'N', y: 'Q', n: 150, xCard: 5,  color: 'Q', colorCard: 30, desc: 'Numeric color (1–30) — large' },\n\n    // ── T × Q + color (2 tests) ─────────────────────────────────────\n    { x: 'T', y: 'Q', n: 30,  color: 'N', colorCard: 3, desc: 'Temporal stack — 10 dates × 3' },\n    { x: 'T', y: 'Q', n: 80,  color: 'N', colorCard: 4, desc: '20 dates × 4 fuels — temporal stacked' },\n\n    // ── Q × Q + color (1 test) ──────────────────────────────────────\n    { x: 'Q', y: 'Q', n: 30,  color: 'N', colorCard: 3, desc: 'Both quant + 3 types — stacked' },\n\n    // ── Horizontal (2 tests) ────────────────────────────────────────\n    { x: 'Q', y: 'N', n: 24,  yCard: 8,  color: 'N', colorCard: 3, desc: 'Horizontal stack — 8 cats × 3' },\n    { x: 'Q', y: 'T', n: 45,  color: 'N', colorCard: 3, desc: 'Horizontal temporal stack — 15 dates × 3' },\n\n    // ── Edge combos (1 test) ─────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, color: 'N', colorCard: 3, desc: 'Cat × cat stacked (degenerate)', extraTags: ['edge-case'] },\n];\n\nconst GROUPED_BAR_MATRIX: BarMatrixEntry[] = [\n    // ── N × Q + group (4 tests) ─────────────────────────────────────\n    { x: 'N', y: 'Q', n: 12,  xCard: 4,  color: 'N', colorCard: 3, desc: 'Basic grouped — 4 cats × 3 groups' },\n    { x: 'N', y: 'Q', n: 8,   xCard: 8,  desc: 'No group field — fallback to simple bar' },\n    { x: 'N', y: 'Q', n: 270, xCard: 90, color: 'N', colorCard: 3, desc: 'Very large — 90 cats × 3 (cutoff)', extraTags: ['overflow', 'cutoff'] },\n    { x: 'N', y: 'Q', n: 30,  xCard: 6,  color: 'Q', colorCard: 5, desc: 'Numeric group (1–5) — small' },\n\n    // ── T × Q + group (1 test) ──────────────────────────────────────\n    { x: 'T', y: 'Q', n: 36,  color: 'N', colorCard: 3, desc: 'Temporal grouped — 12 dates × 3' },\n\n    // ── Q × Q + group (1 test) ──────────────────────────────────────\n    { x: 'Q', y: 'Q', n: 20,  color: 'N', colorCard: 4, desc: 'Both quant + group — ensureNominalAxis' },\n\n    // ── Horizontal (2 tests) ────────────────────────────────────────\n    { x: 'Q', y: 'N', n: 24,  yCard: 6,  color: 'N', colorCard: 4, desc: 'Horizontal grouped — 6 × 4' },\n    { x: 'Q', y: 'T', n: 30,  color: 'N', colorCard: 3, desc: 'Horizontal temporal grouped — 10 dates × 3' },\n\n    // ── Numeric & continuous group (2 tests) ────────────────────────\n    { x: 'N', y: 'Q', n: 400, xCard: 8,  color: 'Q', colorCard: 50, desc: 'Numeric group (1–50) — large' },\n    { x: 'N', y: 'Q', n: 50,  xCard: 5,  color: 'Q', desc: 'Continuous float on group — gradient' },\n\n    // ── Edge combos (1 test) ─────────────────────────────────\n    { x: 'N', y: 'N', n: 0,  xCard: 5, yCard: 5, color: 'N', colorCard: 3, desc: 'Cat × cat grouped (degenerate)', extraTags: ['edge-case'] },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface BarCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: any[];\n    dates?: string[];\n}\n\nconst BAR_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',    N: 'Category' },\n    y:     { Q: 'Value',    T: 'EndDate', N: 'Group' },\n    color: { Q: 'ColorVal', T: 'DateCol', N: 'Segment' },\n};\n\nconst BAR_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Score', 'Amount', 'Measure'],\n    T: ['Date', 'EndDate', 'Time', 'Timestamp'],\n    N: ['Category', 'Group', 'Segment', 'Type', 'Level'],\n};\n\nconst BAR_CAT_POOLS = ['Product', 'Country', 'Department', 'Category', 'Company'];\nconst BAR_T_STARTS = [2020, 2023, 2019, 2022];\n\nfunction buildBarChannels(entry: BarMatrixEntry): BarCh[] {\n    const used = new Set<string>();\n    const channels: BarCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let cSeed = 500;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = BAR_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of BAR_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: BarCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || (role === 'color' ? 3 : 5);\n            ch.card = c;\n            if (c > 30) {\n                ch.levels = genRandomNames(c, cSeed);\n                cSeed += 100;\n            } else {\n                ch.levels = genCategories(BAR_CAT_POOLS[cIdx % BAR_CAT_POOLS.length], c);\n            }\n            cIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(effectiveN, BAR_T_STARTS[tIdx % BAR_T_STARTS.length]);\n            tIdx++;\n        }\n\n        if (dim === 'Q' && role === 'color' && card) {\n            // Discrete numeric values 1..card\n            ch.card = card;\n            ch.levels = Array.from({ length: card }, (_, i) => i + 1);\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\nfunction genBarYValue(yCh: BarCh, rand: () => number): any {\n    if (yCh.dimType === 'Q') return Math.round(10 + rand() * 990);\n    if (yCh.dimType === 'T') {\n        const d = Math.floor(rand() * 365);\n        const dt = new Date(2023, 0, 1);\n        dt.setDate(dt.getDate() + d);\n        return dt.toISOString().slice(0, 10);\n    }\n    // N\n    return yCh.levels![Math.floor(rand() * yCh.levels!.length)];\n}\n\nfunction genBarData(\n    entry: BarMatrixEntry, channels: BarCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    // Grid mode for N×N\n    if (entry.x === 'N' && entry.y === 'N' && entry.n === 0) {\n        const data: Record<string, any>[] = [];\n        for (const xVal of xCh.levels!) {\n            for (const yVal of yCh.levels!) {\n                if (rand() > 0.3) {\n                    const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                    if (colorCh?.dimType === 'N')\n                        row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                    data.push(row);\n                }\n            }\n        }\n        return data;\n    }\n\n    // T×T date-pair mode\n    if (entry.x === 'T' && entry.y === 'T') {\n        const data: Record<string, any>[] = [];\n        for (let i = 0; i < entry.n; i++) {\n            const startDay = Math.floor(rand() * 365);\n            const duration = Math.floor(10 + rand() * 180);\n            const start = new Date(2023, 0, 1);\n            start.setDate(start.getDate() + startDay);\n            const end = new Date(start);\n            end.setDate(end.getDate() + duration);\n            const row: Record<string, any> = {\n                [xCh.fieldName]: start.toISOString().slice(0, 10),\n                [yCh.fieldName]: end.toISOString().slice(0, 10),\n            };\n            if (colorCh?.dimType === 'N')\n                row[colorCh.fieldName] = colorCh.levels![i % colorCh.levels!.length];\n            data.push(row);\n        }\n        return data;\n    }\n\n    // Standard mode\n    const data: Record<string, any>[] = [];\n    const isContinuousColor = colorCh && !colorCh.levels;\n\n    // Bars are positioned along the *categorical* axis; the other axis carries\n    // the measured length. For vertical bars that's x (e.g. N×Q); for horizontal\n    // bars the category sits on y (e.g. Q×N), so iterate y to give every\n    // category a bar. When neither axis is discrete (Q×Q) fall back to x.\n    const isCatDim = (d: DimType) => d === 'N' || d === 'T';\n    const useYAsPosition = !isCatDim(xCh.dimType) && isCatDim(yCh.dimType);\n    const posCh = useYAsPosition ? yCh : xCh;\n    const measCh = useYAsPosition ? xCh : yCh;\n\n    // Determine position values along the categorical axis\n    let positions: any[];\n    if (posCh.dimType === 'N') {\n        positions = posCh.levels!;\n    } else if (posCh.dimType === 'T') {\n        const nGroups = colorCh?.levels ? colorCh.levels.length : 1;\n        const nDates = Math.max(1, Math.floor(entry.n / nGroups));\n        positions = genDates(nDates, 2020);\n    } else { // Q\n        const nGroups = colorCh?.levels ? colorCh.levels.length : 1;\n        const nPts = Math.max(1, Math.floor(entry.n / nGroups));\n        positions = Array.from({ length: nPts }, (_, i) => i + 1);\n    }\n\n    if (isContinuousColor) {\n        // Continuous color: multiple rows per position, each a random color float\n        const rowsPerPos = Math.max(1, Math.floor(entry.n / positions.length));\n        for (const posVal of positions) {\n            for (let r = 0; r < rowsPerPos; r++) {\n                const row: Record<string, any> = { [posCh.fieldName]: posVal };\n                row[measCh.fieldName] = genBarYValue(measCh, rand);\n                row[colorCh!.fieldName] = Math.round(rand() * 4000) / 100;\n                data.push(row);\n            }\n        }\n    } else if (colorCh?.levels) {\n        // Discrete color: one row per (position × color) so every category has a\n        // full set of grouped/stacked bars (no missing combinations).\n        for (const posVal of positions) {\n            for (const cVal of colorCh.levels) {\n                const row: Record<string, any> = { [posCh.fieldName]: posVal };\n                row[measCh.fieldName] = genBarYValue(measCh, rand);\n                row[colorCh.fieldName] = cVal;\n                data.push(row);\n            }\n        }\n    } else {\n        // No color\n        for (const posVal of positions) {\n            const row: Record<string, any> = { [posCh.fieldName]: posVal };\n            row[measCh.fieldName] = genBarYValue(measCh, rand);\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildBarTitle(entry: BarMatrixEntry): string {\n    const xLabel = entry.x === 'N' && entry.xCard ? `N(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'N' && entry.yCard ? `N(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        const cLabel = entry.color === 'N'\n            ? `N,${entry.colorCard || 3}`\n            : entry.colorCard ? `Q,${entry.colorCard}` : 'Q';\n        parts.push(`+color(${cLabel})`);\n    }\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildBarTags(entry: BarMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('numeric-color');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else tags.push('large');\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction barMatrixToTestCase(\n    entry: BarMatrixEntry,\n    chartType: string,\n    thirdChannelKey: string,\n    rand: () => number,\n): TestCase {\n    const channels = buildBarChannels(entry);\n    const data = genBarData(entry, channels, rand);\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        let semanticType = semMap[ch.dimType];\n        if (ch.dimType === 'Q' && ch.levels) semanticType = 'Rank'; // discrete numeric\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType,\n            levels: ch.levels || [],\n        };\n        const encKey = ch.role === 'color' ? thirdChannelKey : ch.role;\n        encodingMap[encKey] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildBarTitle(entry),\n        description: entry.desc || buildBarTitle(entry),\n        tags: buildBarTags(entry, data.length),\n        chartType,\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genBarTests(): TestCase[] {\n    const rand = seededRandom(100);\n    return [...BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Bar Chart', 'color', rand)), ...realBarCases()];\n}\n\n/**\n * A curated synthetic gallery *showcase* (tagged `gallery-showcase`) — a dense\n * single-series bar chart with many categories, so the wall demonstrates how\n * Flint auto-sizes / shrinks bars to fit. Kept out of `genBarTests` (test suite)\n * and appended only in the gallery generator, so it never shifts test indices.\n */\nexport function galleryBarSizingShowcase(): TestCase {\n    const rand = seededRandom(4210);\n    const hours = Array.from({ length: 24 }, (_, h) => `${String(h).padStart(2, '0')}:00`);\n    let level = 40;\n    const data = hours.map((Hour, i) => {\n        // Diurnal shape: low overnight, peaks late morning + evening.\n        const shape = 60 + 55 * Math.sin(((i - 6) / 24) * Math.PI * 2) + 30 * Math.sin(((i - 3) / 12) * Math.PI * 2);\n        level = Math.max(15, Math.round(shape + (rand() - 0.5) * 24));\n        return { Hour, Views: level };\n    });\n    return {\n        title: 'Page views by hour of day (24 bars)',\n        description: 'A dense single-series bar chart — Flint shrinks the bars to fit all 24 hours.',\n        tags: ['bar', 'gallery-showcase', 'nominal', 'many-bars'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('Hour'), makeField('Views')],\n        metadata: {\n            Hour: { type: Type.String, semanticType: 'Category', levels: hours },\n            Views: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: { x: makeEncodingItem('Hour'), y: makeEncodingItem('Views') },\n    };\n}\n\nexport function genStackedBarTests(): TestCase[] {\n    const rand = seededRandom(200);\n    return [...STACKED_BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Stacked Bar Chart', 'color', rand)), ...realStackedBarCases()];\n}\n\nexport function genGroupedBarTests(): TestCase[] {\n    const rand = seededRandom(300);\n    const tests = GROUPED_BAR_MATRIX.map(entry => barMatrixToTestCase(entry, 'Grouped Bar Chart', 'group', rand));\n\n    // Group redundant with the x axis (group == x): must render full-width bars,\n    // NOT ~1/N slivers. Grouping a bar chart by its own category is degenerate,\n    // so the dodge is suppressed and each band shows one bar.\n    {\n        const cats = genCategories('Region', 5);\n        const data = cats.map((c, i) => ({ Region: c, Sales: Math.round(200 + rand() * 800) + i }));\n        tests.push({\n            title: 'Group == X (redundant group)',\n            description: 'group re-encodes the x category — one full-width bar per band, no dodge',\n            tags: ['grouped-bar', 'redundant-group', 'nominal', 'gallery-pin'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Sales')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: cats },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Region'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // Sparse / MIDDLE case: neither a perfect cross-product nor all-single-item.\n    // Each region carries a SUBSET of the 4 global channels (maxPerBand 2–3,\n    // global 4), so the ambiguous-zone heuristic (nestedSnapThreshold) leans to\n    // dodge — bars sized by the GLOBAL lane count (4), with gaps where a\n    // (region, channel) pair is missing rather than overlapping bars.\n    {\n        const regions = ['North', 'South', 'East', 'West', 'Central', 'Coast'];\n        const channels = ['Retail', 'Online', 'Wholesale', 'Direct'];\n        // Each region has 2–3 of the 4 channels (rotating subsets).\n        const subset: Record<string, string[]> = {\n            North:   ['Retail', 'Online'],\n            South:   ['Online', 'Wholesale', 'Direct'],\n            East:    ['Wholesale', 'Direct'],\n            West:    ['Retail', 'Direct'],\n            Central: ['Retail', 'Online', 'Wholesale'],\n            Coast:   ['Online', 'Direct'],\n        };\n        const data: any[] = [];\n        regions.forEach((r, ri) => {\n            subset[r].forEach((ch, ci) => {\n                data.push({ Region: r, Channel: ch, Sales: Math.round(300 + rand() * 700) + ri * 10 + ci });\n            });\n        });\n        tests.push({\n            title: 'Sparse groups (region × channel subset)',\n            description: 'each region has 2–3 of 4 channels — dodges, bars sized by global lane count (no overlap)',\n            tags: ['grouped-bar', 'sparse', 'ambiguous', 'nominal', 'gallery-pin'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Sales'), makeField('Channel')],\n            metadata: {\n                Region:  { type: Type.String, semanticType: 'Category', levels: regions },\n                Sales:   { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Channel: { type: Type.String, semanticType: 'Category', levels: channels },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Region'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Channel'),\n            },\n        });\n    }\n\n    // Explicit global vs local dodge demo (sparse region × channel).\n    {\n        const regions = ['North', 'South', 'East', 'West', 'Central', 'Coast'];\n        const channels = ['Retail', 'Online', 'Wholesale', 'Direct'];\n        const subset: Record<string, string[]> = {\n            North: ['Retail', 'Online'], South: ['Online', 'Wholesale', 'Direct'], East: ['Wholesale', 'Direct'],\n            West: ['Retail', 'Direct'], Central: ['Retail', 'Online', 'Wholesale'], Coast: ['Online', 'Direct'],\n        };\n        const mkData = () => {\n            const d: any[] = [];\n            regions.forEach((r, ri) => subset[r].forEach((ch, ci) => d.push({ Region: r, Channel: ch, Sales: Math.round(300 + ri * 40 + ci * 30) })));\n            return d;\n        };\n        const meta = {\n            Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Channel: { type: Type.String, semanticType: 'Category', levels: channels },\n        };\n        for (const mode of ['global', 'local'] as const) {\n            tests.push({\n                title: mode === 'global' ? 'Dodge = Global (aligned)' : 'Dodge = Local (compact)',\n                description: mode === 'global'\n                    ? 'fixed lane per channel across regions — gaps where a channel is absent'\n                    : 'compact maxPerBand lanes per region (VL centered; EC left-aligned)',\n                tags: ['grouped-bar', 'sparse', `dodge-${mode}`, 'gallery-pin'],\n                chartType: 'Grouped Bar Chart',\n                data: mkData(),\n                fields: [makeField('Region'), makeField('Sales'), makeField('Channel')],\n                metadata: meta,\n                chartProperties: { dodge: mode },\n                encodingMap: { x: makeEncodingItem('Region'), y: makeEncodingItem('Sales'), group: makeEncodingItem('Channel') },\n            });\n        }\n    }\n\n    return [...tests, ...realGroupedBarCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { realHistogramCases, realDensityCases, realBoxplotCases, realStripCases } from './real-world-tests';\nimport { seededRandom, genCategories } from './generators';\n\n// ------ Histogram ------\nexport function genHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(400);\n\n    // 1. Small normal distribution\n    {\n        const data = Array.from({ length: 100 }, () => {\n            // Box-Muller transform\n            const u1 = rand(), u2 = rand();\n            return { Value: Math.round((Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)) * 15 + 50) };\n        });\n        tests.push({\n            title: 'Normal distribution (100 points)',\n            description: 'Gaussian data — basic histogram',\n            tags: ['quantitative', 'medium'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Value')],\n            metadata: { Value: { type: Type.Number, semanticType: 'Quantity', levels: [] } },\n            encodingMap: { x: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. With color split\n    {\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (let i = 0; i < 200; i++) {\n            const g = groups[i % 2];\n            const offset = g === 'Male' ? 170 : 160;\n            const u1 = rand(), u2 = rand();\n            data.push({\n                Height: Math.round((Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)) * 8 + offset),\n                Gender: g,\n            });\n        }\n        tests.push({\n            title: 'Histogram + Color (gender split)',\n            description: '200 points, two groups',\n            tags: ['quantitative', 'nominal', 'color', 'medium'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Height'), makeField('Gender')],\n            metadata: {\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Height'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 3. Large dataset\n    {\n        const data = Array.from({ length: 1000 }, () => ({\n            Income: Math.round(20000 + rand() * 180000),\n        }));\n        tests.push({\n            title: 'Large histogram (1000 points)',\n            description: 'Income distribution, large dataset',\n            tags: ['quantitative', 'large'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Income')],\n            metadata: { Income: { type: Type.Number, semanticType: 'Amount', levels: [] } },\n            encodingMap: { x: makeEncodingItem('Income') },\n        });\n    }\n\n    return [...tests, ...realHistogramCases()];\n}\n\n// ------ Boxplot ------\nexport function genBoxplotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    // 1. Nominal × Quant\n    {\n        const groups = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const g of groups) for (let i = 0; i < 30; i++) {\n            data.push({ Group: g, Value: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Quant (5 groups)',\n            description: '5 categories × 30 observations each',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Value')],\n            metadata: {\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Two quant axes (ensureNominalAxis test)\n    {\n        const data: any[] = [];\n        for (let level = 1; level <= 5; level++) for (let i = 0; i < 20; i++) {\n            data.push({ Level: level, Score: Math.round(level * 10 + rand() * 40) });\n        }\n        tests.push({\n            title: 'Quant × Quant (ensureNominalAxis)',\n            description: 'Both axes quant — lower cardinality should convert to nominal',\n            tags: ['quantitative', 'medium', 'dtype-conversion'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Level'), makeField('Score')],\n            metadata: {\n                Level: { type: Type.Number, semanticType: 'Rank', levels: [1, 2, 3, 4, 5] },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Level'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // 3. Large boxplot\n    {\n        const depts = genCategories('Department', 12);\n        const data: any[] = [];\n        for (const d of depts) for (let i = 0; i < 50; i++) {\n            data.push({ Department: d, Salary: Math.round(30000 + rand() * 120000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant (large, 12 groups)',\n            description: '12 departments × 50 observations',\n            tags: ['nominal', 'quantitative', 'large'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Department'), makeField('Salary')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: depts },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Salary') },\n        });\n    }\n\n    // 4. Nominal × Quant + Color (small, 4 groups × 2 colors)\n    {\n        const groups = genCategories('Category', 4);\n        const genders = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) for (const s of genders) for (let i = 0; i < 25; i++) {\n            data.push({ Group: g, Gender: s, Score: Math.round(20 + rand() * 80) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (4 groups × 2)',\n            description: '4 categories split by gender — colored boxplot',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Score'), makeField('Gender')],\n            metadata: {\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: genders },\n            },\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Score'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 5. Nominal × Quant + Color (medium, 6 groups × 4 colors)\n    {\n        const countries = genCategories('Country', 6);\n        const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const data: any[] = [];\n        for (const c of countries) for (const q of quarters) for (let i = 0; i < 20; i++) {\n            data.push({ Country: c, Quarter: q, Revenue: Math.round(500 + rand() * 5000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (6 groups × 4)',\n            description: '6 countries × 4 quarters — tests boxplot color grouping',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Country'), makeField('Revenue'), makeField('Quarter')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n            },\n            encodingMap: { x: makeEncodingItem('Country'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Quarter') },\n        });\n    }\n\n    // 6. Large boxplot + many colors (8 departments × 5 levels)\n    {\n        const depts = genCategories('Department', 8);\n        const levels = ['Intern', 'Junior', 'Mid', 'Senior', 'Lead'];\n        const data: any[] = [];\n        for (const d of depts) for (const l of levels) for (let i = 0; i < 15; i++) {\n            data.push({ Department: d, Level: l, Compensation: Math.round(25000 + rand() * 175000) });\n        }\n        tests.push({\n            title: 'Nominal × Quant + Color (large, 8 × 5)',\n            description: '8 departments × 5 levels — many colored boxes',\n            tags: ['nominal', 'quantitative', 'color', 'large'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Department'), makeField('Compensation'), makeField('Level')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: depts },\n                Compensation: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Level: { type: Type.String, semanticType: 'Category', levels: levels },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Compensation'), color: makeEncodingItem('Level') },\n        });\n    }\n\n    // 7. Color redundant with axis (color == x) — must render full-width boxes,\n    //    NOT ~1/N slivers. Colors each category by its own axis value.\n    {\n        const ratings = ['G', 'PG', 'PG-13', 'R', 'NC-17', 'Unrated'];\n        const data: any[] = [];\n        for (const r of ratings) for (let i = 0; i < 30; i++) {\n            data.push({ Rating: r, ROI: Math.round(rand() * 300) });\n        }\n        tests.push({\n            title: 'Color == X (redundant color)',\n            description: 'color re-encodes the x category — one full-width box per band, no dodge',\n            tags: ['nominal', 'quantitative', 'color', 'redundant-color', 'medium', 'gallery-pin'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Rating'), makeField('ROI')],\n            metadata: {\n                Rating: { type: Type.String, semanticType: 'Category', levels: ratings },\n                ROI: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Rating'), y: makeEncodingItem('ROI'), color: makeEncodingItem('Rating') },\n        });\n    }\n\n    // 8. Sparse cross-product (dept × level, each dept holds only some levels).\n    //    Genuine 2nd dimension → dodges, but sized by the GLOBAL lane count so\n    //    occupied lanes never overlap.\n    {\n        const depts = ['Eng', 'Sales', 'HR', 'Ops', 'Legal', 'Finance'];\n        const levels = ['L1', 'L2', 'L3', 'L4', 'L5'];\n        const subset: Record<string, string[]> = {\n            Eng: ['L1', 'L2'], Sales: ['L2', 'L3'], HR: ['L3', 'L4'],\n            Ops: ['L4', 'L5'], Legal: ['L5', 'L1'], Finance: ['L1', 'L3'],\n        };\n        const data: any[] = [];\n        for (const d of depts) for (const l of subset[d]) for (let i = 0; i < 18; i++) {\n            data.push({ Department: d, Level: l, Comp: Math.round(30000 + rand() * 120000) });\n        }\n        tests.push({\n            title: 'Sparse cross-product (dept × level)',\n            description: 'each dept has 2 of 5 levels — dodges, boxes sized by global lane count',\n            tags: ['nominal', 'quantitative', 'color', 'sparse', 'medium', 'gallery-pin'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Department'), makeField('Comp'), makeField('Level')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: depts },\n                Comp: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Level: { type: Type.String, semanticType: 'Category', levels: levels },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Comp'), color: makeEncodingItem('Level') },\n        });\n    }\n\n    // Explicit global vs local dodge demo (sparse dept × level).\n    {\n        const depts = ['Eng', 'Sales', 'HR', 'Ops', 'Legal', 'Finance'];\n        const levels = ['L1', 'L2', 'L3', 'L4', 'L5'];\n        const subset: Record<string, string[]> = {\n            Eng: ['L1', 'L2'], Sales: ['L2', 'L3'], HR: ['L3', 'L4'], Ops: ['L4', 'L5'], Legal: ['L5', 'L1'], Finance: ['L1', 'L3'],\n        };\n        const mkData = () => {\n            const d: any[] = [];\n            for (const dp of depts) for (const l of subset[dp]) for (let i = 0; i < 18; i++) {\n                d.push({ Department: dp, Level: l, Comp: Math.round(30000 + (l.charCodeAt(1) % 5) * 15000 + rand() * 90000) });\n            }\n            return d;\n        };\n        const meta = {\n            Department: { type: Type.String, semanticType: 'Department', levels: depts },\n            Comp: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            Level: { type: Type.String, semanticType: 'Category', levels: levels },\n        };\n        for (const mode of ['global', 'local'] as const) {\n            tests.push({\n                title: mode === 'global' ? 'Dodge = Global (aligned)' : 'Dodge = Local (compact)',\n                description: mode === 'global'\n                    ? 'fixed lane per level across depts — gaps where a level is absent'\n                    : 'compact maxPerBand lanes per dept, centered (VL)',\n                tags: ['nominal', 'quantitative', 'color', 'sparse', `dodge-${mode}`, 'gallery-pin'],\n                chartType: 'Boxplot',\n                data: mkData(),\n                fields: [makeField('Department'), makeField('Comp'), makeField('Level')],\n                metadata: meta,\n                chartProperties: { dodge: mode },\n                encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Comp'), color: makeEncodingItem('Level') },\n            });\n        }\n    }\n\n    return [...tests, ...realBoxplotCases()];\n}\n\n// ------ Density Plot ------\nexport function genDensityTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(940);\n\n    // 1. Simple density (one distribution)\n    {\n        const data = Array.from({ length: 200 }, () => ({\n            Score: Math.round(50 + (rand() + rand() + rand() - 1.5) * 30),  // roughly normal\n        }));\n        tests.push({\n            title: 'Single Distribution (200 pts)',\n            description: 'Approximately normal distribution of scores',\n            tags: ['quantitative', 'small'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Grouped density with color\n    {\n        const groups = ['Control', 'Treatment A', 'Treatment B'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Control' ? 0 : g === 'Treatment A' ? 10 : 20;\n            for (let i = 0; i < 150; i++) {\n                data.push({\n                    Value: Math.round(50 + offset + (rand() + rand() + rand() - 1.5) * 20),\n                    Group: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'Grouped Density (3 groups, 450 pts)',\n            description: 'Three overlapping distributions colored by group',\n            tags: ['quantitative', 'color', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Value'), makeField('Group')],\n            metadata: {\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Value'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Bimodal distribution\n    {\n        const data: any[] = [];\n        for (let i = 0; i < 300; i++) {\n            const peak = rand() > 0.4 ? 30 : 70;\n            data.push({ Measurement: Math.round(peak + (rand() - 0.5) * 20) });\n        }\n        tests.push({\n            title: 'Bimodal Distribution (300 pts)',\n            description: 'Two peaks — tests bandwidth sensitivity',\n            tags: ['quantitative', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Measurement')],\n            metadata: {\n                Measurement: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Measurement') },\n        });\n    }\n\n    // 4. Color + Column facet\n    {\n        const sites = ['Lab A', 'Lab B'];\n        const data: any[] = [];\n        for (const site of sites) {\n            const offset = site === 'Lab A' ? 0 : 15;\n            for (let i = 0; i < 200; i++) {\n                data.push({\n                    Reading: Math.round(40 + offset + (rand() + rand() + rand() - 1.5) * 25),\n                    Batch: rand() > 0.5 ? 'Morning' : 'Evening',\n                    Site: site,\n                });\n            }\n        }\n        tests.push({\n            title: 'Color + Column Facet (2 sites)',\n            description: 'Density by batch, faceted by site',\n            tags: ['quantitative', 'color', 'facet', 'medium'],\n            chartType: 'Density Plot',\n            data,\n            fields: [makeField('Reading'), makeField('Batch'), makeField('Site')],\n            metadata: {\n                Reading: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Batch: { type: Type.String, semanticType: 'Category', levels: ['Morning', 'Evening'] },\n                Site: { type: Type.String, semanticType: 'Category', levels: sites },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Reading'),\n                color: makeEncodingItem('Batch'),\n                column: makeEncodingItem('Site'),\n            },\n        });\n    }\n\n    return [...tests, ...realDensityCases()];\n}\n\n// ------ Strip Plot (Jitter) ------\nexport function genStripPlotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic categorical x, numeric y\n    {\n        const species = ['Setosa', 'Versicolor', 'Virginica'];\n        const rand = seededRandom(77);\n        const data: any[] = [];\n        for (const sp of species) {\n            const base = sp === 'Setosa' ? 1.5 : sp === 'Versicolor' ? 4.3 : 5.5;\n            for (let i = 0; i < 20; i++) {\n                data.push({ Species: sp, PetalLength: Math.round((base + (rand() - 0.5) * 2) * 10) / 10 });\n            }\n        }\n        tests.push({\n            title: 'Iris Petal Length (3 species, 60 pts)',\n            description: 'Categorical x, quantitative y with jitter',\n            tags: ['jitter', 'nominal', 'small', 'edge-case'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Species'), makeField('PetalLength')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('PetalLength') },\n        });\n    }\n\n    // 2. With color encoding\n    {\n        const groups = ['Control', 'Treatment A', 'Treatment B'];\n        const genders = ['M', 'F'];\n        const rand = seededRandom(88);\n        const data: any[] = [];\n        for (const g of groups) {\n            const base = g === 'Control' ? 50 : g === 'Treatment A' ? 65 : 80;\n            for (const sex of genders) {\n                for (let i = 0; i < 10; i++) {\n                    data.push({\n                        Group: g,\n                        Gender: sex,\n                        Score: Math.round(base + (rand() - 0.4) * 30),\n                    });\n                }\n            }\n        }\n        tests.push({\n            title: 'Clinical Trial Scores (color = Gender)',\n            description: 'Strip plot with color grouping',\n            tags: ['jitter', 'nominal', 'color', 'edge-case'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Group'), makeField('Score'), makeField('Gender')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Group'),\n                y: makeEncodingItem('Score'),\n                color: makeEncodingItem('Gender'),\n            },\n        });\n    }\n\n    // 3. No jitter (jitterWidth = 0)\n    {\n        const data = [\n            { Category: 'A', Value: 10 }, { Category: 'A', Value: 15 },\n            { Category: 'A', Value: 12 }, { Category: 'A', Value: 18 },\n            { Category: 'B', Value: 25 }, { Category: 'B', Value: 30 },\n            { Category: 'B', Value: 22 }, { Category: 'B', Value: 28 },\n        ];\n        tests.push({\n            title: 'No Jitter (aligned strip)',\n            description: 'jitterWidth=0 produces a clean strip',\n            tags: ['jitter', 'config'],\n            chartType: 'Strip Plot',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n            chartProperties: { jitterWidth: 0 },\n        });\n    }\n\n    return [...tests, ...realStripCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Test-data generators for the 2-D density contour chart — Density Contour\n * (`histogram2dcontour`). A Plotly-only statistical chart: both axes are\n * continuous measures, binned and smoothed into density iso-contours (Vega-Lite\n * has no contour mark). See design-docs/plotly-stats-charts.md.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n/** Build a correlated bivariate cloud (roughly Gaussian) for 2-D density demos. */\nfunction bivariateCloud(n: number, seed: number, xLabel: string, yLabel: string, corr: number): any[] {\n    const rand = seededRandom(seed);\n    const gauss = () => (rand() + rand() + rand() + rand() - 2) * 1.5; // ~N(0, ~1)\n    const rows: any[] = [];\n    for (let i = 0; i < n; i++) {\n        const a = gauss();\n        const b = corr * a + Math.sqrt(1 - corr * corr) * gauss();\n        rows.push({\n            [xLabel]: Math.round((50 + a * 12) * 10) / 10,\n            [yLabel]: Math.round((40 + b * 10) * 10) / 10,\n        });\n    }\n    return rows;\n}\n\nfunction density2dMeta(xLabel: string, yLabel: string) {\n    return {\n        [xLabel]: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        [yLabel]: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n    };\n}\n\nexport function genDensityContourTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = bivariateCloud(700, 81, 'X', 'Y', 0.6);\n        tests.push({\n            title: 'Correlated Cloud (700 pts)',\n            description: 'Smoothed 2-D density contours over a scatter of raw points',\n            tags: ['quantitative', 'density', 'medium'],\n            chartType: 'Density Contour',\n            data,\n            fields: [makeField('X'), makeField('Y')],\n            metadata: density2dMeta('X', 'Y'),\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y') },\n        });\n    }\n\n    {\n        // Two overlapping clouds → visibly multi-modal density.\n        const a = bivariateCloud(400, 82, 'Feature 1', 'Feature 2', 0.5);\n        const b = bivariateCloud(400, 83, 'Feature 1', 'Feature 2', 0.5)\n            .map(r => ({ 'Feature 1': r['Feature 1'] + 35, 'Feature 2': r['Feature 2'] + 28 }));\n        const data = [...a, ...b];\n        tests.push({\n            title: 'Bimodal Density (800 pts)',\n            description: 'Two clusters — contour lines reveal both modes',\n            tags: ['quantitative', 'density', 'large'],\n            chartType: 'Density Contour',\n            data,\n            fields: [makeField('Feature 1'), makeField('Feature 2')],\n            metadata: density2dMeta('Feature 1', 'Feature 2'),\n            encodingMap: { x: makeEncodingItem('Feature 1'), y: makeEncodingItem('Feature 2') },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Violin Plot test data.\n *\n * A violin plot draws a mirrored kernel-density curve per category, showing the\n * full distribution SHAPE of a quantitative measure (bimodality, skew, spread)\n * rather than just quartiles. Every case maps `x` (the category — one violin per\n * value) and `y` (the quantitative measure whose distribution is drawn), exactly\n * mirroring the Boxplot contract.\n *\n * The generators below cover the shapes a violin is built for: a basic spread of\n * classes with clearly different distribution shapes (bimodal / skewed / tight /\n * normal), a strongly bimodal category (two separated humps — proves the KDE\n * renders the shape, not a blob), a measure that crosses zero (negatives),\n * uneven group sizes, higher category cardinality (6 groups), a single violin,\n * an explicit color = category mapping, and a row-faceted small-multiples violin\n * (the advanced gallery case). Sample sizes are 40–120 per group so the KDE is\n * smooth.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories } from './generators';\n\n/** One standard-normal draw via the Box–Muller transform. */\nfunction gauss(rand: () => number): number {\n    let u1 = rand();\n    if (u1 < 1e-9) u1 = 1e-9;\n    const u2 = rand();\n    return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n}\n\n/** A normal sample with the given mean / sd. */\nconst normal = (rand: () => number, mean: number, sd: number) => mean + gauss(rand) * sd;\n\n/**\n * A bimodal sample: two well-separated normal humps, chosen with probability\n * `mix` for the first. Produces a genuine two-hump violin (not an oversmoothed\n * blob) for reasonable bandwidths.\n */\nfunction bimodal(rand: () => number, m1: number, m2: number, sd: number, mix = 0.5): number {\n    return rand() < mix ? normal(rand, m1, sd) : normal(rand, m2, sd);\n}\n\n/** A right-skewed sample (log-normal-ish): a floor plus an exponential tail. */\nfunction rightSkew(rand: () => number, floor: number, scale: number): number {\n    let u = rand();\n    if (u < 1e-9) u = 1e-9;\n    return floor + -Math.log(u) * scale;\n}\n\nconst r1 = (v: number) => Math.round(v * 10) / 10;\n\nexport function genViolinTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(5101);\n\n    // 1. BASIC — exam scores across 4 classes with clearly different shapes:\n    //    one bimodal, one right-skewed, one tight, one broad/normal.\n    {\n        const data: any[] = [];\n        const shapes: Record<string, (r: () => number) => number> = {\n            'Class A': (r) => bimodal(r, 58, 86, 5),      // two clusters\n            'Class B': (r) => rightSkew(r, 45, 12),       // skewed toward high\n            'Class C': (r) => normal(r, 74, 4),           // tight\n            'Class D': (r) => normal(r, 68, 13),          // broad\n        };\n        for (const [cls, fn] of Object.entries(shapes)) {\n            for (let i = 0; i < 90; i++) {\n                const v = Math.max(0, Math.min(100, fn(rand)));\n                data.push({ Class: cls, Score: Math.round(v) });\n            }\n        }\n        tests.push({\n            title: 'Exam scores by class (basic)',\n            description: 'One violin per class — bimodal, skewed, tight and broad score distributions',\n            tags: ['nominal', 'quantitative', 'distribution', 'gallery', 'small'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Class'), makeField('Score')],\n            metadata: {\n                Class: { type: Type.String, semanticType: 'Category', levels: Object.keys(shapes) },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Class'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. ADVANCED — reaction time by treatment, faceted into small multiples by\n    //    site (outer ROW facet). Exercises the optional outer facet + a realistic\n    //    multi-panel layout.\n    {\n        const treatments = ['Placebo', 'Low Dose', 'High Dose'];\n        const sites = ['Site 1', 'Site 2'];\n        const baseByTreatment: Record<string, number> = { 'Placebo': 420, 'Low Dose': 360, 'High Dose': 300 };\n        const data: any[] = [];\n        for (const site of sites) {\n            const siteShift = site === 'Site 2' ? 25 : 0;\n            for (const t of treatments) {\n                const base = baseByTreatment[t] + siteShift;\n                for (let i = 0; i < 70; i++) {\n                    // Mild right skew (reaction times have a long upper tail).\n                    const v = base + rightSkew(rand, 0, 40) - 30 + gauss(rand) * 18;\n                    data.push({ Treatment: t, Site: site, 'Reaction (ms)': Math.round(Math.max(150, v)) });\n                }\n            }\n        }\n        tests.push({\n            title: 'Reaction time by treatment, faceted by site (row)',\n            description: 'Per-treatment violins as small multiples, one panel row per study site',\n            tags: ['nominal', 'quantitative', 'distribution', 'facet', 'row', 'gallery', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Treatment'), makeField('Reaction (ms)'), makeField('Site')],\n            metadata: {\n                Treatment: { type: Type.String, semanticType: 'Category', levels: treatments },\n                'Reaction (ms)': { type: Type.Number, semanticType: 'Duration', levels: [] },\n                Site: { type: Type.String, semanticType: 'Category', levels: sites },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Treatment'),\n                y: makeEncodingItem('Reaction (ms)'),\n                row: makeEncodingItem('Site'),\n            },\n        });\n    }\n\n    // 3. Strongly BIMODAL category — sensor readings where one machine is clearly\n    //    bimodal (two separated humps). Proves the KDE renders two humps.\n    {\n        const data: any[] = [];\n        const machines: Record<string, (r: () => number) => number> = {\n            'Machine 1': (r) => normal(r, 50, 5),               // unimodal\n            'Machine 2': (r) => bimodal(r, 30, 72, 5),          // strong two-hump\n            'Machine 3': (r) => bimodal(r, 40, 60, 4, 0.35),    // asymmetric two-hump\n        };\n        for (const [m, fn] of Object.entries(machines)) {\n            for (let i = 0; i < 120; i++) {\n                data.push({ Machine: m, 'Pressure (psi)': r1(fn(rand)) });\n            }\n        }\n        tests.push({\n            title: 'Bimodal sensor readings by machine',\n            description: 'Two machines show clearly separated double humps — KDE shape, not a single blob',\n            tags: ['nominal', 'quantitative', 'distribution', 'bimodal', 'large'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Machine'), makeField('Pressure (psi)')],\n            metadata: {\n                Machine: { type: Type.String, semanticType: 'Category', levels: Object.keys(machines) },\n                'Pressure (psi)': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Machine'), y: makeEncodingItem('Pressure (psi)') },\n        });\n    }\n\n    // 4. Zero-crossing measure — daily returns by asset, spanning negatives.\n    {\n        const assets: Record<string, { mean: number; sd: number }> = {\n            'Bonds': { mean: 0.2, sd: 1.2 },\n            'Equities': { mean: 0.6, sd: 4.5 },\n            'Crypto': { mean: 0.4, sd: 9.0 },\n        };\n        const data: any[] = [];\n        for (const [asset, p] of Object.entries(assets)) {\n            for (let i = 0; i < 100; i++) {\n                data.push({ Asset: asset, 'Daily Return %': r1(normal(rand, p.mean, p.sd)) });\n            }\n        }\n        tests.push({\n            title: 'Daily returns by asset (crosses zero)',\n            description: 'Return distributions straddling zero — the value axis spans negative to positive',\n            tags: ['nominal', 'quantitative', 'distribution', 'negative', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Asset'), makeField('Daily Return %')],\n            metadata: {\n                Asset: { type: Type.String, semanticType: 'Category', levels: Object.keys(assets) },\n                'Daily Return %': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Asset'), y: makeEncodingItem('Daily Return %') },\n        });\n    }\n\n    // 5. Uneven group sizes — household income by region, n varies per group.\n    {\n        const regions: Array<{ name: string; n: number; mean: number; sd: number }> = [\n            { name: 'North', n: 45, mean: 52, sd: 14 },\n            { name: 'South', n: 110, mean: 41, sd: 11 },\n            { name: 'East', n: 65, mean: 60, sd: 20 },\n            { name: 'West', n: 90, mean: 48, sd: 16 },\n        ];\n        const data: any[] = [];\n        for (const reg of regions) {\n            for (let i = 0; i < reg.n; i++) {\n                const v = Math.max(8, rightSkew(rand, reg.mean - reg.sd, reg.sd));\n                data.push({ Region: reg.name, 'Income (k$)': r1(v) });\n            }\n        }\n        tests.push({\n            title: 'Income by region (uneven group sizes)',\n            description: 'Right-skewed income violins where each region has a different sample count',\n            tags: ['nominal', 'quantitative', 'distribution', 'uneven', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Region'), makeField('Income (k$)')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: regions.map(r => r.name) },\n                'Income (k$)': { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Region'), y: makeEncodingItem('Income (k$)') },\n        });\n    }\n\n    // 6. Higher cardinality — 6 subjects, checks spacing/faceting of the strip.\n    {\n        const subjects = genCategories('Subject', 6);\n        const data: any[] = [];\n        subjects.forEach((sub, idx) => {\n            const mean = 60 + idx * 3;\n            const sd = 8 + (idx % 3) * 3;\n            for (let i = 0; i < 60; i++) {\n                const v = Math.max(0, Math.min(100, normal(rand, mean, sd)));\n                data.push({ Subject: sub, Grade: Math.round(v) });\n            }\n        });\n        tests.push({\n            title: 'Grades across 6 subjects (higher cardinality)',\n            description: 'Six per-subject violins — checks panel spacing and facet layout',\n            tags: ['nominal', 'quantitative', 'distribution', 'high-cardinality', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Subject'), makeField('Grade')],\n            metadata: {\n                Subject: { type: Type.String, semanticType: 'Category', levels: subjects },\n                Grade: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Subject'), y: makeEncodingItem('Grade') },\n        });\n    }\n\n    // 7. Single category — exactly one violin.\n    {\n        const data: any[] = [];\n        for (let i = 0; i < 100; i++) {\n            const v = Math.max(120, Math.min(210, normal(rand, 168, 9)));\n            data.push({ Cohort: 'All Adults', 'Height (cm)': r1(v) });\n        }\n        tests.push({\n            title: 'Single distribution — adult height (one violin)',\n            description: 'A single violin for one cohort — minimal cardinality',\n            tags: ['nominal', 'quantitative', 'distribution', 'single', 'small'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Cohort'), makeField('Height (cm)')],\n            metadata: {\n                Cohort: { type: Type.String, semanticType: 'Category', levels: ['All Adults'] },\n                'Height (cm)': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Cohort'), y: makeEncodingItem('Height (cm)') },\n        });\n    }\n\n    // 8. Explicit color = category — same field on x and color (the documented\n    //    \"color usually mirrors the category\" case).\n    {\n        const species = ['Adelie', 'Chinstrap', 'Gentoo'];\n        const bodyMass: Record<string, { mean: number; sd: number }> = {\n            'Adelie': { mean: 3700, sd: 460 },\n            'Chinstrap': { mean: 3730, sd: 380 },\n            'Gentoo': { mean: 5080, sd: 500 },\n        };\n        const data: any[] = [];\n        for (const sp of species) {\n            const p = bodyMass[sp];\n            for (let i = 0; i < 80; i++) {\n                data.push({ Species: sp, 'Body Mass (g)': Math.round(normal(rand, p.mean, p.sd)) });\n            }\n        }\n        tests.push({\n            title: 'Penguin body mass by species (color = category)',\n            description: 'Per-species violins with color mirroring the category for distinct hues',\n            tags: ['nominal', 'quantitative', 'distribution', 'color', 'small'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Species'), makeField('Body Mass (g)')],\n            metadata: {\n                Species: { type: Type.String, semanticType: 'Category', levels: species },\n                'Body Mass (g)': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Species'),\n                y: makeEncodingItem('Body Mass (g)'),\n                color: makeEncodingItem('Species'),\n            },\n        });\n    }\n\n    // 9. SPLIT violin — a genuine 2-value colour sub-group. Each category holds\n    //    two groups (Day / Night), so the mirror seats one on each half: the\n    //    classic split violin for comparing two distributions per category.\n    {\n        const depts = ['Eng', 'Sales', 'Support', 'Ops'];\n        const shifts = ['Day', 'Night'];\n        const data: any[] = [];\n        depts.forEach((d, di) => shifts.forEach((s, si) => {\n            for (let i = 0; i < 70; i++) {\n                const v = normal(rand, 62000 + di * 9000 + si * 7000, 12000);\n                data.push({ Department: d, Shift: s, Salary: Math.round(Math.max(28000, v)) });\n            }\n        }));\n        tests.push({\n            title: 'Salary by department, split by shift (2 groups)',\n            description: 'Split violin — Day vs Night distributions share each department band',\n            tags: ['nominal', 'quantitative', 'distribution', 'color', 'group', 'gallery', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Department'), makeField('Salary'), makeField('Shift')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: depts },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Shift: { type: Type.String, semanticType: 'Category', levels: shifts },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Department'),\n                y: makeEncodingItem('Salary'),\n                color: makeEncodingItem('Shift'),\n            },\n        });\n    }\n\n    // 10. GRID violin — a 3+ value colour sub-group. A centre stack of three\n    //     densities would misread each layer, so the sub-group is laid out as a\n    //     category × sub-group grid of independent full violins.\n    {\n        const depts = ['Eng', 'Sales', 'Support'];\n        const levels = ['Junior', 'Mid', 'Senior'];\n        const data: any[] = [];\n        depts.forEach((d, di) => levels.forEach((l, li) => {\n            for (let i = 0; i < 60; i++) {\n                const v = normal(rand, 55000 + di * 8000 + li * 22000, 10000 + li * 3000);\n                data.push({ Department: d, Level: l, Salary: Math.round(Math.max(30000, v)) });\n            }\n        }));\n        tests.push({\n            title: 'Salary by department and level (3 groups, grid)',\n            description: 'Grouped violins as a department × level grid, one independent shape per cell',\n            tags: ['nominal', 'quantitative', 'distribution', 'color', 'group', 'grid', 'gallery', 'medium'],\n            chartType: 'Violin Plot',\n            data,\n            fields: [makeField('Department'), makeField('Salary'), makeField('Level')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: depts },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Level: { type: Type.String, semanticType: 'Category', levels: levels },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Department'),\n                y: makeEncodingItem('Salary'),\n                color: makeEncodingItem('Level'),\n            },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realLineCases } from './real-world-tests';\nimport { seededRandom, genDates, genCategories, genOrdinalLabels, ORDINAL_PREFIXES } from './generators';\n\n// ============================================================================\n// Line Chart Tests — Matrix-driven\n//\n// Each test is defined as a compact row in LINE_MATRIX.  A generator\n// function converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), O (ordinal)\n//   y axis type:  same\n//   color channel: — | N (nominal, multi-series) | Q (gradient)\n//   n:             total data points\n//   sparse:        ~20% random dropout\n//\n// Ordinal (O) is used for axes — line charts require a meaningful\n// sequential order.  Nominal (N) is used for unordered color groups.\n// Purely nominal axes are excluded (lines imply sequence).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N' | 'O';\n\ninterface LineMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points\n    color?: DimType;\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;\n    sparse?: boolean;\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// THE MATRIX — one row per test case (23 tests)\n//\n// Note: O (ordinal) is used for categorical axes — line charts require\n// a meaningful sequential order.  N (nominal) is used for color groups.\n// Purely nominal axis combinations are excluded because connecting\n// unordered categories with lines is visually misleading.\n// ============================================================================\n\nconst LINE_MATRIX: LineMatrixEntry[] = [\n    // ── T × Q (6 tests) — core time series ──────────────────────────\n    { x: 'T', y: 'Q', n: 30,   desc: 'Simple time series — 30 dates' },\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 4,  desc: '4 series × 50 dates — smooth random walks' },\n    { x: 'T', y: 'Q', n: 800,  color: 'N', colorCard: 8,  desc: '8 series × 100 dates — crowded' },\n    { x: 'T', y: 'Q', n: 4000, color: 'N', colorCard: 20, desc: '20 series spaghetti — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 180,  color: 'N', colorCard: 3,  sparse: true, desc: '3 series × 60 dates, ~20% missing' },\n    { x: 'T', y: 'Q', n: 30,   color: 'Q', desc: 'Continuous color gradient on time series' },\n\n    // ── O × Q (4 tests) — ordered categories on x ───────────────────\n    //    Line charts with ordinal x make sense when categories have an\n    //    inherent sequence (e.g. stages, ranked items, ordered groups).\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  desc: 'Ordinal line — 5 ordered categories' },\n    { x: 'O', y: 'Q', n: 48, xCard: 12, color: 'N', colorCard: 4, desc: '12 ordinal × 4 series' },\n    { x: 'O', y: 'Q', n: 30, xCard: 30, desc: '30 ordinal categories — label overflow', extraTags: ['overflow'] },\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  color: 'Q', desc: 'Ordinal + continuous color gradient' },\n\n    // ── Q × O (3 tests) — mirror ────────────────────────────────────\n    { x: 'Q', y: 'O', n: 5,  yCard: 5,  desc: 'Horizontal ordinal — 5 ordered cats on y' },\n    { x: 'Q', y: 'O', n: 48, yCard: 12, color: 'N', colorCard: 4, desc: 'Horizontal 12 ordinal × 4 series' },\n    { x: 'Q', y: 'O', n: 30, yCard: 30, desc: 'Horizontal 30 ordinal overflow', extraTags: ['overflow'] },\n\n    // ── Q × Q (3 tests) — quantitative x ────────────────────────────\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Quantitative x line — 30 pts' },\n    { x: 'Q', y: 'Q', n: 150, color: 'N', colorCard: 3, desc: '3 parametric curves × 50 pts' },\n    { x: 'Q', y: 'Q', n: 200, desc: 'Dense single curve — 200 pts' },\n\n    // ── T × T ────────────────────────────────────────────────────────\n    // Excluded: T×T date-pair data (start vs end date) doesn't suit line\n    // charts — each row is an independent event, not a sequential series.\n    // Lines connect points in data order producing random zig-zags.\n    // T×T pairs are better served by scatter plots or dumbbell charts.\n\n    // Excluded: N×N, T×N, N×T — purely nominal axes don't suit line charts.\n    // Lines imply sequence/progression; connecting unordered categories is misleading.\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface LineCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\nconst LINE_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Series',    O: 'Stage' },\n    y:     { Q: 'Value',    T: 'EndDate',   N: 'Group',     O: 'Step' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Series',    O: 'Level' },\n};\n\nconst LINE_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Measure', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Series', 'Group', 'Category', 'Type'],\n    O: ['Stage', 'Step', 'Phase', 'Level', 'Round'],\n};\n\nconst LINE_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', 'Company'];\nconst LINE_T_STARTS = [2020, 2023, 2019, 2022];\n\nfunction buildLineChannels(entry: LineMatrixEntry, nPerSeries: number): LineCh[] {\n    const used = new Set<string>();\n    const channels: LineCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let oIdx = 0;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = LINE_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of LINE_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: LineCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || 3;\n            ch.card = c;\n            ch.levels = genCategories(LINE_CAT_POOLS[cIdx % LINE_CAT_POOLS.length], c);\n            cIdx++;\n        }\n\n        if (dim === 'O') {\n            const c = card || 5;\n            ch.card = c;\n            ch.levels = genOrdinalLabels(ORDINAL_PREFIXES[oIdx % ORDINAL_PREFIXES.length], c);\n            oIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(nPerSeries, LINE_T_STARTS[tIdx % LINE_T_STARTS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\n/** Smooth random-walk series (momentum + noise). */\nfunction genLineWalk(n: number, base: number, volatility: number, rand: () => number): number[] {\n    const v: number[] = [base];\n    let m = 0;\n    for (let i = 1; i < n; i++) {\n        m = 0.7 * m + (rand() - 0.5) * volatility;\n        v.push(Math.round(Math.max(0, v[i - 1] + m)));\n    }\n    return v;\n}\n\nfunction genLineSeriesData(\n    entry: LineMatrixEntry, channels: LineCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    const nSeries = (colorCh?.dimType === 'N' ? (entry.colorCard || 3) : 1);\n    const nPerSeries = Math.max(1, Math.floor(entry.n / nSeries));\n\n    // Shared x-positions\n    let xPositions: any[];\n    if (xCh.dimType === 'T') {\n        xPositions = genDates(nPerSeries, 2020);\n    } else if (xCh.dimType === 'O') {\n        xPositions = xCh.levels!;\n    } else { // Q\n        xPositions = Array.from({ length: nPerSeries }, (_, i) =>\n            Math.round(i * 100 / Math.max(1, nPerSeries - 1) * 10) / 10);\n    }\n\n    const data: Record<string, any>[] = [];\n\n    for (let s = 0; s < nSeries; s++) {\n        const base = 50 + Math.round(rand() * 200);\n        const vol = 10 + rand() * 30;\n\n        // Generate y-values\n        let yValues: any[];\n        if (yCh.dimType === 'Q') {\n            yValues = genLineWalk(xPositions.length, base, vol, rand);\n        } else if (yCh.dimType === 'T') {\n            yValues = genDates(xPositions.length, 2023 + s);\n        } else { // O\n            yValues = xPositions.map((_, i) => yCh.levels![i % yCh.levels!.length]);\n        }\n\n        for (let i = 0; i < xPositions.length; i++) {\n            if (entry.sparse && rand() < 0.2) continue;\n\n            const row: Record<string, any> = {\n                [xCh.fieldName]: xPositions[i],\n                [yCh.fieldName]: yValues[i],\n            };\n\n            if (colorCh) {\n                if (colorCh.dimType === 'N') {\n                    row[colorCh.fieldName] = colorCh.levels![s];\n                } else if (colorCh.dimType === 'Q') {\n                    row[colorCh.fieldName] = Math.round(rand() * 100) / 10;\n                }\n            }\n\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\nfunction genLineGridData(channels: LineCh[], rand: () => number): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                if (colorCh?.dimType === 'N')\n                    row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                data.push(row);\n            }\n        }\n    }\n\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildLineTitle(entry: LineMatrixEntry): string {\n    const xLabel = entry.x === 'O' && entry.xCard ? `O(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'O' && entry.yCard ? `O(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        parts.push(`+color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.sparse) parts.push('sparse');\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildLineTags(entry: LineMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (dims.has('O')) tags.push('ordinal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('continuous-color');\n    if (entry.sparse) tags.push('sparse');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); if (n > 500) tags.push('scaling'); }\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction lineMatrixToTestCase(entry: LineMatrixEntry, rand: () => number): TestCase {\n    const nSeries = entry.colorCard || 1;\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n    const nPerSeries = Math.max(1, Math.floor(effectiveN / nSeries));\n    const channels = buildLineChannels(entry, nPerSeries);\n\n    const isGrid = entry.x === 'O' && entry.y === 'O' && entry.n === 0;\n\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genLineGridData(channels, rand);\n    } else {\n        data = genLineSeriesData(entry, channels, rand);\n    }\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String, O: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category', O: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType: semMap[ch.dimType],\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildLineTitle(entry),\n        description: entry.desc || buildLineTitle(entry),\n        tags: buildLineTags(entry, data.length),\n        chartType: 'Line Chart',\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Forecast test cases — demonstrate strokeDash for actual vs forecast\n// ============================================================================\n\nfunction genForecastTestSingleSeries(rand: () => number): TestCase {\n    // Single series: 12 months actual + 4 months forecast (continuous dates)\n    const allDates = genDates(16, 2024);  // 16 continuous dates\n    const actualDates = allDates.slice(0, 12);\n    const forecastDates = allDates.slice(12);\n\n    const data: Record<string, any>[] = [];\n    let val = 100;\n    // Actual data\n    for (const d of actualDates) {\n        val = Math.round(val + (rand() - 0.4) * 15);\n        data.push({ Date: d, Revenue: val, Type: 'actual' });\n    }\n    // Duplicate last actual point as first forecast point (for line connection)\n    const lastActual = data[data.length - 1];\n    data.push({ Date: lastActual.Date, Revenue: lastActual.Revenue, Type: 'forecast' });\n    // Forecast data (trending upward)\n    for (const d of forecastDates) {\n        val = Math.round(val + rand() * 12 + 3);\n        data.push({ Date: d, Revenue: val, Type: 'forecast' });\n    }\n\n    return {\n        title: 'Forecast — single series, actual vs forecast',\n        description: 'Single time series with actual (solid) vs forecast (dashed) using strokeDash',\n        tags: ['temporal', 'forecast', 'strokeDash', 'medium'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('Date'), makeField('Revenue'), makeField('Type')],\n        metadata: {\n            Date:    { type: Type.Date,   semanticType: 'Date',     levels: [] },\n            Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Type:    { type: Type.String, semanticType: 'Category', levels: ['actual', 'forecast'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Date'),\n            y: makeEncodingItem('Revenue'),\n            strokeDash: makeEncodingItem('Type'),\n        },\n    };\n}\n\nfunction genForecastTestMultiSeries(rand: () => number): TestCase {\n    // 3 product series: 10 actual + 3 forecast (continuous dates)\n    const products = ['Widget A', 'Widget B', 'Widget C'];\n    const allDates = genDates(13, 2024);  // 13 continuous dates\n    const actualDates = allDates.slice(0, 10);\n    const forecastDates = allDates.slice(10);\n\n    const data: Record<string, any>[] = [];\n    for (const product of products) {\n        let val = 50 + Math.round(rand() * 100);\n        const vol = 5 + rand() * 15;\n        // Actual data\n        for (const d of actualDates) {\n            val = Math.round(Math.max(10, val + (rand() - 0.45) * vol));\n            data.push({ Date: d, Sales: val, Product: product, Type: 'actual' });\n        }\n        // Duplicate last actual point as first forecast (for line connection)\n        const lastActual = data[data.length - 1];\n        data.push({ Date: lastActual.Date, Sales: lastActual.Sales, Product: product, Type: 'forecast' });\n        // Forecast data\n        for (const d of forecastDates) {\n            val = Math.round(val + rand() * 10 + 2);\n            data.push({ Date: d, Sales: val, Product: product, Type: 'forecast' });\n        }\n    }\n\n    return {\n        title: 'Forecast — 3 series, color + strokeDash',\n        description: '3 product series with color for series grouping and strokeDash for actual vs forecast',\n        tags: ['temporal', 'nominal', 'forecast', 'strokeDash', 'color', 'medium'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('Date'), makeField('Sales'), makeField('Product'), makeField('Type')],\n        metadata: {\n            Date:    { type: Type.Date,   semanticType: 'Date',     levels: [] },\n            Sales:   { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Product: { type: Type.String, semanticType: 'Category', levels: products },\n            Type:    { type: Type.String, semanticType: 'Category', levels: ['actual', 'forecast'] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('Date'),\n            y: makeEncodingItem('Sales'),\n            color: makeEncodingItem('Product'),\n            strokeDash: makeEncodingItem('Type'),\n        },\n    };\n}\n\n// ============================================================================\n// Public export\n// ============================================================================\n\nexport function genLineTests(): TestCase[] {\n    const rand = seededRandom(600);\n    const matrixTests = LINE_MATRIX.map(entry => lineMatrixToTestCase(entry, rand));\n\n    // Forecast tests\n    const forecastRand = seededRandom(700);\n    const forecastTests = [\n        genForecastTestSingleSeries(forecastRand),\n        genForecastTestMultiSeries(forecastRand),\n    ];\n\n    return [...matrixTests, ...forecastTests, ...realLineCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realSparklineCases } from './real-world-tests';\nimport { seededRandom, genDates, genCategories } from './generators';\n\n// ============================================================================\n// Sparkline Tests — small-multiples \"sparkline table\" strips.\n//\n// One compact row per series. The matrix varies the number of series and the\n// points-per-series so we exercise tight vertical packing (3 → 8 → 15 strips)\n// at a few densities, plus a couple of single-series and ordinal-x cases.\n//\n// Series field is a Category (nominal) bound to `color`; the template remaps\n// it onto `row`, so each series gets its own short strip.\n// ============================================================================\n\ninterface SparkMatrixEntry {\n    /** Number of series (= number of stacked strips). 1 → single sparkline. */\n    series: number;\n    /** Points per series. */\n    perSeries: number;\n    /** 'T' temporal x or 'O' ordinal x. */\n    x: 'T' | 'O';\n    /** ~20% random dropout to test sparse strips. */\n    sparse?: boolean;\n    desc: string;\n    extraTags?: string[];\n}\n\nconst SPARK_MATRIX: SparkMatrixEntry[] = [\n    // ── Single sparkline (the minimal dataword) ─────────────────────\n    { series: 1, perSeries: 30, x: 'T', desc: 'Single sparkline — 30-point time series' },\n\n    // ── Small / medium / large strip stacks ─────────────────────────\n    { series: 3, perSeries: 24, x: 'T', desc: '3 series → 3 strips (KPI table)' },\n    { series: 8, perSeries: 36, x: 'T', desc: '8 series → 8 strips (dense pack)' },\n    { series: 15, perSeries: 48, x: 'T', desc: '15 series → 15 strips (tight pack stress)', extraTags: ['stress'] },\n\n    // ── Variations ──────────────────────────────────────────────────\n    { series: 6, perSeries: 30, x: 'T', sparse: true, desc: '6 series × 30 pts, ~20% missing (sparse strips)' },\n    { series: 5, perSeries: 12, x: 'O', desc: '5 series over 12 ordinal stages' },\n    { series: 10, perSeries: 60, x: 'T', desc: '10 series × 60 pts (high temporal density)', extraTags: ['large'] },\n];\n\nconst ORDINAL_STAGES = (n: number): string[] =>\n    Array.from({ length: n }, (_, i) => `Q${i + 1}`);\n\n/** Smooth random-walk values (momentum + noise), kept non-negative. */\nfunction genWalk(n: number, base: number, volatility: number, rand: () => number): number[] {\n    const v: number[] = [base];\n    let m = 0;\n    for (let i = 1; i < n; i++) {\n        m = 0.7 * m + (rand() - 0.5) * volatility;\n        v.push(Math.round(Math.max(0, v[i - 1] + m)));\n    }\n    return v;\n}\n\nfunction buildSparkTitle(e: SparkMatrixEntry): string {\n    const xLabel = e.x === 'T' ? 'T' : 'O';\n    const parts = [`${e.series}×${xLabel}`];\n    parts.push(`(${e.perSeries} pts/series)`);\n    if (e.sparse) parts.push('sparse');\n    return parts.join(' ');\n}\n\nfunction buildSparkTags(e: SparkMatrixEntry, n: number): string[] {\n    const tags: string[] = ['quantitative'];\n    if (e.x === 'T') tags.push('temporal');\n    else tags.push('ordinal');\n    if (e.series > 1) tags.push('color', 'small-multiples');\n    if (e.sparse) tags.push('sparse');\n    if (n <= 30) tags.push('small');\n    else if (n <= 150) tags.push('medium');\n    else tags.push('large');\n    if (e.extraTags) tags.push(...e.extraTags);\n    return [...new Set(tags)];\n}\n\nfunction sparkMatrixToTestCase(e: SparkMatrixEntry, rand: () => number): TestCase {\n    const xValues: any[] = e.x === 'T'\n        ? genDates(e.perSeries, 2021)\n        : ORDINAL_STAGES(e.perSeries);\n\n    const seriesNames = e.series > 1 ? genCategories('Metric', e.series) : [null];\n\n    const data: Record<string, any>[] = [];\n    for (let s = 0; s < e.series; s++) {\n        const base = 40 + Math.round(rand() * 160);\n        const vol = 8 + rand() * 28;\n        const yValues = genWalk(xValues.length, base, vol, rand);\n        for (let i = 0; i < xValues.length; i++) {\n            if (e.sparse && rand() < 0.2) continue;\n            const row: Record<string, any> = {\n                Date: xValues[i],\n                Value: yValues[i],\n            };\n            if (e.series > 1) row.Metric = seriesNames[s];\n            data.push(row);\n        }\n    }\n\n    const metadata: TestCase['metadata'] = {\n        Date: {\n            type: e.x === 'T' ? Type.Date : Type.String,\n            semanticType: e.x === 'T' ? 'Date' : 'Category',\n            levels: e.x === 'T' ? [] : xValues as any[],\n        },\n        Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n    };\n    const fields = [makeField('Date'), makeField('Value')];\n    const encodingMap: TestCase['encodingMap'] = {\n        x: makeEncodingItem('Date'),\n        y: makeEncodingItem('Value'),\n    };\n    if (e.series > 1) {\n        metadata.Metric = { type: Type.String, semanticType: 'Category', levels: seriesNames as any[] };\n        fields.push(makeField('Metric'));\n        encodingMap.color = makeEncodingItem('Metric');\n    }\n\n    return {\n        title: buildSparkTitle(e),\n        description: e.desc,\n        tags: buildSparkTags(e, data.length),\n        chartType: 'Sparkline',\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\nexport function genSparklineTests(): TestCase[] {\n    const rand = seededRandom(0x5A8C);\n    return [...SPARK_MATRIX.map(e => sparkMatrixToTestCase(e, rand)), ...realSparklineCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realBumpCases } from './real-world-tests';\nimport { seededRandom, genDates, genYears, genMonths, genCategories } from './generators';\n\n// Line Chart tests have been moved to line-tests.ts (matrix-driven).\n// Area Chart & Streamgraph tests have been moved to area-tests.ts (matrix-driven).\n\n// ------ Bump Chart ------\nexport function genBumpChartTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    // 1. Classic bump chart: rank over rounds (intended use)\n    {\n        const teams = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E'];\n        const rounds = ['Round 1', 'Round 2', 'Round 3', 'Round 4', 'Round 5', 'Round 6'];\n        const data: any[] = [];\n        for (const r of rounds) {\n            const shuffled = [...teams].sort(() => rand() - 0.5);\n            shuffled.forEach((t, i) => {\n                data.push({ Round: r, Team: t, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Ordinal × Rank + Color (classic bump)',\n            description: '6 rounds × 5 teams — rank changes over rounds',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Round'), makeField('Rank'), makeField('Team')],\n            metadata: {\n                Round: { type: Type.String, semanticType: 'Category', levels: rounds },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Team: { type: Type.String, semanticType: 'Team', levels: teams },\n            },\n            encodingMap: { x: makeEncodingItem('Round'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Team') },\n        });\n    }\n\n    // 2. Temporal bump: rank over years (intended use)\n    {\n        const years = genYears(10, 2015);\n        const countries = ['USA', 'China', 'Germany', 'Japan', 'India'];\n        const data: any[] = [];\n        for (const y of years) {\n            const shuffled = [...countries].sort(() => rand() - 0.5);\n            shuffled.forEach((c, i) => {\n                data.push({ Year: y, Country: c, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Temporal × Rank + Color (yearly ranking)',\n            description: '10 years × 5 countries — GDP ranking over time',\n            tags: ['temporal', 'quantitative', 'color', 'medium'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Year'), makeField('Country'), makeField('Rank')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Country') },\n        });\n    }\n\n    // 3. Many series (potential clutter — stress test)\n    {\n        const months = genMonths(12);\n        const players = genCategories('Player', 12);\n        const data: any[] = [];\n        for (const m of months) {\n            const shuffled = [...players].sort(() => rand() - 0.5);\n            shuffled.forEach((p, i) => {\n                data.push({ Month: m, Player: p, Rank: i + 1 });\n            });\n        }\n        tests.push({\n            title: 'Ordinal × Rank + Color (many series, 144 pts)',\n            description: '12 months × 12 players — crowded bump chart',\n            tags: ['ordinal', 'quantitative', 'color', 'large'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rank'), makeField('Player')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Player: { type: Type.String, semanticType: 'Category', levels: players },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    // 4. Score instead of rank — no \"Rank\" semantic type (edge case)\n    {\n        const dates = genDates(8, 2024);\n        const brands = ['Brand A', 'Brand B', 'Brand C'];\n        const data: any[] = [];\n        for (const d of dates) for (const b of brands) {\n            data.push({ Date: d, Brand: b, Score: Math.round(50 + rand() * 50) });\n        }\n        tests.push({\n            title: 'Temporal × Quant + Color (score, no rank semantic)',\n            description: '8 dates × 3 brands — score values without Rank semantic type',\n            tags: ['temporal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Date'), makeField('Score'), makeField('Brand')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Brand: { type: Type.String, semanticType: 'Category', levels: brands },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Score'), color: makeEncodingItem('Brand') },\n        });\n    }\n\n    // 5. No color — single series (degenerate case)\n    {\n        const rounds = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const data = rounds.map((r, i) => ({ Quarter: r, Rank: Math.ceil(1 + rand() * 5) }));\n        tests.push({\n            title: 'Ordinal × Rank (single series, no color)',\n            description: '4 quarters — bump chart without color encoding',\n            tags: ['ordinal', 'quantitative', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Rank')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: rounds },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Rank') },\n        });\n    }\n\n    // 6. Two items only (minimal case)\n    {\n        const years = genYears(5, 2020);\n        const items = ['Alpha', 'Beta'];\n        const data: any[] = [];\n        for (const y of years) {\n            const flip = rand() > 0.5;\n            data.push({ Year: y, Item: items[0], Rank: flip ? 1 : 2 });\n            data.push({ Year: y, Item: items[1], Rank: flip ? 2 : 1 });\n        }\n        tests.push({\n            title: 'Temporal × Rank + Color (2 items only)',\n            description: '5 years × 2 items — minimal bump chart',\n            tags: ['temporal', 'quantitative', 'color', 'small'],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Year'), makeField('Rank'), makeField('Item')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                Rank: { type: Type.Number, semanticType: 'Rank', levels: [] },\n                Item: { type: Type.String, semanticType: 'Category', levels: items },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Item') },\n        });\n    }\n\n    return [...tests, ...realBumpCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Slope Chart (slopegraph) test data.\n *\n * A slopegraph connects each category's value at exactly TWO periods with a\n * straight line + end points; the read is the slope (direction of change) and\n * the crossovers between categories. These generators cover the data shapes a\n * slopegraph is built for: ordinal-label periods, temporal (year / date)\n * periods, low → high category cardinality, negative / zero-crossing values,\n * faceting, and the degenerate single-series case.\n *\n * `genSlopeTests`        — the canonical (Vega-Lite) gallery + coverage set.\n * `genEChartsSlopeTests` — curated, color-grouped subset for the ECharts wall.\n * `genChartJsSlopeTests` — curated, color-grouped subset for the Chart.js wall.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genYears } from './generators';\n\n/** Two-period rows: one {period, category, value} row per (period × category). */\nfunction buildSlopeRows(\n    periods: (string | number)[],\n    categoryValues: Record<string, number[]>,\n    fields: { period: string; category: string; value: string },\n): any[] {\n    const rows: any[] = [];\n    for (const [cat, vals] of Object.entries(categoryValues)) {\n        periods.forEach((p, i) => {\n            rows.push({ [fields.period]: p, [fields.category]: cat, [fields.value]: vals[i] });\n        });\n    }\n    return rows;\n}\n\nexport function genSlopeTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(910);\n\n    // 1. BASIC — 5 products, two ordinal-label periods, color per product.\n    {\n        const periods = ['2019', '2024'];\n        const products = genCategories('Product', 5);\n        const catValues: Record<string, number[]> = {};\n        for (const p of products) {\n            const start = Math.round(20 + rand() * 60);\n            const end = Math.round(20 + rand() * 60);\n            catValues[p] = [start, end];\n        }\n        const data = buildSlopeRows(periods, catValues, { period: 'Period', category: 'Product', value: 'Revenue' });\n        tests.push({\n            title: 'Two periods × 5 products + Color (basic)',\n            description: '5 products, value change from 2019 → 2024 — minimum useful slopegraph',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Period'), makeField('Revenue'), makeField('Product')],\n            metadata: {\n                Period: { type: Type.String, semanticType: 'Category', levels: periods },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n            },\n            encodingMap: { x: makeEncodingItem('Period'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 2. ADVANCED — temporal (year) periods, 8 teams that cross over, color.\n    {\n        const years = [genYears(1, 2018)[0], genYears(1, 2023)[0]]; // [2018, 2023]\n        const teams = genCategories('Company', 8);\n        const catValues: Record<string, number[]> = {};\n        teams.forEach((t, idx) => {\n            // Engineer clear crossings: rising and falling cohorts interleave.\n            const start = 30 + idx * 8 + Math.round(rand() * 6);\n            const end = 90 - idx * 8 + Math.round(rand() * 6);\n            catValues[t] = [start, end];\n        });\n        const data = buildSlopeRows(years, catValues, { period: 'Year', category: 'Company', value: 'Market Share' });\n        tests.push({\n            title: 'Temporal years × 8 companies + Color (crossings)',\n            description: '8 companies, market-share crossovers from 2018 → 2023 — multi-series with crossings',\n            tags: ['temporal', 'quantitative', 'color', 'medium', 'crossings'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Year'), makeField('Market Share'), makeField('Company')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                'Market Share': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Company: { type: Type.String, semanticType: 'Company', levels: teams },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Market Share'), color: makeEncodingItem('Company') },\n        });\n    }\n\n    // 3. Temporal ISO-date periods, 4 items, color per country.\n    {\n        const dates = ['2020-01-01', '2023-06-01'];\n        const items = genCategories('Country', 4);\n        // Explicit, well-separated start/end pairs (two risers, two fallers)\n        // so the four lines stay distinct and end-points never coincide.\n        const profiles: [number, number][] = [[68, 52], [50, 72], [60, 44], [44, 63]];\n        const catValues: Record<string, number[]> = {};\n        items.forEach((it, i) => { catValues[it] = [profiles[i][0], profiles[i][1]]; });\n        const data = buildSlopeRows(dates, catValues, { period: 'Date', category: 'Country', value: 'Index' });\n        tests.push({\n            title: 'ISO dates × 4 countries + Color (temporal)',\n            description: '4 countries across two ISO dates — temporal periods with a color legend',\n            tags: ['temporal', 'quantitative', 'color', 'small', 'dates'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Date'), makeField('Index'), makeField('Country')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Index: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Country: { type: Type.String, semanticType: 'Country', levels: items },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Index'), color: makeEncodingItem('Country') },\n        });\n    }\n\n    // 4. Negative / zero-crossing values — net profit change per region.\n    {\n        const periods = ['Q1', 'Q4'];\n        const regions = ['North', 'South', 'East', 'West', 'Central', 'Coast'];\n        const starts = [40, 10, -15, 25, -5, 30];\n        const ends = [15, -20, 35, -10, 28, 22];\n        const catValues: Record<string, number[]> = {};\n        regions.forEach((r, i) => { catValues[r] = [starts[i], ends[i]]; });\n        const data = buildSlopeRows(periods, catValues, { period: 'Quarter', category: 'Region', value: 'Net Profit' });\n        tests.push({\n            title: 'Two periods × 6 regions + Color (zero-crossing values)',\n            description: '6 regions whose net profit crosses zero between Q1 and Q4 — diverging values',\n            tags: ['ordinal', 'quantitative', 'color', 'negative', 'medium'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Net Profit'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: periods },\n                'Net Profit': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Net Profit'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 5. Minimal / low cardinality — 2 items, Before → After.\n    {\n        const periods = ['Before', 'After'];\n        const catValues: Record<string, number[]> = { Treatment: [62, 88], Control: [60, 64] };\n        const data = buildSlopeRows(periods, catValues, { period: 'Phase', category: 'Cohort', value: 'Score' });\n        tests.push({\n            title: 'Two periods × 2 cohorts + Color (minimal)',\n            description: '2 cohorts, before/after — lowest-cardinality slopegraph',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Score'), makeField('Cohort')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: periods },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Cohort: { type: Type.String, semanticType: 'Category', levels: ['Treatment', 'Control'] },\n            },\n            encodingMap: { x: makeEncodingItem('Phase'), y: makeEncodingItem('Score'), color: makeEncodingItem('Cohort') },\n        });\n    }\n\n    // 6. Faceted — slopegraph split into small multiples by Segment (column).\n    {\n        const periods = ['2021', '2022'];\n        const products = genCategories('Product', 4);\n        const segments = ['Retail', 'Online'];\n        // Distinct value bands per product keep the four lines separated within\n        // each panel so end-point markers do not collide.\n        const productBase = [64, 50, 38, 26];\n        const productDelta = [-6, 14, -10, 8];\n        const data: any[] = [];\n        for (const seg of segments) {\n            const segLift = seg === 'Online' ? 6 : 0;\n            products.forEach((p, pi) => {\n                const start = productBase[pi] + segLift + Math.round(rand() * 3);\n                const end = start + productDelta[pi] + Math.round(rand() * 3);\n                data.push({ Period: periods[0], Product: p, Segment: seg, Sales: start });\n                data.push({ Period: periods[1], Product: p, Segment: seg, Sales: end });\n            });\n        }\n        tests.push({\n            title: 'Two periods × 4 products + Color, faceted by Segment',\n            description: '4 products across two periods, small multiples by channel (column facet)',\n            tags: ['ordinal', 'quantitative', 'color', 'facet', 'medium'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Period'), makeField('Sales'), makeField('Product'), makeField('Segment')],\n            metadata: {\n                Period: { type: Type.String, semanticType: 'Category', levels: periods },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n                Segment: { type: Type.String, semanticType: 'Category', levels: segments },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Period'), y: makeEncodingItem('Sales'),\n                color: makeEncodingItem('Product'), column: makeEncodingItem('Segment'),\n            },\n        });\n    }\n\n    // 7. High cardinality — 12 categories (crowded; stress, kept out of wall).\n    {\n        const periods = ['2021', '2022'];\n        const names = genCategories('Name', 12);\n        const catValues: Record<string, number[]> = {};\n        for (const n of names) catValues[n] = [Math.round(10 + rand() * 90), Math.round(10 + rand() * 90)];\n        const data = buildSlopeRows(periods, catValues, { period: 'Period', category: 'Name', value: 'Value' });\n        tests.push({\n            title: 'Two periods × 12 categories + Color (high cardinality)',\n            description: '12 categories across two periods — crowded slopegraph stress case',\n            tags: ['ordinal', 'quantitative', 'color', 'large', 'stress'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Period'), makeField('Value'), makeField('Name')],\n            metadata: {\n                Period: { type: Type.String, semanticType: 'Category', levels: periods },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Name: { type: Type.String, semanticType: 'Name', levels: names },\n            },\n            encodingMap: { x: makeEncodingItem('Period'), y: makeEncodingItem('Value'), color: makeEncodingItem('Name') },\n        });\n    }\n\n    // 8. Degenerate — single series (no color/detail), two periods.\n    {\n        const periods = ['Start', 'End'];\n        const data = [\n            { Stage: periods[0], Conversion: 42 },\n            { Stage: periods[1], Conversion: 67 },\n        ];\n        tests.push({\n            title: 'Two periods × single series (no color)',\n            description: 'A single line connecting two periods — degenerate slopegraph',\n            tags: ['ordinal', 'quantitative', 'small', 'degenerate'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Stage'), makeField('Conversion')],\n            metadata: {\n                Stage: { type: Type.String, semanticType: 'Category', levels: periods },\n                Conversion: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Stage'), y: makeEncodingItem('Conversion') },\n        });\n    }\n\n    // 9. Detail channel — one line per category, grouped WITHOUT a color legend.\n    //    Exercises the `detail` channel (intended to produce same-colored,\n    //    legend-less lines whose collective shape is the read). Tagged\n    //    edge-case so it stays out of the gallery wall but is covered by tests.\n    {\n        const periods = ['Before', 'After'];\n        const items = genCategories('Unit', 6);\n        const catValues: Record<string, number[]> = {};\n        for (const it of items) catValues[it] = [Math.round(30 + rand() * 50), Math.round(30 + rand() * 50)];\n        const data = buildSlopeRows(periods, catValues, { period: 'Phase', category: 'Unit', value: 'Score' });\n        tests.push({\n            title: 'Two periods × 6 units + Detail (no legend)',\n            description: '6 units grouped by detail rather than color — legend-less slopegraph',\n            tags: ['ordinal', 'quantitative', 'detail', 'medium', 'edge-case'],\n            chartType: 'Slope Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Score'), makeField('Unit')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: periods },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Unit: { type: Type.String, semanticType: 'Category', levels: items },\n            },\n            encodingMap: { x: makeEncodingItem('Phase'), y: makeEncodingItem('Score'), detail: makeEncodingItem('Unit') },\n        });\n    }\n\n    return tests;\n}\n\n/**\n * ECharts wall variants — color-grouped slopegraphs (basic, temporal crossings,\n * zero-crossing). Reuses the canonical cases that translate cleanly to the\n * series-based ECharts backend.\n */\nexport function genEChartsSlopeTests(): TestCase[] {\n    const all = genSlopeTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Two periods × 5 products + Color (basic)'),\n        pick('Temporal years × 8 companies + Color (crossings)'),\n        pick('Two periods × 6 regions + Color (zero-crossing values)'),\n    ];\n}\n\n/**\n * Chart.js wall variants — color-grouped slopegraphs. Chart.js builds one\n * dataset per category, so the color-grouped cases are the representative set.\n */\nexport function genChartJsSlopeTests(): TestCase[] {\n    const all = genSlopeTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Two periods × 5 products + Color (basic)'),\n        pick('Temporal years × 8 companies + Color (crossings)'),\n        pick('Two periods × 2 cohorts + Color (minimal)'),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Connected Scatter Plot test data.\n *\n * A connected scatter plots points in 2-D (x, y both quantitative) and joins\n * them with a straight line **in a defined order** (time / sequence), tracing a\n * trajectory through the space. The read is the x↔y correlation AND the ordered\n * path at once. These generators cover the shapes a connected scatter is built\n * for: a single ordered trajectory, multiple color-grouped trajectories,\n * temporal vs numeric/index order fields, a self-crossing (looping) path where\n * x is non-monotonic with the order, and low → high point counts.\n *\n * Every case sets the `order` channel — the connecting line must follow it, not\n * the x value.\n *\n * `genConnectedScatterTests`        — canonical (Vega-Lite) gallery + coverage.\n * `genEChartsConnectedScatterTests` — curated subset for the ECharts wall.\n * `genChartJsConnectedScatterTests` — curated subset for the Chart.js wall.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realConnectedScatterCases } from './real-world-tests';\nimport { seededRandom, genCategories, genYears } from './generators';\n\nexport function genConnectedScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(2026);\n\n    // 1. BASIC — single trajectory of 10 ordered points: the Phillips-curve\n    //    style unemployment-vs-inflation path over 10 years, ordered by year.\n    {\n        const years = genYears(10, 2014); // 2014..2023\n        // A hand-shaped path that wanders (not monotonic in x) so the line is a\n        // genuine trajectory, not a left-to-right sweep.\n        const unemployment = [6.2, 5.3, 4.9, 4.4, 3.9, 3.7, 8.1, 5.4, 3.6, 3.7];\n        const inflation = [1.6, 0.1, 1.3, 2.1, 2.4, 1.8, 1.2, 4.7, 8.0, 4.1];\n        const data = years.map((yr, i) => ({\n            Year: yr,\n            'Unemployment Rate': unemployment[i],\n            'Inflation Rate': inflation[i],\n        }));\n        tests.push({\n            title: 'Unemployment vs Inflation over 10 years (basic)',\n            description: 'A single trajectory of 10 yearly points, connected in year order — minimum useful connected scatter',\n            tags: ['quantitative', 'temporal-order', 'single', 'small'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Unemployment Rate'), makeField('Inflation Rate'), makeField('Year')],\n            metadata: {\n                'Unemployment Rate': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Inflation Rate': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Unemployment Rate'),\n                y: makeEncodingItem('Inflation Rate'),\n                order: makeEncodingItem('Year'),\n            },\n        });\n    }\n\n    // 2. ADVANCED — 3 countries, each its own trajectory (color), ordered by\n    //    year. GDP growth vs inflation paths that wander and overlap.\n    {\n        const years = genYears(8, 2016); // 2016..2023\n        const countries = genCategories('Country', 3); // USA, China, Japan\n        // Distinct wandering profiles per country (gdp%, infl%) per year.\n        const profiles: Record<string, { gdp: number[]; infl: number[] }> = {\n            [countries[0]]: { gdp: [1.7, 2.3, 2.9, 2.3, -3.4, 5.9, 2.1, 2.5], infl: [1.3, 2.1, 2.4, 1.8, 1.2, 4.7, 8.0, 4.1] },\n            [countries[1]]: { gdp: [6.8, 6.9, 6.7, 6.0, 2.2, 8.4, 3.0, 5.2], infl: [2.0, 1.6, 2.1, 2.9, 2.4, 0.9, 2.0, 0.2] },\n            [countries[2]]: { gdp: [0.8, 1.7, 0.6, -0.4, -4.3, 2.1, 1.0, 1.9], infl: [-0.1, 0.5, 1.0, 0.5, 0.0, -0.2, 2.5, 3.3] },\n        };\n        const data: any[] = [];\n        for (const c of countries) {\n            years.forEach((yr, i) => {\n                data.push({\n                    Country: c,\n                    Year: yr,\n                    'GDP Growth': profiles[c].gdp[i],\n                    Inflation: profiles[c].infl[i],\n                });\n            });\n        }\n        tests.push({\n            title: 'GDP growth vs Inflation × 3 countries + Color (trajectories)',\n            description: '3 countries, each an 8-year trajectory distinguished by color — multi-series connected scatter',\n            tags: ['quantitative', 'temporal-order', 'color', 'multi-series', 'medium'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('GDP Growth'), makeField('Inflation'), makeField('Year'), makeField('Country')],\n            metadata: {\n                'GDP Growth': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Inflation: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n            },\n            encodingMap: {\n                x: makeEncodingItem('GDP Growth'),\n                y: makeEncodingItem('Inflation'),\n                order: makeEncodingItem('Year'),\n                color: makeEncodingItem('Country'),\n            },\n        });\n    }\n\n    // 3. TEMPORAL order field — ISO dates. A stock's price vs volume path\n    //    connected in date order (a single trajectory).\n    {\n        const dates = [\n            '2023-01-03', '2023-02-01', '2023-03-01', '2023-04-03', '2023-05-01',\n            '2023-06-01', '2023-07-03', '2023-08-01', '2023-09-01', '2023-10-02',\n            '2023-11-01', '2023-12-01',\n        ];\n        const price = [142, 151, 148, 165, 172, 180, 193, 188, 171, 170, 189, 192];\n        const volume = [58, 47, 63, 41, 38, 52, 35, 44, 71, 66, 49, 40];\n        const data = dates.map((d, i) => ({ Date: d, 'Trade Volume': volume[i], 'Share Price': price[i] }));\n        tests.push({\n            title: 'Share price vs Volume over 12 dates (temporal order)',\n            description: 'A 12-point monthly trajectory ordered by an ISO-date field — temporal order channel',\n            tags: ['quantitative', 'temporal-order', 'dates', 'single', 'medium'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Trade Volume'), makeField('Share Price'), makeField('Date')],\n            metadata: {\n                'Trade Volume': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Share Price': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Trade Volume'),\n                y: makeEncodingItem('Share Price'),\n                order: makeEncodingItem('Date'),\n            },\n        });\n    }\n\n    // 4. LOOPING / SELF-CROSSING — a figure-eight (Gerono lemniscate) traversed\n    //    by a numeric step index. x is NON-monotonic with the order and the\n    //    path crosses itself — the defining case for a connected scatter.\n    {\n        const N = 24;\n        const data: any[] = [];\n        for (let i = 0; i < N; i++) {\n            const t = (2 * Math.PI * i) / (N - 1);\n            const x = 50 + 40 * Math.cos(t);\n            const y = 50 + 40 * Math.sin(t) * Math.cos(t); // sin(2t)/2 → crosses at center\n            data.push({\n                Step: i,\n                'Signal A': Math.round(x * 10) / 10,\n                'Signal B': Math.round(y * 10) / 10,\n            });\n        }\n        tests.push({\n            title: 'Self-crossing sensor loop × 24 steps (figure-eight)',\n            description: 'A figure-eight trajectory ordered by step index — x is non-monotonic and the line crosses itself',\n            tags: ['quantitative', 'index-order', 'looping', 'self-crossing', 'single', 'medium'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Signal A'), makeField('Signal B'), makeField('Step')],\n            metadata: {\n                'Signal A': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Signal B': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Step: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Signal A'),\n                y: makeEncodingItem('Signal B'),\n                order: makeEncodingItem('Step'),\n            },\n        });\n    }\n\n    // 5. NUMERIC / INDEX order field, multi-series — two lab experiments,\n    //    each a temperature-vs-pressure trajectory ordered by a step index.\n    {\n        const experiments = ['Trial A', 'Trial B'];\n        const steps = [1, 2, 3, 4, 5, 6, 7, 8];\n        // Two wandering pressure/temperature paths.\n        const profiles: Record<string, { temp: number[]; pres: number[] }> = {\n            'Trial A': { temp: [20, 35, 55, 70, 60, 45, 30, 22], pres: [1.0, 1.4, 2.1, 3.0, 2.6, 1.9, 1.3, 1.05] },\n            'Trial B': { temp: [25, 30, 48, 68, 80, 62, 40, 28], pres: [1.1, 1.2, 1.8, 2.7, 3.4, 2.4, 1.5, 1.15] },\n        };\n        const data: any[] = [];\n        for (const ex of experiments) {\n            steps.forEach((s, i) => {\n                data.push({\n                    Experiment: ex,\n                    Step: s,\n                    Temperature: profiles[ex].temp[i],\n                    Pressure: profiles[ex].pres[i],\n                });\n            });\n        }\n        tests.push({\n            title: 'Temperature vs Pressure × 2 trials + Color (index order)',\n            description: 'Two experiment trajectories ordered by a numeric step index, grouped by color',\n            tags: ['quantitative', 'index-order', 'color', 'multi-series', 'small', 'edge-case'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Temperature'), makeField('Pressure'), makeField('Step'), makeField('Experiment')],\n            metadata: {\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Pressure: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Step: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Experiment: { type: Type.String, semanticType: 'Category', levels: experiments },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Temperature'),\n                y: makeEncodingItem('Pressure'),\n                order: makeEncodingItem('Step'),\n                color: makeEncodingItem('Experiment'),\n            },\n        });\n    }\n\n    // 6. LOW point count — a minimal 4-point trajectory (smallest useful case).\n    {\n        const data = [\n            { Quarter: 1, Cost: 12, Revenue: 18 },\n            { Quarter: 2, Cost: 20, Revenue: 26 },\n            { Quarter: 3, Cost: 17, Revenue: 35 },\n            { Quarter: 4, Cost: 24, Revenue: 30 },\n        ];\n        tests.push({\n            title: 'Cost vs Revenue over 4 quarters (low count)',\n            description: 'A minimal 4-point trajectory ordered by quarter index — lowest useful connected scatter',\n            tags: ['quantitative', 'index-order', 'single', 'small', 'edge-case'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Cost'), makeField('Revenue'), makeField('Quarter')],\n            metadata: {\n                Cost: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Quarter: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Cost'),\n                y: makeEncodingItem('Revenue'),\n                order: makeEncodingItem('Quarter'),\n            },\n        });\n    }\n\n    // 7. HIGHER point count — a 36-step single trajectory (a noisy spiral) that\n    //    winds through the plane, ordered by step (stress / density case).\n    {\n        const N = 36;\n        const data: any[] = [];\n        for (let i = 0; i < N; i++) {\n            const t = (3 * Math.PI * i) / (N - 1);\n            const r = 10 + i * 1.6;\n            const x = 60 + r * Math.cos(t) + (rand() - 0.5) * 4;\n            const y = 60 + r * Math.sin(t) + (rand() - 0.5) * 4;\n            data.push({\n                Step: i,\n                'X Position': Math.round(x * 10) / 10,\n                'Y Position': Math.round(y * 10) / 10,\n            });\n        }\n        tests.push({\n            title: 'Winding spiral × 36 steps (higher count)',\n            description: 'A 36-point spiral trajectory ordered by step index — higher point count / density',\n            tags: ['quantitative', 'index-order', 'looping', 'single', 'large', 'edge-case'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('X Position'), makeField('Y Position'), makeField('Step')],\n            metadata: {\n                'X Position': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Y Position': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Step: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('X Position'),\n                y: makeEncodingItem('Y Position'),\n                order: makeEncodingItem('Step'),\n            },\n        });\n    }\n\n    // 8. DETAIL channel — several small trajectories grouped WITHOUT a color\n    //    legend (the collective shape is the read). Exercises the `detail`\n    //    channel; tagged edge-case so it stays out of the gallery wall.\n    {\n        const sensors = genCategories('Product', 4); // Laptop, Phone, Tablet, Desktop\n        const steps = [1, 2, 3, 4, 5, 6];\n        const data: any[] = [];\n        sensors.forEach((s, si) => {\n            const base = 20 + si * 12;\n            steps.forEach((st, i) => {\n                const x = base + 18 * Math.sin((i / 5) * Math.PI) + (rand() - 0.5) * 4;\n                const y = base + 18 * Math.cos((i / 5) * Math.PI) + (rand() - 0.5) * 4;\n                data.push({ Sensor: s, Step: st, Drift: Math.round(x * 10) / 10, Noise: Math.round(y * 10) / 10 });\n            });\n        });\n        tests.push({\n            title: 'Drift vs Noise × 4 sensors + Detail (no legend)',\n            description: '4 sensor trajectories grouped by detail rather than color — legend-less small multiples of paths',\n            tags: ['quantitative', 'index-order', 'detail', 'multi-series', 'edge-case'],\n            chartType: 'Connected Scatter Plot',\n            data,\n            fields: [makeField('Drift'), makeField('Noise'), makeField('Step'), makeField('Sensor')],\n            metadata: {\n                Drift: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Noise: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Step: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Sensor: { type: Type.String, semanticType: 'Category', levels: sensors },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Drift'),\n                y: makeEncodingItem('Noise'),\n                order: makeEncodingItem('Step'),\n                detail: makeEncodingItem('Sensor'),\n            },\n        });\n    }\n\n    return [...tests, ...realConnectedScatterCases()];\n}\n\n/**\n * ECharts wall variants — basic single trajectory, multi-series color, temporal\n * order, and the self-crossing loop. These translate cleanly to the\n * series-based ECharts backend.\n */\nexport function genEChartsConnectedScatterTests(): TestCase[] {\n    const all = genConnectedScatterTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Unemployment vs Inflation over 10 years (basic)'),\n        pick('GDP growth vs Inflation × 3 countries + Color (trajectories)'),\n        pick('Share price vs Volume over 12 dates (temporal order)'),\n        pick('Self-crossing sensor loop × 24 steps (figure-eight)'),\n    ];\n}\n\n/**\n * Chart.js wall variants — basic single trajectory, multi-series color, the\n * self-crossing loop, and the index-order multi-series case. Chart.js builds one\n * dataset per trajectory, so the single and color-grouped cases are the\n * representative set.\n */\nexport function genChartJsConnectedScatterTests(): TestCase[] {\n    const all = genConnectedScatterTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Unemployment vs Inflation over 10 years (basic)'),\n        pick('GDP growth vs Inflation × 3 countries + Color (trajectories)'),\n        pick('Self-crossing sensor loop × 24 steps (figure-eight)'),\n        pick('Driving Shifts Into Reverse — miles vs gas price (US, 1956–2010)'),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realAreaCases, realStreamgraphCases } from './real-world-tests';\nimport { seededRandom, genDates, genCategories, genOrdinalLabels, ORDINAL_PREFIXES } from './generators';\n\n// ============================================================================\n// Area Chart & Streamgraph Tests — Matrix-driven\n//\n// Each test is defined as a compact row in AREA_MATRIX / STREAMGRAPH_MATRIX.\n// A shared generator converts matrix entries into full TestCase objects.\n//\n// Matrix dimensions:\n//   x axis type:  Q (quantitative), T (temporal), O (ordinal)\n//   y axis type:  same\n//   color channel: — | N (nominal, multi-series) | Q (gradient)\n//   n:             total data points\n//   sparse:        ~20% random dropout\n//\n// Ordinal (O) is used for axes — area charts require a meaningful\n// sequential order.  Nominal (N) is used for unordered color groups.\n// Purely nominal axes are excluded (area fills imply continuity).\n//\n// Default test canvas: 300 × 300 px.\n// ============================================================================\n\ntype DimType = 'Q' | 'T' | 'N' | 'O';\n\ninterface AreaMatrixEntry {\n    x: DimType;\n    y: DimType;\n    n: number;           // total data points (0 → grid)\n    color?: DimType;\n    xCard?: number;\n    yCard?: number;\n    colorCard?: number;\n    sparse?: boolean;\n    desc?: string;\n    extraTags?: string[];\n}\n\n// ============================================================================\n// AREA CHART MATRIX — one row per test case (21 tests)\n//\n// Note: O (ordinal) is used for categorical axes — area charts require\n// a meaningful sequential order.  N (nominal) is used for color groups.\n// Purely nominal axis combinations are excluded because connecting\n// unordered categories with area fills is visually misleading.\n// ============================================================================\n\nconst AREA_MATRIX: AreaMatrixEntry[] = [\n    // ── T × Q (6 tests) — core stacked / layered area ───────────────\n    { x: 'T', y: 'Q', n: 30,   desc: 'Simple time-series area — 30 dates' },\n    { x: 'T', y: 'Q', n: 96,   color: 'N', colorCard: 4,  desc: '4 stacked series × 24 dates' },\n    { x: 'T', y: 'Q', n: 480,  color: 'N', colorCard: 8,  desc: '8 series × 60 dates — large stacked' },\n    { x: 'T', y: 'Q', n: 1800, color: 'N', colorCard: 15, desc: '15 series × 120 dates — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 120,  color: 'N', colorCard: 3,  desc: '3 layered/overlapping series' },\n    { x: 'T', y: 'Q', n: 180,  color: 'N', colorCard: 3,  sparse: true, desc: '3 series, ~20% missing values' },\n\n    // ── O × Q (3 tests) — ordered categories on x ───────────────────\n    //    Area charts with ordinal x make sense when categories have an\n    //    inherent sequence (e.g. stages, ranked items, ordered groups).\n    { x: 'O', y: 'Q', n: 5,  xCard: 5,  desc: 'Ordinal area — 5 ordered categories' },\n    { x: 'O', y: 'Q', n: 48, xCard: 12, color: 'N', colorCard: 4, desc: '12 ordinal × 4 stacked series' },\n    { x: 'O', y: 'Q', n: 30, xCard: 30, desc: '30 ordinal categories — label overflow', extraTags: ['overflow'] },\n\n    // ── Q × Q (3 tests) — quantitative both axes ────────────────────\n    { x: 'Q', y: 'Q', n: 30,  desc: 'Quantitative x area — 30 pts' },\n    { x: 'Q', y: 'Q', n: 150, color: 'N', colorCard: 3, desc: '3 stacked curves × 50 pts' },\n    { x: 'Q', y: 'Q', n: 200, desc: 'Dense single-series area — 200 pts' },\n\n    // Excluded: continuous (Q) COLOR on an area — Vega-Lite fills the region\n    // with a per-vertex gradient that collapses each segment to the baseline\n    // (meaningless overlapping wedges). An area's fill can't carry a continuous\n    // third variable; use a line chart (neutral line + gradient points) instead.\n    // Excluded: Q×O (horizontal area on an ordinal/discrete y) — an area fill\n    // across discrete categories reads as a meaningless polygon; use a bar,\n    // lollipop or funnel there instead.\n    // Excluded: T×T, Q×T — date-pair data doesn't suit area charts.\n    // Area fills imply sequential progression; T×T/Q×T lack monotonic relationships.\n    // Excluded: N×N, T×N, N×T — purely nominal axes don't suit area charts.\n    // Area fills imply continuity/progression; nominal axes lack this.\n];\n\n// ============================================================================\n// STREAMGRAPH MATRIX — one row per test case (6 tests)\n//\n// Streamgraphs are centre-stacked areas — always multi-series (color\n// required).  Primarily T×Q but we exercise a few other combos.\n// ============================================================================\n\nconst STREAMGRAPH_MATRIX: AreaMatrixEntry[] = [\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 5,  desc: '5 genres × 40 dates — basic streamgraph' },\n    { x: 'T', y: 'Q', n: 3000, color: 'N', colorCard: 20, desc: '20 series × 150 dates — stress', extraTags: ['stress'] },\n    { x: 'T', y: 'Q', n: 200,  color: 'N', colorCard: 5,  sparse: true, desc: '5 series ~20% missing' },\n];\n\n// ============================================================================\n// Generator internals\n// ============================================================================\n\ninterface AreaCh {\n    role: 'x' | 'y' | 'color';\n    dimType: DimType;\n    fieldName: string;\n    card?: number;\n    levels?: string[];\n    dates?: string[];\n}\n\nconst AREA_NAMES: Record<string, Record<DimType, string>> = {\n    x:     { Q: 'X',        T: 'Date',      N: 'Series',    O: 'Stage' },\n    y:     { Q: 'Value',    T: 'EndDate',   N: 'Group',     O: 'Step' },\n    color: { Q: 'ColorVal', T: 'Timestamp', N: 'Series',    O: 'Level' },\n};\n\nconst AREA_FALLBACKS: Record<DimType, string[]> = {\n    Q: ['X', 'Value', 'Measure', 'Score'],\n    T: ['Date', 'EndDate', 'StartDate', 'Timestamp'],\n    N: ['Series', 'Group', 'Category', 'Type'],\n    O: ['Stage', 'Step', 'Phase', 'Level', 'Round'],\n};\n\nconst AREA_CAT_POOLS = ['Category', 'Country', 'Department', 'Product', 'Company'];\nconst AREA_T_STARTS  = [2020, 2023, 2019, 2022];\n\nfunction buildAreaChannels(entry: AreaMatrixEntry, nPerSeries: number): AreaCh[] {\n    const used = new Set<string>();\n    const channels: AreaCh[] = [];\n    let tIdx = 0;\n    let cIdx = 0;\n    let oIdx = 0;\n\n    function pickName(dim: DimType, role: string): string {\n        const primary = AREA_NAMES[role]?.[dim];\n        if (primary && !used.has(primary)) { used.add(primary); return primary; }\n        for (const n of AREA_FALLBACKS[dim]) {\n            if (!used.has(n)) { used.add(n); return n; }\n        }\n        return `${role}_field`;\n    }\n\n    const specs: { role: 'x' | 'y' | 'color'; dim: DimType; card?: number }[] = [\n        { role: 'x', dim: entry.x, card: entry.xCard },\n        { role: 'y', dim: entry.y, card: entry.yCard },\n    ];\n    if (entry.color) specs.push({ role: 'color', dim: entry.color, card: entry.colorCard });\n\n    for (const { role, dim, card } of specs) {\n        const ch: AreaCh = { role, dimType: dim, fieldName: pickName(dim, role) };\n\n        if (dim === 'N') {\n            const c = card || 3;\n            ch.card = c;\n            ch.levels = genCategories(AREA_CAT_POOLS[cIdx % AREA_CAT_POOLS.length], c);\n            cIdx++;\n        }\n\n        if (dim === 'O') {\n            const c = card || 5;\n            ch.card = c;\n            ch.levels = genOrdinalLabels(ORDINAL_PREFIXES[oIdx % ORDINAL_PREFIXES.length], c);\n            oIdx++;\n        }\n\n        if (dim === 'T') {\n            ch.dates = genDates(nPerSeries, AREA_T_STARTS[tIdx % AREA_T_STARTS.length]);\n            tIdx++;\n        }\n\n        channels.push(ch);\n    }\n\n    return channels;\n}\n\n// ---------------------------------------------------------------------------\n// Data generation\n// ---------------------------------------------------------------------------\n\n/** Smooth random walk with upward drift — natural for cumulative / area metrics. */\nfunction genAreaTrend(n: number, base: number, drift: number, volatility: number, rand: () => number): number[] {\n    const values: number[] = [base];\n    let momentum = 0;\n    for (let i = 1; i < n; i++) {\n        momentum = 0.6 * momentum + (rand() - 0.45) * volatility + drift;\n        values.push(Math.round(Math.max(0, values[i - 1] + momentum)));\n    }\n    return values;\n}\n\nfunction genAreaSeriesData(\n    entry: AreaMatrixEntry, channels: AreaCh[], rand: () => number,\n): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n\n    const nSeries = (colorCh?.dimType === 'N' ? (entry.colorCard || 3) : 1);\n    const nPerSeries = Math.max(1, Math.floor(entry.n / nSeries));\n\n    // Shared x-positions\n    let xPositions: any[];\n    if (xCh.dimType === 'T') {\n        xPositions = genDates(nPerSeries, 2020);\n    } else if (xCh.dimType === 'O') {\n        xPositions = xCh.levels!;\n    } else { // Q\n        xPositions = Array.from({ length: nPerSeries }, (_, i) =>\n            Math.round(i * 100 / Math.max(1, nPerSeries - 1) * 10) / 10);\n    }\n\n    const data: Record<string, any>[] = [];\n\n    for (let s = 0; s < nSeries; s++) {\n        const base = 50 + Math.round(rand() * 200);\n        const drift = 0.5 + rand() * 2;\n        const vol = 10 + rand() * 30;\n\n        // Generate y-values\n        let yValues: any[];\n        if (yCh.dimType === 'Q') {\n            yValues = genAreaTrend(xPositions.length, base, drift, vol, rand);\n        } else if (yCh.dimType === 'T') {\n            yValues = genDates(xPositions.length, 2023 + s);\n        } else { // O\n            yValues = xPositions.map((_, i) => yCh.levels![i % yCh.levels!.length]);\n        }\n\n        for (let i = 0; i < xPositions.length; i++) {\n            if (entry.sparse && rand() < 0.2) continue;\n\n            const row: Record<string, any> = {\n                [xCh.fieldName]: xPositions[i],\n                [yCh.fieldName]: yValues[i],\n            };\n\n            if (colorCh) {\n                if (colorCh.dimType === 'N') {\n                    row[colorCh.fieldName] = colorCh.levels![s];\n                } else if (colorCh.dimType === 'Q') {\n                    row[colorCh.fieldName] = Math.round(rand() * 100) / 10;\n                }\n            }\n\n            data.push(row);\n        }\n    }\n\n    return data;\n}\n\nfunction genAreaGridData(channels: AreaCh[], rand: () => number): Record<string, any>[] {\n    const xCh = channels.find(c => c.role === 'x')!;\n    const yCh = channels.find(c => c.role === 'y')!;\n    const colorCh = channels.find(c => c.role === 'color');\n    const data: Record<string, any>[] = [];\n\n    for (const xVal of xCh.levels!) {\n        for (const yVal of yCh.levels!) {\n            if (rand() > 0.3) {\n                const row: Record<string, any> = { [xCh.fieldName]: xVal, [yCh.fieldName]: yVal };\n                if (colorCh?.dimType === 'N')\n                    row[colorCh.fieldName] = colorCh.levels![Math.floor(rand() * colorCh.levels!.length)];\n                data.push(row);\n            }\n        }\n    }\n\n    return data;\n}\n\nfunction genAreaDatePairData(n: number, channels: AreaCh[], rand: () => number): Record<string, any>[] {\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < n; i++) {\n        const row: Record<string, any> = {};\n        const startDay = Math.floor(rand() * 365);\n        const duration = Math.floor(10 + rand() * 180);\n        const start = new Date(2023, 0, 1);\n        start.setDate(start.getDate() + startDay);\n        const end = new Date(start);\n        end.setDate(end.getDate() + duration);\n\n        for (const ch of channels) {\n            if (ch.dimType === 'T' && ch.role === 'x')\n                row[ch.fieldName] = start.toISOString().slice(0, 10);\n            else if (ch.dimType === 'T' && ch.role === 'y')\n                row[ch.fieldName] = end.toISOString().slice(0, 10);\n            else if (ch.dimType === 'N')\n                row[ch.fieldName] = ch.levels![i % ch.levels!.length];\n            else if (ch.dimType === 'Q')\n                row[ch.fieldName] = Math.round(rand() * 1000) / 10;\n        }\n        data.push(row);\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Title & tags\n// ---------------------------------------------------------------------------\n\nfunction buildAreaTitle(entry: AreaMatrixEntry): string {\n    const xLabel = entry.x === 'O' && entry.xCard ? `O(${entry.xCard})` : entry.x;\n    const yLabel = entry.y === 'O' && entry.yCard ? `O(${entry.yCard})` : entry.y;\n    const parts = [`${xLabel}×${yLabel}`];\n    if (entry.color) {\n        parts.push(`+color(${entry.color === 'N' ? `N,${entry.colorCard || 3}` : entry.color})`);\n    }\n    if (entry.sparse) parts.push('sparse');\n    if (entry.n === 0) parts.push('grid');\n    else parts.push(`(${entry.n} pts)`);\n    return parts.join(' ');\n}\n\nfunction buildAreaTags(entry: AreaMatrixEntry, dataLen: number): string[] {\n    const tags: string[] = [];\n    const dims = new Set<DimType>([entry.x, entry.y]);\n    if (entry.color) dims.add(entry.color);\n    if (dims.has('Q')) tags.push('quantitative');\n    if (dims.has('T')) tags.push('temporal');\n    if (dims.has('N')) tags.push('nominal');\n    if (dims.has('O')) tags.push('ordinal');\n    if (entry.color) tags.push('color');\n    if (entry.color === 'Q') tags.push('continuous-color');\n    if (entry.sparse) tags.push('sparse');\n    const n = dataLen;\n    if (n <= 25) tags.push('small');\n    else if (n <= 100) tags.push('medium');\n    else { tags.push('large'); if (n > 500) tags.push('scaling'); }\n    if (entry.extraTags) tags.push(...entry.extraTags);\n    return [...new Set(tags)];\n}\n\n// ---------------------------------------------------------------------------\n// Matrix entry → TestCase\n// ---------------------------------------------------------------------------\n\nfunction areaMatrixToTestCase(\n    entry: AreaMatrixEntry, chartType: string, rand: () => number,\n): TestCase {\n    const nSeries = entry.colorCard || 1;\n    const effectiveN = entry.n || (entry.xCard || 5) * (entry.yCard || 5);\n    const nPerSeries = Math.max(1, Math.floor(effectiveN / nSeries));\n    const channels = buildAreaChannels(entry, nPerSeries);\n\n    const isGrid = entry.x === 'O' && entry.y === 'O' && entry.n === 0;\n    const isTT   = entry.x === 'T' && entry.y === 'T';\n\n    let data: Record<string, any>[];\n    if (isGrid) {\n        data = genAreaGridData(channels, rand);\n    } else if (isTT) {\n        data = genAreaDatePairData(entry.n, channels, rand);\n    } else {\n        data = genAreaSeriesData(entry, channels, rand);\n    }\n\n    const typeMap: Record<DimType, Type> = { Q: Type.Number, T: Type.Date, N: Type.String, O: Type.String };\n    const semMap: Record<DimType, string> = { Q: 'Quantity', T: 'Date', N: 'Category', O: 'Category' };\n\n    const fields = channels.map(ch => makeField(ch.fieldName));\n    const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {};\n    const encodingMap: Partial<Record<string, any>> = {};\n\n    for (const ch of channels) {\n        metadata[ch.fieldName] = {\n            type: typeMap[ch.dimType],\n            semanticType: semMap[ch.dimType],\n            levels: ch.levels || [],\n        };\n        encodingMap[ch.role] = makeEncodingItem(ch.fieldName);\n    }\n\n    return {\n        title: buildAreaTitle(entry),\n        description: entry.desc || buildAreaTitle(entry),\n        tags: buildAreaTags(entry, data.length),\n        chartType,\n        data,\n        fields,\n        metadata,\n        encodingMap,\n    };\n}\n\n// ============================================================================\n// Public exports\n// ============================================================================\n\nexport function genAreaTests(): TestCase[] {\n    const rand = seededRandom(910);\n    return [...AREA_MATRIX.map(entry => areaMatrixToTestCase(entry, 'Area Chart', rand)), ...realAreaCases()];\n}\n\nexport function genStreamgraphTests(): TestCase[] {\n    const rand = seededRandom(920);\n    return [...STREAMGRAPH_MATRIX.map(entry => areaMatrixToTestCase(entry, 'Streamgraph', rand)), ...realStreamgraphCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Range Area Chart (band / high–low / area-range) test data.\n *\n * A range area fills a band between a LOWER bound (`y`) and an UPPER bound\n * (`y2`) at each x, showing the extent of a range and how it moves over the\n * continuum (daily min/max temperature, a forecast cone, a 52-week price range).\n * These generators cover the shapes a range area is built for: temporal x with\n * daily low/high, multiple overlapping bands by color, numeric and ordinal x,\n * a band that crosses zero (negatives), a narrowing-then-widening forecast cone,\n * and low → high x cardinality. Every case maps x, y (low) and y2 (high).\n *\n * `genRangeAreaTests`        — the canonical (Vega-Lite) gallery + coverage set.\n * `genEChartsRangeAreaTests` — curated subset for the ECharts wall.\n * `genChartJsRangeAreaTests` — curated subset for the Chart.js wall.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realRangeAreaCases } from './real-world-tests';\nimport { seededRandom, genYears } from './generators';\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * Consecutive calendar days as ISO `YYYY-MM-DD` strings. Unlike the shared\n * `genDates` helper (which spreads n points across ~3 years), a range area that\n * shows a *daily* low/high needs genuinely consecutive days so the band reads as\n * a continuous day-by-day envelope.\n */\nfunction dailyDates(n: number, startYear = 2024, startMonth = 0, startDay = 1): string[] {\n    const out: string[] = [];\n    const start = new Date(Date.UTC(startYear, startMonth, startDay));\n    for (let i = 0; i < n; i++) {\n        const d = new Date(start);\n        d.setUTCDate(start.getUTCDate() + i);\n        out.push(d.toISOString().slice(0, 10));\n    }\n    return out;\n}\n\nexport function genRangeAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(7141);\n\n    // 1. BASIC — daily min/max temperature over 14 days (temporal x, one band).\n    {\n        const dates = dailyDates(14, 2024);\n        const data = dates.map((d, i) => {\n            const mid = 14 + 6 * Math.sin(i / 2) + (rand() - 0.5) * 3;\n            const spread = 4 + rand() * 4;\n            return {\n                Date: d,\n                'Min °C': Math.round((mid - spread) * 10) / 10,\n                'Max °C': Math.round((mid + spread) * 10) / 10,\n            };\n        });\n        tests.push({\n            title: 'Daily temperature range over 14 days (basic)',\n            description: 'A band between the daily low and high temperature — minimum useful range area',\n            tags: ['temporal', 'quantitative', 'range', 'single', 'small', 'gallery'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Date'), makeField('Min °C'), makeField('Max °C')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                'Min °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                'Max °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                y: makeEncodingItem('Min °C'),\n                y2: makeEncodingItem('Max °C'),\n            },\n        });\n    }\n\n    // 2. ADVANCED — two cities' monthly temperature range, overlapping bands by color.\n    {\n        const cities: Array<{ name: string; base: number; amp: number; spread: number }> = [\n            { name: 'Seattle', base: 12, amp: 8, spread: 5 },\n            { name: 'Phoenix', base: 24, amp: 11, spread: 7 },\n        ];\n        const data: any[] = [];\n        for (const c of cities) {\n            MONTHS.forEach((m, i) => {\n                const mid = c.base + c.amp * Math.sin((i - 3) / 12 * 2 * Math.PI) + (rand() - 0.5) * 2;\n                const spread = c.spread + rand() * 2;\n                data.push({\n                    Month: m,\n                    City: c.name,\n                    'Low °C': Math.round((mid - spread) * 10) / 10,\n                    'High °C': Math.round((mid + spread) * 10) / 10,\n                });\n            });\n        }\n        tests.push({\n            title: 'Two cities monthly temperature range + Color',\n            description: 'Overlapping monthly low–high temperature bands for two cities, one band per color',\n            tags: ['ordinal', 'quantitative', 'range', 'color', 'multi', 'gallery'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Low °C'), makeField('High °C'), makeField('City')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Category', levels: MONTHS },\n                'Low °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                'High °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                City: { type: Type.String, semanticType: 'City', levels: cities.map(c => c.name) },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Month'),\n                y: makeEncodingItem('Low °C'),\n                y2: makeEncodingItem('High °C'),\n                color: makeEncodingItem('City'),\n            },\n        });\n    }\n\n    // 3. Numeric x — a regression / prediction confidence band over a numeric dose.\n    {\n        const doses = [0, 20, 40, 60, 80, 100, 120, 140, 160, 180];\n        const data = doses.map((dose) => {\n            const yield_ = 30 + 0.45 * dose - 0.0011 * dose * dose;\n            const ci = 4 + dose * 0.03; // widening uncertainty\n            return {\n                'Fertilizer (kg/ha)': dose,\n                'Yield Low': Math.round((yield_ - ci) * 10) / 10,\n                'Yield High': Math.round((yield_ + ci) * 10) / 10,\n            };\n        });\n        tests.push({\n            title: 'Predicted yield confidence band (numeric x)',\n            description: 'A confidence band around predicted crop yield over a numeric fertilizer dose',\n            tags: ['quantitative', 'numeric-x', 'range', 'single', 'small'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Fertilizer (kg/ha)'), makeField('Yield Low'), makeField('Yield High')],\n            metadata: {\n                'Fertilizer (kg/ha)': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Yield Low': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Yield High': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Fertilizer (kg/ha)'),\n                y: makeEncodingItem('Yield Low'),\n                y2: makeEncodingItem('Yield High'),\n            },\n        });\n    }\n\n    // 4. Ordinal x, low cardinality — quarterly revenue low/high estimate, 4 quarters.\n    {\n        const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const lows = [82, 95, 88, 110];\n        const highs = [104, 121, 119, 145];\n        const data = quarters.map((q, i) => ({\n            Quarter: q,\n            'Low Estimate': lows[i],\n            'High Estimate': highs[i],\n        }));\n        tests.push({\n            title: 'Quarterly revenue range (ordinal x, low cardinality)',\n            description: 'Low vs high revenue estimate across four quarters — lowest-cardinality range area',\n            tags: ['ordinal', 'quantitative', 'range', 'single', 'small'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Low Estimate'), makeField('High Estimate')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n                'Low Estimate': { type: Type.Number, semanticType: 'Price', levels: [] },\n                'High Estimate': { type: Type.Number, semanticType: 'Price', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Quarter'),\n                y: makeEncodingItem('Low Estimate'),\n                y2: makeEncodingItem('High Estimate'),\n            },\n        });\n    }\n\n    // 5. Zero-crossing — temperature-anomaly band that spans negatives, by year.\n    {\n        const years = genYears(12, 2012);\n        const data = years.map((yr, i) => {\n            const center = -0.6 + i * 0.12 + (rand() - 0.5) * 0.15;\n            const spread = 0.5 + rand() * 0.3;\n            return {\n                Year: yr,\n                'Anomaly Low': Math.round((center - spread) * 100) / 100,\n                'Anomaly High': Math.round((center + spread) * 100) / 100,\n            };\n        });\n        tests.push({\n            title: 'Temperature anomaly band crossing zero (negatives)',\n            description: 'A low–high anomaly band that starts below zero and rises through it — diverging values',\n            tags: ['temporal', 'quantitative', 'range', 'negative', 'single', 'medium'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Year'), makeField('Anomaly Low'), makeField('Anomaly High')],\n            metadata: {\n                Year: { type: Type.Number, semanticType: 'Year', levels: years },\n                'Anomaly Low': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                'Anomaly High': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Year'),\n                y: makeEncodingItem('Anomaly Low'),\n                y2: makeEncodingItem('Anomaly High'),\n            },\n        });\n    }\n\n    // 6. Narrowing-then-widening — a forecast cone over a numeric horizon.\n    {\n        const steps = Array.from({ length: 13 }, (_, i) => i); // 0..12 weeks ahead\n        const data = steps.map((s) => {\n            const center = 100 + s * 2.4;\n            // Band is tight in the near term, narrows around the calibration\n            // point, then fans out — narrow → narrower → wide.\n            const width = Math.abs(s - 4) * 1.6 + 2;\n            return {\n                'Weeks Ahead': s,\n                'Forecast Low': Math.round((center - width) * 10) / 10,\n                'Forecast High': Math.round((center + width) * 10) / 10,\n            };\n        });\n        tests.push({\n            title: 'Forecast cone: narrowing then widening band',\n            description: 'A forecast band that narrows to a calibration point then fans out — varying band width',\n            tags: ['quantitative', 'numeric-x', 'range', 'single', 'forecast', 'medium'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Weeks Ahead'), makeField('Forecast Low'), makeField('Forecast High')],\n            metadata: {\n                'Weeks Ahead': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Forecast Low': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                'Forecast High': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Weeks Ahead'),\n                y: makeEncodingItem('Forecast Low'),\n                y2: makeEncodingItem('Forecast High'),\n            },\n        });\n    }\n\n    // 7. High cardinality temporal — a 40-day price trading range (52-week style).\n    {\n        const dates = dailyDates(40, 2023);\n        let price = 180;\n        const data = dates.map((d) => {\n            price += (rand() - 0.48) * 6;\n            const intraday = 3 + rand() * 6;\n            return {\n                Date: d,\n                'Day Low': Math.round((price - intraday) * 100) / 100,\n                'Day High': Math.round((price + intraday) * 100) / 100,\n            };\n        });\n        tests.push({\n            title: 'Daily trading range over 40 days (high cardinality)',\n            description: 'A dense daily low–high price band over 40 trading days — high x cardinality',\n            tags: ['temporal', 'quantitative', 'range', 'single', 'large', 'dense'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Date'), makeField('Day Low'), makeField('Day High')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                'Day Low': { type: Type.Number, semanticType: 'Price', levels: [] },\n                'Day High': { type: Type.Number, semanticType: 'Price', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                y: makeEncodingItem('Day Low'),\n                y2: makeEncodingItem('Day High'),\n            },\n        });\n    }\n\n    // 8. Faceted — daily temperature range split into small multiples by city.\n    {\n        const cities = ['Oslo', 'Cairo', 'Tokyo'];\n        const bases: Record<string, number> = { Oslo: 4, Cairo: 26, Tokyo: 16 };\n        const dates = dailyDates(10, 2024);\n        const data: any[] = [];\n        for (const city of cities) {\n            dates.forEach((d, i) => {\n                const mid = bases[city] + 4 * Math.sin(i / 2) + (rand() - 0.5) * 2;\n                const spread = 3 + rand() * 3;\n                data.push({\n                    Date: d,\n                    City: city,\n                    'Min °C': Math.round((mid - spread) * 10) / 10,\n                    'Max °C': Math.round((mid + spread) * 10) / 10,\n                });\n            });\n        }\n        tests.push({\n            title: 'Daily temperature range, faceted by city',\n            description: 'Daily low–high temperature bands as small multiples, one panel per city (column facet)',\n            tags: ['temporal', 'quantitative', 'range', 'facet', 'medium'],\n            chartType: 'Range Area Chart',\n            data,\n            fields: [makeField('Date'), makeField('Min °C'), makeField('Max °C'), makeField('City')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                'Min °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                'Max °C': { type: Type.Number, semanticType: 'Temperature', levels: [] },\n                City: { type: Type.String, semanticType: 'City', levels: cities },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                y: makeEncodingItem('Min °C'),\n                y2: makeEncodingItem('Max °C'),\n                column: makeEncodingItem('City'),\n            },\n        });\n    }\n\n    return [...tests, ...realRangeAreaCases()];\n}\n\n/**\n * ECharts wall variants — the cases that translate cleanly to the stacked\n * transparent-base + translucent-delta band on a category x-axis (basic single\n * band, two overlapping color bands, a zero-crossing band).\n */\nexport function genEChartsRangeAreaTests(): TestCase[] {\n    const all = genRangeAreaTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Daily temperature range over 14 days (basic)'),\n        pick('Two cities monthly temperature range + Color'),\n        pick('Temperature anomaly band crossing zero (negatives)'),\n        pick('Quarterly revenue range (ordinal x, low cardinality)'),\n    ];\n}\n\n/**\n * Chart.js wall variants — bands built from a lower + upper line dataset pair\n * (single band, two overlapping color bands, a numeric-x confidence band, an\n * ordinal-x quarterly band).\n */\nexport function genChartJsRangeAreaTests(): TestCase[] {\n    const all = genRangeAreaTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('Daily temperature range over 14 days (basic)'),\n        pick('Two cities monthly temperature range + Color'),\n        pick('Predicted yield confidence band (numeric x)'),\n        pick('Quarterly revenue range (ordinal x, low cardinality)'),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECDF Plot (Empirical Cumulative Distribution Function) test data.\n *\n * An ECDF plots each value of a quantitative measure against the proportion of\n * observations ≤ that value — a non-decreasing step rising from ~0 to 1.0. It is\n * the cumulative cousin of the histogram/density: the read is \"what fraction of\n * the data is below this value\", and groups can be compared by how far their\n * curves shift left/right. These generators cover the shapes an ECDF is built\n * for: a single clean S-curve, multiple shifted groups by color, values crossing\n * zero (negatives), small n (chunky steps) vs large n (smooth), a skewed\n * long-right-tail distribution, and a faceted case. Every case maps `x` (the\n * measure); grouped cases add `color`; the faceted case adds `column`.\n *\n * `genEcdfTests`        — the canonical (Vega-Lite) gallery + coverage set.\n * `genEChartsEcdfTests` — curated subset for the ECharts wall.\n * `genChartJsEcdfTests` — curated subset for the Chart.js wall.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realEcdfCases } from './real-world-tests';\nimport { seededRandom } from './generators';\n\n/** Standard-normal sample via Box–Muller. */\nfunction normal(rand: () => number, mean: number, sd: number): number {\n    const u1 = Math.max(rand(), 1e-9);\n    const u2 = rand();\n    return mean + sd * Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n}\n\n/** Log-normal sample (long right tail). */\nfunction lognormal(rand: () => number, mu: number, sigma: number): number {\n    return Math.exp(normal(rand, mu, sigma));\n}\n\nconst round = (v: number, dp = 0) => {\n    const f = Math.pow(10, dp);\n    return Math.round(v * f) / f;\n};\n\nexport function genEcdfTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(5309);\n\n    // 1. BASIC — API response times, ~120 samples, one clean S-curve.\n    {\n        const data = Array.from({ length: 120 }, () => ({\n            'Response Time (ms)': Math.max(8, round(normal(rand, 240, 55))),\n        }));\n        tests.push({\n            title: 'API response times (basic)',\n            description: 'Empirical CDF of ~120 response times — the minimum useful ECDF (one S-curve)',\n            tags: ['quantitative', 'single', 'medium', 'gallery'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Response Time (ms)')],\n            metadata: {\n                'Response Time (ms)': { type: Type.Number, semanticType: 'Duration', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Response Time (ms)') },\n        });\n    }\n\n    // 2. ADVANCED — control vs treatment test scores; treatment's curve sits to\n    //    the RIGHT (larger values), the canonical two-group ECDF comparison.\n    {\n        const groups: Array<{ name: string; mean: number; sd: number }> = [\n            { name: 'Control', mean: 62, sd: 12 },\n            { name: 'Treatment', mean: 74, sd: 11 },\n        ];\n        const data: any[] = [];\n        for (const g of groups) {\n            for (let i = 0; i < 130; i++) {\n                data.push({\n                    Score: Math.max(0, Math.min(100, round(normal(rand, g.mean, g.sd)))),\n                    Group: g.name,\n                });\n            }\n        }\n        tests.push({\n            title: 'Test scores: control vs treatment + Color',\n            description: 'Two ECDF curves by group — the treatment curve is right-shifted (higher scores)',\n            tags: ['quantitative', 'color', 'multi', 'medium', 'gallery'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Score'), makeField('Group')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: groups.map(g => g.name) },\n            },\n            encodingMap: { x: makeEncodingItem('Score'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Negatives — standardized residuals centered at 0, spanning negatives.\n    {\n        const data = Array.from({ length: 100 }, () => ({\n            'Std residual': round(normal(rand, 0, 1), 2),\n        }));\n        tests.push({\n            title: 'Standardized residuals crossing zero (negatives)',\n            description: 'ECDF of values centered on zero — the curve passes ~0.5 at x = 0',\n            tags: ['quantitative', 'negative', 'single', 'medium'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Std residual')],\n            metadata: {\n                'Std residual': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Std residual') },\n        });\n    }\n\n    // 4. Small n — only 15 reaction times, so the steps are visibly chunky.\n    {\n        const data = Array.from({ length: 15 }, () => ({\n            'Reaction (s)': round(0.18 + lognormal(rand, -1.4, 0.4), 3),\n        }));\n        tests.push({\n            title: 'Reaction times, small sample (n = 15)',\n            description: 'A 15-point ECDF — few observations make each 1/n step clearly visible',\n            tags: ['quantitative', 'single', 'small', 'low-cardinality'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Reaction (s)')],\n            metadata: {\n                'Reaction (s)': { type: Type.Number, semanticType: 'Duration', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Reaction (s)') },\n        });\n    }\n\n    // 5. Large n — 600 measurements, a smooth near-continuous S-curve.\n    {\n        const data = Array.from({ length: 600 }, () => ({\n            'Part width (mm)': round(normal(rand, 50, 2.5), 2),\n        }));\n        tests.push({\n            title: 'Manufactured part widths, large sample (n = 600)',\n            description: 'A dense 600-point ECDF — the steps blend into a smooth S-curve',\n            tags: ['quantitative', 'single', 'large', 'dense'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Part width (mm)')],\n            metadata: {\n                'Part width (mm)': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Part width (mm)') },\n        });\n    }\n\n    // 6. Skewed — household income with a long right tail.\n    {\n        const data = Array.from({ length: 150 }, () => ({\n            'Income ($k)': round(20 + lognormal(rand, 3.3, 0.7), 1),\n        }));\n        tests.push({\n            title: 'Household income (skewed, long right tail)',\n            description: 'ECDF of a right-skewed measure — the curve rises steeply then flattens into the tail',\n            tags: ['quantitative', 'single', 'skewed', 'medium'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Income ($k)')],\n            metadata: {\n                'Income ($k)': { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Income ($k)') },\n        });\n    }\n\n    // 7. Three groups — request latency across three regions, all shifted.\n    {\n        const regions: Array<{ name: string; mu: number; sigma: number }> = [\n            { name: 'us-east', mu: 3.9, sigma: 0.35 },\n            { name: 'eu-west', mu: 4.2, sigma: 0.4 },\n            { name: 'ap-south', mu: 4.6, sigma: 0.5 },\n        ];\n        const data: any[] = [];\n        for (const r of regions) {\n            for (let i = 0; i < 90; i++) {\n                data.push({\n                    'Latency (ms)': round(lognormal(rand, r.mu, r.sigma)),\n                    Region: r.name,\n                });\n            }\n        }\n        tests.push({\n            title: 'Request latency across 3 regions + Color',\n            description: 'Three ECDF curves — progressively right-shifted latency distributions by region',\n            tags: ['quantitative', 'color', 'multi', 'skewed', 'medium'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Latency (ms)'), makeField('Region')],\n            metadata: {\n                'Latency (ms)': { type: Type.Number, semanticType: 'Duration', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions.map(r => r.name) },\n            },\n            encodingMap: { x: makeEncodingItem('Latency (ms)'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 8. Faceted — exam scores as small multiples, one panel per subject.\n    {\n        const subjects: Array<{ name: string; mean: number; sd: number }> = [\n            { name: 'Math', mean: 68, sd: 14 },\n            { name: 'Reading', mean: 75, sd: 10 },\n            { name: 'Science', mean: 71, sd: 12 },\n        ];\n        const data: any[] = [];\n        for (const s of subjects) {\n            for (let i = 0; i < 90; i++) {\n                data.push({\n                    Score: Math.max(0, Math.min(100, round(normal(rand, s.mean, s.sd)))),\n                    Subject: s.name,\n                });\n            }\n        }\n        tests.push({\n            title: 'Exam scores faceted by subject (column)',\n            description: 'One ECDF per subject as small multiples — a column-faceted distribution comparison',\n            tags: ['quantitative', 'facet', 'multi', 'medium'],\n            chartType: 'ECDF Plot',\n            data,\n            fields: [makeField('Score'), makeField('Subject')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Subject: { type: Type.String, semanticType: 'Category', levels: subjects.map(s => s.name) },\n            },\n            encodingMap: { x: makeEncodingItem('Score'), column: makeEncodingItem('Subject') },\n        });\n    }\n\n    return [...tests, ...realEcdfCases()];\n}\n\n/**\n * ECharts wall variants — the cases that read cleanly as one stepped line per\n * group on a value x-axis (basic single curve, two/three shifted color groups,\n * a small-n chunky curve, and the negatives case).\n */\nexport function genEChartsEcdfTests(): TestCase[] {\n    const all = genEcdfTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('API response times (basic)'),\n        pick('Test scores: control vs treatment + Color'),\n        pick('Request latency across 3 regions + Color'),\n        pick('Standardized residuals crossing zero (negatives)'),\n        pick('Reaction times, small sample (n = 15)'),\n    ];\n}\n\n/**\n * Chart.js wall variants — one stepped line dataset per group on a linear\n * x-axis (basic single curve, two shifted color groups, a skewed curve, and a\n * smooth large-n curve).\n */\nexport function genChartJsEcdfTests(): TestCase[] {\n    const all = genEcdfTests();\n    const pick = (title: string) => all.find(t => t.title === title)!;\n    return [\n        pick('API response times (basic)'),\n        pick('Test scores: control vs treatment + Color'),\n        pick('Household income (skewed, long right tail)'),\n        pick('Manufactured part widths, large sample (n = 600)'),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { realLollipopCases, realPieCases, realDonutCases, realRoseCases, realRadarCases, realWaterfallCases, realCandlestickCases, realHeatmapCases, realPyramidCases, realBarTableCases, realRangedDotCases } from './real-world-tests';\nimport { seededRandom, genDates, genMonths, genCategories, genRandomNames } from './generators';\n\n// ------ Heatmap ------\nexport function genHeatmapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(500);\n\n    // 1. Small nominal × nominal\n    {\n        const xs = genCategories('Category', 5);\n        const ys = genMonths(6);\n        const data: any[] = [];\n        for (const x of xs) for (const y of ys) {\n            data.push({ Category: x, Month: y, Value: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Nominal (small, 5×6)',\n            description: '5 categories × 6 months — basic heatmap',\n            tags: ['nominal', 'ordinal', 'color', 'small'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Category'), makeField('Month'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: xs },\n                Month: { type: Type.String, semanticType: 'Month', levels: ys },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Month'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Quantitative × quantitative (tests applyDynamicMarkResizing with nominalThreshold)\n    {\n        const xs = Array.from({ length: 10 }, (_, i) => i * 10);\n        const ys = Array.from({ length: 8 }, (_, i) => i * 5);\n        const data: any[] = [];\n        for (const x of xs) for (const y of ys) {\n            data.push({ X: x, Y: y, Density: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Quant × Quant (small cardinality → nominal)',\n            description: '10×8 grid — should convert to nominal (≤20 threshold)',\n            tags: ['quantitative', 'small', 'dtype-conversion'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Density')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: xs },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: ys },\n                Density: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Density') },\n        });\n    }\n\n    // 3. Large quantitative (should resize rect, not convert)\n    {\n        const data: any[] = [];\n        for (let x = 0; x < 50; x++) for (let y = 0; y < 30; y++) {\n            data.push({ Hour: x, Day: y, Activity: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Quant × Quant (large cardinality → resize)',\n            description: '50×30 grid — should resize rect width/height, not convert to nominal',\n            tags: ['quantitative', 'large', 'dtype-conversion'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Hour'), makeField('Day'), makeField('Activity')],\n            metadata: {\n                Hour: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Day: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Activity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Hour'), y: makeEncodingItem('Day'), color: makeEncodingItem('Activity') },\n        });\n    }\n\n    // 4. Temporal × nominal\n    {\n        const months = genMonths(12);\n        const products = genCategories('Product', 6);\n        const data: any[] = [];\n        for (const m of months) for (const p of products) {\n            data.push({ Month: m, Product: p, Sales: Math.round(rand() * 1000) });\n        }\n        tests.push({\n            title: 'Ordinal × Nominal (12×6)',\n            description: '12 months × 6 products',\n            tags: ['ordinal', 'nominal', 'color', 'medium'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Month'), makeField('Product'), makeField('Sales')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Product'), color: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 5. Large temporal × nominal (80 dates × 5 categories)\n    {\n        const dates = genDates(80, 2016);\n        const cats = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const d of dates) for (const c of cats) {\n            data.push({ Date: d, Category: c, Intensity: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Temporal × Nominal (large, 80×5)',\n            description: '80 dates × 5 categories — tests large temporal heatmap with rect sizing',\n            tags: ['temporal', 'nominal', 'color', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Date'), makeField('Category'), makeField('Intensity')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Intensity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Category'), color: makeEncodingItem('Intensity') },\n        });\n    }\n\n    // 6. Nominal × large temporal (swapped, 5 × 80 dates on y)\n    {\n        const dates = genDates(80, 2016);\n        const cats = genCategories('Product', 5);\n        const data: any[] = [];\n        for (const c of cats) for (const d of dates) {\n            data.push({ Product: c, Date: d, Score: Math.round(rand() * 100) });\n        }\n        tests.push({\n            title: 'Nominal × Temporal (large, 5×80)',\n            description: '5 products × 80 dates on y-axis — large temporal on y',\n            tags: ['nominal', 'temporal', 'color', 'very-large', 'swap-axis'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Product'), makeField('Date'), makeField('Score')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: cats },\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Date'), color: makeEncodingItem('Score') },\n        });\n    }\n\n    // 7. Large temporal × large temporal (60×40 date grid)\n    {\n        const xDates = genDates(60, 2018);\n        const yDates = genDates(40, 2020);\n        const data: any[] = [];\n        for (const xd of xDates) for (const yd of yDates) {\n            data.push({ StartDate: xd, EndDate: yd, Correlation: Math.round(-100 + rand() * 200) / 100 });\n        }\n        tests.push({\n            title: 'Temporal × Temporal (large, 60×40)',\n            description: '60×40 date grid — both axes temporal, tests rect sizing on both',\n            tags: ['temporal', 'color', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('StartDate'), makeField('EndDate'), makeField('Correlation')],\n            metadata: {\n                StartDate: { type: Type.Date, semanticType: 'Date', levels: [] },\n                EndDate: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Correlation: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('StartDate'), y: makeEncodingItem('EndDate'), color: makeEncodingItem('Correlation') },\n        });\n    }\n\n    // 8. Asymmetric discrete: 5 categories on Y × 80 categories on X (400 cells)\n    {\n        const xCats = Array.from({ length: 80 }, (_, i) => `C${String(i + 1).padStart(2, '0')}`);\n        const yCats = genCategories('Category', 5);\n        const data: any[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Category: x, Group: y, Value: Math.round(rand() * 100) });\n        tests.push({\n            title: 'Nominal × Nominal (asymmetric wide, 80×5)',\n            description: '80 categories on X × 5 on Y (400 cells) — tests wide asymmetric discrete axes',\n            tags: ['nominal', 'color', 'asymmetric', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Category'), makeField('Group'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Group'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    // 9. Asymmetric discrete: 80 categories on Y × 5 categories on X (400 cells)\n    {\n        const xCats = genCategories('Category', 5);\n        const yCats = Array.from({ length: 80 }, (_, i) => `C${String(i + 1).padStart(2, '0')}`);\n        const data: any[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Group: x, Category: y, Value: Math.round(rand() * 100) });\n        tests.push({\n            title: 'Nominal × Nominal (asymmetric tall, 5×80)',\n            description: '5 categories on X × 80 on Y (400 cells) — tests tall asymmetric discrete axes',\n            tags: ['nominal', 'color', 'asymmetric', 'very-large'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Group'), makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Category'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    return [...tests, ...realHeatmapCases()];\n}\n\n// ------ Pie Chart ------\nexport function genPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(800);\n\n    // 1. Small\n    {\n        const cats = genCategories('Category', 4);\n        const data = cats.map(c => ({ Category: c, Value: Math.round(100 + rand() * 500) }));\n        tests.push({\n            title: 'Pie (small, 4 slices)',\n            description: '4 categories',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Value'), color: makeEncodingItem('Category') },\n        });\n    }\n\n    // 2. Medium\n    {\n        const cats = genCategories('Product', 10);\n        const data = cats.map(c => ({ Product: c, Revenue: Math.round(1000 + rand() * 9000) }));\n        tests.push({\n            title: 'Pie (medium, 10 slices)',\n            description: '10 products — tests color scheme at boundary',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Product'), makeField('Revenue')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: cats },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Revenue'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 3. Large — 25 slices (text overlay should be disabled)\n    {\n        const cats = genCategories('Region', 25);\n        const data = cats.map(c => ({ Region: c, Sales: Math.round(500 + rand() * 5000) }));\n        tests.push({\n            title: 'Pie (large, 25 slices)',\n            description: '25 regions — too many slices for text overlay, legend + tooltip only',\n            tags: ['nominal', 'quantitative', 'large', 'stress'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Region'), makeField('Sales')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: cats },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 4. Skewed — one dominant slice + several tiny ones\n    {\n        const cats = ['Dominant', 'Small-A', 'Small-B', 'Small-C', 'Tiny-1', 'Tiny-2'];\n        const vals = [5000, 200, 180, 150, 30, 20];\n        const data = cats.map((c, i) => ({ Category: c, Value: vals[i] }));\n        tests.push({\n            title: 'Pie (skewed, 6 slices)',\n            description: 'One dominant slice ~90%, tests circumference pressure with effective bar count',\n            tags: ['nominal', 'quantitative', 'skewed'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Value'), color: makeEncodingItem('Category') },\n        });\n    }\n\n    return [...tests, ...realPieCases()];\n}\n\nexport function genDonutTests(): TestCase[] {\n    return [\n        ...genPieTests().filter(t => !(t.tags ?? []).includes('real')).map(test => ({\n            ...test,\n            title: test.title.replace('Pie', 'Donut'),\n            description: test.description.replace('Pie', 'Donut'),\n            chartType: 'Donut Chart',\n            chartProperties: { ...test.chartProperties, innerRadius: 50 },\n        })),\n        ...realDonutCases(),\n    ];\n}\n\n// ------ Ranged Dot Plot ------\nexport function genRangedDotPlotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(850);\n\n    {\n        const cats = genCategories('Country', 8);\n        const data: any[] = [];\n        for (const c of cats) {\n            data.push({ Country: c, Value: Math.round(30 + rand() * 40), Metric: 'Min' });\n            data.push({ Country: c, Value: Math.round(60 + rand() * 40), Metric: 'Max' });\n        }\n        tests.push({\n            title: 'Ranged Dot Plot (8 items)',\n            description: '8 countries with min/max range',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Ranged Dot Plot',\n            data,\n            fields: [makeField('Value'), makeField('Country'), makeField('Metric')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Min', 'Max'] },\n            },\n            encodingMap: { x: makeEncodingItem('Value'), y: makeEncodingItem('Country'), color: makeEncodingItem('Metric') },\n        });\n    }\n\n    return [...tests, ...realRangedDotCases()];\n}\n\n// ------ Lollipop Chart ------\nexport function genLollipopTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(930);\n\n    // 1. Nominal × Quant (vertical lollipop)\n    {\n        const countries = ['USA', 'China', 'Japan', 'Germany', 'UK', 'France', 'India', 'Brazil'];\n        const data = countries.map(c => ({ Country: c, GDP: Math.round(500 + rand() * 20000) }));\n        tests.push({\n            title: 'Nominal × Quant (vertical lollipop)',\n            description: '8 countries — rule from 0 to value + dot',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Country'), makeField('GDP')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                GDP: { type: Type.Number, semanticType: 'GDP', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Country'), y: makeEncodingItem('GDP') },\n        });\n    }\n\n    // 2. Nominal × Quant + Color\n    {\n        const items = genCategories('Product', 10);\n        const data = items.map(p => ({\n            Product: p,\n            Sales: Math.round(100 + rand() * 900),\n            Region: rand() > 0.5 ? 'East' : 'West',\n        }));\n        tests.push({\n            title: 'Nominal × Quant + Color (10 items)',\n            description: 'Products with color-coded region',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Region')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: items },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['East', 'West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 3. Horizontal lollipop (quant on x, nominal on y)\n    {\n        const departments = ['Engineering', 'Marketing', 'Sales', 'Support', 'HR', 'Finance'];\n        const data = departments.map(d => ({ Department: d, Score: Math.round(40 + rand() * 60) }));\n        tests.push({\n            title: 'Quant × Nominal (horizontal lollipop)',\n            description: '6 departments — horizontal layout',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Score'), makeField('Department')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: departments },\n            },\n            encodingMap: { x: makeEncodingItem('Score'), y: makeEncodingItem('Department') },\n        });\n    }\n\n    // 4. Color + Column facet\n    {\n        const regions = ['North', 'South'];\n        const categories = genCategories('Item', 6);\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const c of categories) {\n                data.push({\n                    Item: c,\n                    Revenue: Math.round(200 + rand() * 800),\n                    Region: r,\n                    Tier: rand() > 0.5 ? 'Premium' : 'Standard',\n                });\n            }\n        }\n        tests.push({\n            title: 'Color + Column Facet',\n            description: '6 items × 2 regions faceted, color by tier',\n            tags: ['nominal', 'quantitative', 'color', 'facet', 'medium'],\n            chartType: 'Lollipop Chart',\n            data,\n            fields: [makeField('Item'), makeField('Revenue'), makeField('Region'), makeField('Tier')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Tier: { type: Type.String, semanticType: 'Category', levels: ['Premium', 'Standard'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Item'),\n                y: makeEncodingItem('Revenue'),\n                color: makeEncodingItem('Tier'),\n                column: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    return [...tests, ...realLollipopCases()];\n}\n\n// ------ Waterfall Chart ------\nexport function genWaterfallTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple P&L waterfall — no explicit type column (auto-inferred)\n    {\n        const data = [\n            { Category: 'Revenue',       Amount: 1000 },\n            { Category: 'COGS',          Amount: -400 },\n            { Category: 'Gross Profit',  Amount: -150 },\n            { Category: 'Operating Exp', Amount: -200 },\n            { Category: 'Tax',           Amount: -80 },\n            { Category: 'Net Income',    Amount: 170 },\n        ];\n        tests.push({\n            title: 'Simple P&L (6 steps, auto type)',\n            description: 'Auto-detects first=start, last=end, rest=delta',\n            tags: ['nominal', 'small'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Category'), makeField('Amount')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Category) },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Amount') },\n        });\n    }\n\n    // 2. With explicit Type column (start/delta/end)\n    {\n        const data = [\n            { Step: 'Starting Balance', Value:  5000, Type: 'start' },\n            { Step: 'Sales',            Value:  2200, Type: 'delta' },\n            { Step: 'Returns',          Value:  -350, Type: 'delta' },\n            { Step: 'Payroll',          Value: -1800, Type: 'delta' },\n            { Step: 'Rent',             Value:  -600, Type: 'delta' },\n            { Step: 'Marketing',        Value:  -400, Type: 'delta' },\n            { Step: 'Ending Balance',   Value:  4050, Type: 'end' },\n        ];\n        tests.push({\n            title: 'Explicit Type Column (7 steps)',\n            description: 'User-provided start/delta/end type field',\n            tags: ['nominal', 'color', 'small'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Step'), makeField('Value'), makeField('Type')],\n            metadata: {\n                Step: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Step) },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['start', 'delta', 'end'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Step'),\n                y: makeEncodingItem('Value'),\n                color: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    // 3. Budget variance (all deltas — no start/end)\n    {\n        const data = [\n            { Department: 'Engineering',  Variance: 120 },\n            { Department: 'Sales',        Variance: -45 },\n            { Department: 'Marketing',    Variance: -80 },\n            { Department: 'Operations',   Variance: 35 },\n            { Department: 'HR',           Variance: -20 },\n            { Department: 'Finance',      Variance: 15 },\n            { Department: 'Support',      Variance: -30 },\n        ];\n        tests.push({\n            title: 'Budget Variance (8 depts)',\n            description: 'Mixed positive/negative deltas with auto start/end',\n            tags: ['nominal', 'medium'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Department'), makeField('Variance')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Department) },\n                Variance: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Variance') },\n        });\n    }\n\n    // 4. Larger waterfall — monthly cash flow\n    {\n        const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n        const amounts = [500, 200, -150, 300, -100, -250, 400, 150, -300, 200, -50, 100];\n        const data = [\n            { Month: 'Opening', Amount: 10000, Type: 'start' },\n            ...months.map((m, i) => ({ Month: m, Amount: amounts[i], Type: 'delta' })),\n            { Month: 'Closing', Amount: 11000, Type: 'end' },\n        ];\n        tests.push({\n            title: 'Monthly Cash Flow (14 steps)',\n            description: '12 months with opening & closing balances',\n            tags: ['nominal', 'color', 'medium'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Month'), makeField('Amount'), makeField('Type')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Month) },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['start', 'delta', 'end'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Month'),\n                y: makeEncodingItem('Amount'),\n                color: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    // 5. Pure deltas with no explicit total row — totals override demo.\n    // Every row is a genuine delta; the last value (200) is NOT the cumulative of\n    // the prior rows (300 + 150 − 100 = 350). With totals:'both' the first and last\n    // bars are FORCED to the total interpretation: each is drawn as a total bar that\n    // touches down to the running total (start → 0..300, end → 0..350), never dropped.\n    {\n        const data = [\n            { Quarter: 'Q1', Change:  300 },\n            { Quarter: 'Q2', Change:  150 },\n            { Quarter: 'Q3', Change: -100 },\n            { Quarter: 'Q4', Change:  200 },\n        ];\n        tests.push({\n            title: 'Pure Deltas, Forced Totals (4 steps)',\n            description: 'No explicit total row — totals:both forces first/last to touch-down total bars',\n            tags: ['nominal', 'small'],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Change')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Quarter) },\n                Change: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Change') },\n        });\n    }\n\n    return [...tests, ...realWaterfallCases()];\n}\n\n// ------ Bar Table ------\nexport function genBarTableTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Mirrors the Chinese-BI screenshot: top categories contributing to total GMV.\n    {\n        const data = [\n            { Category: '电子产品',     Contribution: 331207.65 },\n            { Category: '自行车',       Contribution: 89774.50 },\n            { Category: '香水和古龙水', Contribution: 57668.30 },\n            { Category: '服装',         Contribution: 48210.10 },\n            { Category: '家具',         Contribution: 32104.55 },\n            { Category: '玩具',         Contribution: 20157.80 },\n            { Category: '其他',         Contribution: 12998.40 },\n        ];\n        tests.push({\n            title: 'GMV Contribution (7 categories)',\n            description: 'Ranked contribution table — bar + value + % share, like Chinese BI dashboards',\n            tags: ['nominal', 'small', 'gradient'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Category'), makeField('Contribution')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Category) },\n                Contribution: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Category'), x: makeEncodingItem('Contribution') },\n        });\n    }\n\n    // 2. Sales by product — larger N, English labels\n    {\n        const products = genCategories('Product', 12);\n        const rand = seededRandom(2024);\n        const data = products.map(p => ({ Product: p, Sales: Math.round(rand() * 9000 + 500) }));\n        tests.push({\n            title: 'Sales by Product (12 rows)',\n            description: 'Medium N — verify row density / band sizing',\n            tags: ['nominal', 'medium', 'gradient'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Product'), x: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 3. With color grouping override (region) instead of gradient-by-value\n    {\n        const regions = ['North', 'South', 'East', 'West'];\n        const products = genCategories('SKU', 8);\n        const rand = seededRandom(77);\n        const data = products.map((p, i) => ({\n            SKU: p,\n            Revenue: Math.round(rand() * 5000 + 1000),\n            Region: regions[i % regions.length],\n        }));\n        tests.push({\n            title: 'Revenue by SKU, colored by Region',\n            description: 'color channel overrides default gradient — categorical hue per row',\n            tags: ['nominal', 'color', 'small'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('SKU'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                SKU: { type: Type.String, semanticType: 'Category', levels: products },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: {\n                y: makeEncodingItem('SKU'),\n                x: makeEncodingItem('Revenue'),\n                color: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // 4. Non-additive measure — % column should be auto-suppressed.\n    //    Field name \"Avg Rating\" + values that don't represent a share-of-whole.\n    {\n        const data = [\n            { Product: 'Alpha',   'Avg Rating': 4.7 },\n            { Product: 'Beta',    'Avg Rating': 4.4 },\n            { Product: 'Gamma',   'Avg Rating': 4.1 },\n            { Product: 'Delta',   'Avg Rating': 3.9 },\n            { Product: 'Epsilon', 'Avg Rating': 3.6 },\n            { Product: 'Zeta',    'Avg Rating': 3.2 },\n        ];\n        tests.push({\n            title: 'Avg Rating (% auto-hidden)',\n            description: 'Score is intensive (aggRole≠additive) → template auto-suppresses the % column',\n            tags: ['nominal', 'small', 'score'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Product'), makeField('Avg Rating')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Product) },\n                'Avg Rating': { type: Type.Number, semanticType: 'Score', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Product'), x: makeEncodingItem('Avg Rating') },\n        });\n    }\n\n    // 5. Mixed-sign values (budget variance) — % auto-suppressed because\n    //    \"share of a whole\" is ill-defined when signs mix.\n    //    Profit semantic type → diverging palette anchored at 0.\n    {\n        const data = [\n            { Department: 'Engineering', Variance: 120 },\n            { Department: 'Sales',       Variance: -45 },\n            { Department: 'Marketing',   Variance: -80 },\n            { Department: 'Operations',  Variance: 35 },\n            { Department: 'HR',          Variance: -20 },\n            { Department: 'Finance',     Variance: 15 },\n        ];\n        tests.push({\n            title: 'Budget Variance (mixed signs → diverging palette)',\n            description: 'Profit (signed-additive, diverging:conditional) → palette anchored at 0; % auto-hidden',\n            tags: ['nominal', 'small', 'diverging', 'mixed-sign'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Department'), makeField('Variance')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Department) },\n                Variance: { type: Type.Number, semanticType: 'Profit', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Department'), x: makeEncodingItem('Variance') },\n        });\n    }\n\n    // 6. x is already a Percentage — values shown as-is (0.92, 0.87, …).\n    //    No reformatting unless the framework explicitly resolves a\n    //    format (it only does so when intrinsicDomain disambiguates 0–1\n    //    vs 0–100). The redundant % column is still auto-hidden.\n    {\n        const data = [\n            { Team: 'Alpha',   completion_rate: 0.92 },\n            { Team: 'Beta',    completion_rate: 0.87 },\n            { Team: 'Gamma',   completion_rate: 0.78 },\n            { Team: 'Delta',   completion_rate: 0.65 },\n            { Team: 'Epsilon', completion_rate: 0.54 },\n        ];\n        tests.push({\n            title: 'Completion Rate (raw 0–1 values shown as-is)',\n            description: 'Percentage without intrinsicDomain → raw values preserved; % column auto-hidden (redundant)',\n            tags: ['nominal', 'small', 'percentage'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Team'), makeField('completion_rate')],\n            metadata: {\n                Team: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Team) },\n                completion_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Team'), x: makeEncodingItem('completion_rate') },\n        });\n    }\n\n    // ── Stress tests ────────────────────────────────────────────────\n\n    // 7. Many categories (50 unique rows) — triggers Top-N + \"Others\"\n    //    rollup (default maxRows=20 → displays top 19 + Others(+31)).\n    {\n        const rand = seededRandom(909);\n        const employees = genRandomNames(50, 909);\n        const data = employees.map(e => ({ Employee: e, Sales: Math.round(rand() * 12000 + 100) }));\n        tests.push({\n            title: 'Many rows (50 employees → Others rollup)',\n            description: '50 unique categories → top 19 kept, remaining 31 rolled into \"Others (+31)\"',\n            tags: ['nominal', 'large', 'rollup', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Employee'), makeField('Sales')],\n            metadata: {\n                Employee: { type: Type.String, semanticType: 'Name', levels: employees },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Employee'), x: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 7b. Same 50 rows but maxRows=0 — disables rollup, exercises the\n    //     \"render all rows\" code path (no panel-level data override).\n    {\n        const rand = seededRandom(909);\n        const employees = genRandomNames(50, 909);\n        const data = employees.map(e => ({ Employee: e, Sales: Math.round(rand() * 12000 + 100) }));\n        tests.push({\n            title: 'Many rows (50, rollup disabled)',\n            description: 'maxRows=0 → render all 50 rows; tests row density at scale',\n            tags: ['nominal', 'large', 'no-rollup', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Employee'), makeField('Sales')],\n            metadata: {\n                Employee: { type: Type.String, semanticType: 'Name', levels: employees },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Employee'), x: makeEncodingItem('Sales') },\n            chartProperties: { maxRows: 0 },\n        });\n    }\n\n    // 8. Very long category names — verifies labelLimit + the\n    //    `labelAlign:'left' + labelPadding` trick under truncation.\n    {\n        const longNames = [\n            'Strategic Cloud Infrastructure & Platform Modernization Initiative',\n            'Customer-Facing Conversational AI Assistant Rollout (Phase II)',\n            'Cross-Functional Data Governance and Quality Improvement Program',\n            'Next-Generation Identity & Access Management Migration',\n            'Enterprise-Wide Endpoint Detection and Response Deployment',\n            'Global Privacy Compliance & Regional Data-Residency Project',\n            'Supply Chain Visibility and Real-Time Telemetry Initiative',\n        ];\n        const rand = seededRandom(411);\n        const data = longNames.map(n => ({ Initiative: n, Budget: Math.round(rand() * 800000 + 50000) }));\n        tests.push({\n            title: 'Very long category labels (truncation)',\n            description: 'Long y-axis labels → exercises labelLimit/labelPadding clamp at 220px',\n            tags: ['nominal', 'small', 'long-labels', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Initiative'), makeField('Budget')],\n            metadata: {\n                Initiative: { type: Type.String, semanticType: 'Category', levels: longNames },\n                Budget: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Initiative'), x: makeEncodingItem('Budget') },\n        });\n    }\n\n    // 9. Huge numbers (billions) — exercises width measurement for\n    //    very wide value strings; ensures bar panel doesn't collapse.\n    {\n        const rand = seededRandom(7);\n        const countries = ['United States', 'China', 'Japan', 'Germany', 'India', 'United Kingdom', 'France', 'Italy', 'Brazil', 'Canada'];\n        const data = countries.map((c, i) => ({\n            Country: c,\n            GDP: Math.round((rand() + 0.5) * 5e12) - i * 2e11,\n        }));\n        tests.push({\n            title: 'Huge values (GDP in raw dollars)',\n            description: 'Trillion-scale numbers → wide value column, panel-width budget pressure',\n            tags: ['nominal', 'medium', 'huge-values', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Country'), makeField('GDP')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                GDP: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Country'), x: makeEncodingItem('GDP') },\n        });\n    }\n\n    // 10. Tiny values (sub-1) — exercises raw-as-is display for small\n    //     decimals; no formatting should kick in.\n    {\n        const data = [\n            { Sensor: 'A', Reading: 0.0023 },\n            { Sensor: 'B', Reading: 0.0019 },\n            { Sensor: 'C', Reading: 0.0017 },\n            { Sensor: 'D', Reading: 0.0011 },\n            { Sensor: 'E', Reading: 0.0008 },\n            { Sensor: 'F', Reading: 0.0005 },\n        ];\n        tests.push({\n            title: 'Tiny decimal values',\n            description: 'Sub-1 measurements → ensure raw values shown, no spurious rounding',\n            tags: ['nominal', 'small', 'tiny-values', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Sensor'), makeField('Reading')],\n            metadata: {\n                Sensor: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Sensor) },\n                Reading: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Sensor'), x: makeEncodingItem('Reading') },\n        });\n    }\n\n    // 11. Single-row edge case — % must auto-hide (always 100%).\n    {\n        const data = [{ Region: 'APAC', Revenue: 4_250_000 }];\n        tests.push({\n            title: 'Single row (% auto-hidden)',\n            description: 'n=1 → \"% of total\" is always 100%, column should be suppressed',\n            tags: ['nominal', 'edge', 'single-row', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Region'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Region', levels: ['APAC'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Region'), x: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 12. All-zero values — total=0 should auto-hide % (divide-by-zero).\n    {\n        const data = [\n            { Quarter: 'Q1', Profit: 0 },\n            { Quarter: 'Q2', Profit: 0 },\n            { Quarter: 'Q3', Profit: 0 },\n            { Quarter: 'Q4', Profit: 0 },\n        ];\n        tests.push({\n            title: 'All zeros (% auto-hidden)',\n            description: 'total=0 → divide-by-zero guard suppresses % column; bar panel collapses to 0-width but spec stays valid',\n            tags: ['nominal', 'edge', 'zero-total', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Quarter'), makeField('Profit')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Quarter', levels: ['Q1', 'Q2', 'Q3', 'Q4'] },\n                Profit: { type: Type.Number, semanticType: 'Profit', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Quarter'), x: makeEncodingItem('Profit') },\n        });\n    }\n\n    // 13. Mixed CJK + Latin labels — exercises CJK width heuristic.\n    {\n        const data = [\n            { 项目: '人工智能 AI Platform',           收入: 5_420_000 },\n            { 项目: '云计算 Cloud Services',          收入: 3_180_000 },\n            { 项目: '数据分析 Analytics',             收入: 2_650_000 },\n            { 项目: '物联网 IoT Solutions',           收入: 1_840_000 },\n            { 项目: '网络安全 Security',              收入: 1_220_000 },\n            { 项目: '区块链 Blockchain Lab',          收入: 480_000 },\n        ];\n        tests.push({\n            title: 'Mixed CJK + Latin labels',\n            description: 'Bi-script category labels → tests CJK 2× width heuristic in label-column sizing',\n            tags: ['nominal', 'small', 'cjk', 'mixed-script', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('项目'), makeField('收入')],\n            metadata: {\n                '项目': { type: Type.String, semanticType: 'Category', levels: data.map(d => d.项目) },\n                '收入': { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('项目'), x: makeEncodingItem('收入') },\n        });\n    }\n\n    // 14. Power-law (Pareto) distribution — verifies the top-1 bar\n    //     doesn't visually crush the rest into invisibility.\n    {\n        const cats = genCategories('Vendor', 15);\n        const rand = seededRandom(31);\n        const data = cats.map((c, i) => ({\n            Vendor: c,\n            Spend: Math.round(Math.pow(0.55, i) * 1_000_000 + rand() * 1000),\n        }));\n        tests.push({\n            title: 'Power-law distribution (top dominates)',\n            description: 'Top row ~1.8M vs tail rows <1K → bar lengths span 3+ orders of magnitude',\n            tags: ['nominal', 'medium', 'power-law', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Vendor'), makeField('Spend')],\n            metadata: {\n                Vendor: { type: Type.String, semanticType: 'Category', levels: cats },\n                Spend: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Vendor'), x: makeEncodingItem('Spend') },\n        });\n    }\n\n    // 15. Multi-row-per-category with color grouping (stacked bars).\n    //     Regression test: text panels must aggregate per-category, not\n    //     render one mark per input row (which would overlap and show\n    //     per-row ≈0% percents instead of category totals).\n    {\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        const channels = ['Music','Games','Entertainment','Education','People','Sports','Film','News','Comedy'];\n        const rand = seededRandom(1234);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const c of channels) {\n                data.push({\n                    created_month: m,\n                    channel_type: c,\n                    views: Math.round(rand() * 5e8 + 1e7),\n                });\n            }\n        }\n        tests.push({\n            title: 'Stacked: views by month × channel_type',\n            description: 'Multi-row per y-category + color partition → text panels must show per-category totals (regression)',\n            tags: ['nominal', 'medium', 'stacked', 'multi-row', 'stress'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('created_month'), makeField('channel_type'), makeField('views')],\n            metadata: {\n                created_month: { type: Type.String, semanticType: 'Month', levels: months },\n                channel_type:  { type: Type.String, semanticType: 'Category', levels: channels },\n                views:         { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('created_month'),\n                x: makeEncodingItem('views'),\n                color: makeEncodingItem('channel_type'),\n            },\n        });\n    }\n\n    // 16. Column-faceted launch leaders with color = facet field and\n    //     % of total enabled. Mirrors the app scenario where hconcat\n    //     Bar Table needs top-level faceting and per-facet denominators.\n    {\n        const agencyTypes = ['private', 'startup', 'state'];\n        const data = [\n            { Agency: 'Arianespace', 'Agency Type': 'private', 'Launch Count': 258 },\n            { Agency: 'ILS-K', 'Agency Type': 'private', 'Launch Count': 97 },\n            { Agency: 'ULA/LMA', 'Agency Type': 'private', 'Launch Count': 70 },\n            { Agency: 'MDSSC', 'Agency Type': 'private', 'Launch Count': 62 },\n            { Agency: 'OSC-Fairfax', 'Agency Type': 'private', 'Launch Count': 60 },\n            { Agency: 'ULA/Boeing', 'Agency Type': 'private', 'Launch Count': 58 },\n            { Agency: 'Boeing', 'Agency Type': 'private', 'Launch Count': 56 },\n            { Agency: 'LMA', 'Agency Type': 'private', 'Launch Count': 43 },\n            { Agency: 'SpaceX', 'Agency Type': 'startup', 'Launch Count': 65 },\n            { Agency: 'Rocket Lab', 'Agency Type': 'startup', 'Launch Count': 2 },\n            { Agency: 'RVSN', 'Agency Type': 'state', 'Launch Count': 1528 },\n            { Agency: 'UNKS', 'Agency Type': 'state', 'Launch Count': 904 },\n            { Agency: 'NASA', 'Agency Type': 'state', 'Launch Count': 469 },\n            { Agency: 'USAF', 'Agency Type': 'state', 'Launch Count': 388 },\n            { Agency: 'AFSC', 'Agency Type': 'state', 'Launch Count': 247 },\n            { Agency: 'VKS RVSN', 'Agency Type': 'state', 'Launch Count': 200 },\n            { Agency: 'CALT', 'Agency Type': 'state', 'Launch Count': 181 },\n            { Agency: 'Roskosmos', 'Agency Type': 'state', 'Launch Count': 128 },\n        ];\n        tests.push({\n            title: 'Faceted launch leaders (% within agency type)',\n            description: 'column + color both use Agency Type; % of total should be computed within each facet',\n            tags: ['nominal', 'facet', 'column', 'color', 'percentage', 'regression'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Agency'), makeField('Agency Type'), makeField('Launch Count')],\n            metadata: {\n                Agency: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Agency) },\n                'Agency Type': { type: Type.String, semanticType: 'Category', levels: agencyTypes },\n                'Launch Count': { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('Agency'),\n                x: makeEncodingItem('Launch Count'),\n                color: makeEncodingItem('Agency Type'),\n                column: makeEncodingItem('Agency Type'),\n            },\n            chartProperties: { showPercent: true },\n        });\n    }\n\n    // 17. Many column facets with compact row counts. Exercises column\n    //     wrapping, adaptive subplot height, and facet-aware fonts.\n    {\n        const markets = ['Americas', 'Europe', 'Middle East', 'Africa', 'East Asia', 'Oceania', 'South Asia'];\n        const agencies = ['Atlas', 'Beacon', 'Cosmos', 'Delta'];\n        const rand = seededRandom(8181);\n        const data: any[] = [];\n        for (const market of markets) {\n            for (const agency of agencies) {\n                data.push({\n                    Market: market,\n                    Agency: `${agency} ${market}`,\n                    Launches: Math.round(rand() * 180 + 20),\n                });\n            }\n        }\n        tests.push({\n            title: 'Wrapped market facets (7 panels)',\n            description: 'Seven column facets with four rows each — mini-table height and font size should adapt after wrapping',\n            tags: ['nominal', 'facet', 'wrap', 'small-multiple', 'layout'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Market'), makeField('Agency'), makeField('Launches')],\n            metadata: {\n                Market: { type: Type.String, semanticType: 'Category', levels: markets },\n                Agency: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Agency) },\n                Launches: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('Agency'),\n                x: makeEncodingItem('Launches'),\n                column: makeEncodingItem('Market'),\n            },\n            chartProperties: { showPercent: true },\n        });\n    }\n\n    // 18. Row + column faceting. Ensures Bar Table's hconcat spec also\n    //     hoists correctly for two-dimensional facet grids.\n    {\n        const regions = ['US', 'EU'];\n        const eras = ['Historic', 'Recent'];\n        const agencies = ['National', 'Commercial', 'Defense'];\n        const data: any[] = [];\n        for (const era of eras) {\n            for (const region of regions) {\n                for (let i = 0; i < agencies.length; i++) {\n                    data.push({\n                        Era: era,\n                        Region: region,\n                        Agency: `${region} ${agencies[i]}`,\n                        Missions: (era === 'Historic' ? 120 : 70) + i * 35 + (region === 'US' ? 40 : 0),\n                    });\n                }\n            }\n        }\n        tests.push({\n            title: 'Row + column facets (region × era)',\n            description: 'Two-dimensional faceting with percent totals computed per region/era panel',\n            tags: ['nominal', 'facet', 'row', 'column', 'percentage', 'layout'],\n            chartType: 'Bar Table',\n            data,\n            fields: [makeField('Era'), makeField('Region'), makeField('Agency'), makeField('Missions')],\n            metadata: {\n                Era: { type: Type.String, semanticType: 'Category', levels: eras },\n                Region: { type: Type.String, semanticType: 'Region', levels: regions },\n                Agency: { type: Type.String, semanticType: 'Category', levels: data.map(d => d.Agency) },\n                Missions: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('Agency'),\n                x: makeEncodingItem('Missions'),\n                column: makeEncodingItem('Region'),\n                row: makeEncodingItem('Era'),\n            },\n            chartProperties: { showPercent: true },\n        });\n    }\n\n    return [...tests, ...realBarTableCases()];\n}\n\n// ------ Candlestick Chart ------\nexport function genCandlestickTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(950);\n\n    // Helper: generate OHLC data\n    function genOHLC(days: number, startPrice: number) {\n        const data: any[] = [];\n        let price = startPrice;\n        const baseDate = new Date('2024-01-02');\n        for (let i = 0; i < days; i++) {\n            const date = new Date(baseDate);\n            date.setUTCDate(baseDate.getUTCDate() + i);\n            const change = (rand() - 0.48) * 4;  // slight upward bias\n            const open = Math.round(price * 100) / 100;\n            const close = Math.round((price + change) * 100) / 100;\n            const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n            const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n            data.push({\n                Date: date.toISOString().slice(0, 10),\n                Open: open, High: high, Low: low, Close: close,\n            });\n            price = close;\n        }\n        return data;\n    }\n\n    // 1. 30-day stock price\n    {\n        const data = genOHLC(30, 150);\n        tests.push({\n            title: '30-day OHLC',\n            description: 'One month of stock data — classic candlestick',\n            tags: ['temporal', 'quantitative', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 2. 90-day (denser candles)\n    {\n        const data = genOHLC(90, 50);\n        tests.push({\n            title: '90-day OHLC (dense)',\n            description: 'Three months — tests bar width auto-sizing',\n            tags: ['temporal', 'quantitative', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 3. Penny stock (low prices, high volatility)\n    {\n        const data = genOHLC(20, 3);\n        tests.push({\n            title: 'Penny stock (20 days)',\n            description: 'Low prices near zero — tests scale: {zero: false}',\n            tags: ['temporal', 'quantitative', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 4. Multi-stock column facet\n    {\n        const tickers = ['AAPL', 'GOOG', 'MSFT'];\n        const data: any[] = [];\n        for (const ticker of tickers) {\n            const startPrice = ticker === 'AAPL' ? 180 : ticker === 'GOOG' ? 140 : 350;\n            let price = startPrice;\n            const baseDate = new Date('2024-03-01');\n            for (let i = 0; i < 20; i++) {\n                const date = new Date(baseDate);\n                date.setUTCDate(baseDate.getUTCDate() + i);\n                const change = (rand() - 0.48) * 4;\n                const open = Math.round(price * 100) / 100;\n                const close = Math.round((price + change) * 100) / 100;\n                const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n                const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n                data.push({ Date: date.toISOString().slice(0, 10), Ticker: ticker, Open: open, High: high, Low: low, Close: close });\n                price = close;\n            }\n        }\n        tests.push({\n            title: 'Multi-stock facet (3 tickers)',\n            description: '3 stocks side-by-side — faceted by ticker',\n            tags: ['temporal', 'quantitative', 'facet', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Ticker'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Ticker: { type: Type.String, semanticType: 'Category', levels: tickers },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n                column: makeEncodingItem('Ticker'),\n            },\n        });\n    }\n\n    return [...tests, ...realCandlestickCases()];\n}\n\n// ------ Radar Chart ------\nexport function genRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single entity, 5 axes (long format)\n    {\n        const data = [\n            { Player: 'Player A', Metric: 'Speed', Value: 85 },\n            { Player: 'Player A', Metric: 'Shooting', Value: 70 },\n            { Player: 'Player A', Metric: 'Passing', Value: 90 },\n            { Player: 'Player A', Metric: 'Dribbling', Value: 80 },\n            { Player: 'Player A', Metric: 'Defense', Value: 60 },\n        ];\n        tests.push({\n            title: 'Single Player Stats (5 axes)',\n            description: 'One polygon, 5 numeric dimensions, long format',\n            tags: ['radar', 'single'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Player'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    // 2. Two entities comparison\n    {\n        const data = [\n            { Team: 'Team A', Metric: 'Attack', Value: 85 },\n            { Team: 'Team A', Metric: 'Defense', Value: 70 },\n            { Team: 'Team A', Metric: 'Midfield', Value: 78 },\n            { Team: 'Team A', Metric: 'Speed', Value: 90 },\n            { Team: 'Team A', Metric: 'Stamina', Value: 65 },\n            { Team: 'Team A', Metric: 'Tactics', Value: 80 },\n            { Team: 'Team B', Metric: 'Attack', Value: 72 },\n            { Team: 'Team B', Metric: 'Defense', Value: 88 },\n            { Team: 'Team B', Metric: 'Midfield', Value: 82 },\n            { Team: 'Team B', Metric: 'Speed', Value: 68 },\n            { Team: 'Team B', Metric: 'Stamina', Value: 85 },\n            { Team: 'Team B', Metric: 'Tactics', Value: 75 },\n        ];\n        tests.push({\n            title: 'Two Teams Comparison (6 axes)',\n            description: 'Two overlapping polygons, long format',\n            tags: ['radar', 'comparison'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Team'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Team') },\n        });\n    }\n\n    // 3. Three entities, no fill\n    {\n        const data = [\n            { Product: 'Widget', Metric: 'Quality', Value: 90 },\n            { Product: 'Widget', Metric: 'Price', Value: 60 },\n            { Product: 'Widget', Metric: 'Durability', Value: 80 },\n            { Product: 'Widget', Metric: 'Design', Value: 75 },\n            { Product: 'Widget', Metric: 'Support', Value: 85 },\n            { Product: 'Gadget', Metric: 'Quality', Value: 70 },\n            { Product: 'Gadget', Metric: 'Price', Value: 85 },\n            { Product: 'Gadget', Metric: 'Durability', Value: 65 },\n            { Product: 'Gadget', Metric: 'Design', Value: 90 },\n            { Product: 'Gadget', Metric: 'Support', Value: 50 },\n            { Product: 'Doohickey', Metric: 'Quality', Value: 80 },\n            { Product: 'Doohickey', Metric: 'Price', Value: 70 },\n            { Product: 'Doohickey', Metric: 'Durability', Value: 90 },\n            { Product: 'Doohickey', Metric: 'Design', Value: 60 },\n            { Product: 'Doohickey', Metric: 'Support', Value: 70 },\n        ];\n        tests.push({\n            title: 'Product Comparison (unfilled)',\n            description: 'Three polygons, filled=false, long format',\n            tags: ['radar', 'multi', 'config'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), color: makeEncodingItem('Product') },\n            chartProperties: { filled: false },\n        });\n    }\n\n    // 4. Faceted radar — one radar per region\n    {\n        const data = [\n            { Region: 'North', Metric: 'Sales', Value: 80 },\n            { Region: 'North', Metric: 'Profit', Value: 65 },\n            { Region: 'North', Metric: 'Growth', Value: 90 },\n            { Region: 'North', Metric: 'Retention', Value: 70 },\n            { Region: 'South', Metric: 'Sales', Value: 60 },\n            { Region: 'South', Metric: 'Profit', Value: 85 },\n            { Region: 'South', Metric: 'Growth', Value: 50 },\n            { Region: 'South', Metric: 'Retention', Value: 75 },\n            { Region: 'East', Metric: 'Sales', Value: 70 },\n            { Region: 'East', Metric: 'Profit', Value: 72 },\n            { Region: 'East', Metric: 'Growth', Value: 68 },\n            { Region: 'East', Metric: 'Retention', Value: 88 },\n        ];\n        tests.push({\n            title: 'Faceted Radar by Region',\n            description: 'One radar per region via column facet',\n            tags: ['radar', 'facet'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Metric'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value'), column: makeEncodingItem('Region') },\n        });\n    }\n\n    // 5. Long labels — test that labels don't overlap the chart\n    {\n        const data = [\n            { Category: 'Customer Satisfaction Score', Assessment: 'Product A', Score: 82 },\n            { Category: 'Annual Revenue Growth Rate', Assessment: 'Product A', Score: 91 },\n            { Category: 'Employee Retention', Assessment: 'Product A', Score: 74 },\n            { Category: 'Market Share Percentage', Assessment: 'Product A', Score: 68 },\n            { Category: 'Net Promoter Score', Assessment: 'Product A', Score: 88 },\n            { Category: 'Customer Satisfaction Score', Assessment: 'Product B', Score: 70 },\n            { Category: 'Annual Revenue Growth Rate', Assessment: 'Product B', Score: 65 },\n            { Category: 'Employee Retention', Assessment: 'Product B', Score: 85 },\n            { Category: 'Market Share Percentage', Assessment: 'Product B', Score: 78 },\n            { Category: 'Net Promoter Score', Assessment: 'Product B', Score: 60 },\n        ];\n        tests.push({\n            title: 'Long Labels (5 axes)',\n            description: 'Labels with long text should not overlap the radar',\n            tags: ['radar', 'labels'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Assessment'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Score'), color: makeEncodingItem('Assessment') },\n        });\n    }\n\n    // 6. Many axes with long labels (8)\n    {\n        const metrics = [\n            'Overall User Experience', 'First Contentful Paint',\n            'Time to Interactive', 'Cumulative Layout Shift',\n            'Server Response Time', 'Error Rate per Minute',\n            'Database Query Latency', 'API Throughput',\n        ];\n        const data = metrics.flatMap(m => [\n            { App: 'Frontend', KPI: m, Rating: Math.round(50 + Math.random() * 50) },\n            { App: 'Backend', KPI: m, Rating: Math.round(40 + Math.random() * 60) },\n        ]);\n        tests.push({\n            title: 'Many Axes + Long Labels (8 axes)',\n            description: '8 axes with verbose labels, two groups',\n            tags: ['radar', 'labels', 'many-axes'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('App'), makeField('KPI'), makeField('Rating')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('KPI'), y: makeEncodingItem('Rating'), color: makeEncodingItem('App') },\n        });\n    }\n\n    // 7. Many many metrics (12 axes)\n    {\n        const metrics = [\n            'Revenue', 'Profit Margin', 'Customer Retention',\n            'Brand Awareness', 'Market Penetration', 'Product Quality',\n            'Employee Engagement', 'Innovation Index', 'Supply Chain Efficiency',\n            'Digital Transformation', 'Sustainability Rating', 'Compliance Score',\n        ];\n        const data = metrics.flatMap(m => [\n            { Division: 'Americas', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n            { Division: 'EMEA', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n            { Division: 'APAC', Factor: m, Score: Math.round(30 + Math.random() * 70) },\n        ]);\n        tests.push({\n            title: 'Many Metrics (12 axes)',\n            description: '12 axes with 3 groups — tests label crowding',\n            tags: ['radar', 'labels', 'crowded'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Division'), makeField('Factor'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Factor'), y: makeEncodingItem('Score'), color: makeEncodingItem('Division') },\n        });\n    }\n\n    return [...tests, ...realRadarCases()];\n}\n\n// ------ Pyramid Chart ------\nexport function genPyramidTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(777);\n\n    // Helper to generate long-format pyramid data from two groups\n    const makeLongData = (categories: string[], groupA: string, groupB: string, valField: string, minA: number, rangeA: number, minB: number, rangeB: number) => {\n        const data: any[] = [];\n        for (const cat of categories) {\n            data.push({ [valField]: Math.round(minA + rand() * rangeA), Group: groupA, Category: cat });\n            data.push({ [valField]: Math.round(minB + rand() * rangeB), Group: groupB, Category: cat });\n        }\n        return data;\n    };\n\n    // 1. Classic population pyramid — Age Group × Gender × Population\n    {\n        const ageGroups = ['0-9', '10-19', '20-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80+'];\n        const data: any[] = [];\n        for (const ag of ageGroups) {\n            data.push({ 'Age Group': ag, Gender: 'Male', Population: Math.round(500 + rand() * 4500) });\n            data.push({ 'Age Group': ag, Gender: 'Female', Population: Math.round(500 + rand() * 4500) });\n        }\n        tests.push({\n            title: 'Population pyramid (9 age groups)',\n            description: 'Classic population pyramid — long format with Gender as color',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Group'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Group': { type: Type.String, semanticType: 'Category', levels: ageGroups },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Group'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 2. Workforce pyramid\n    {\n        const grades = ['Junior', 'Mid-level', 'Senior', 'Lead', 'Manager', 'Director'];\n        const data: any[] = [];\n        for (const g of grades) {\n            data.push({ Grade: g, Type: 'Full-Time', Count: Math.round(20 + rand() * 200) });\n            data.push({ Grade: g, Type: 'Part-Time', Count: Math.round(10 + rand() * 80) });\n        }\n        tests.push({\n            title: 'Workforce pyramid (6 grades)',\n            description: 'Grade levels on y, Count on x, Full-Time vs Part-Time as color',\n            tags: ['nominal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Grade'), makeField('Count'), makeField('Type')],\n            metadata: {\n                Grade: { type: Type.String, semanticType: 'Category', levels: grades },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: ['Full-Time', 'Part-Time'] },\n            },\n            encodingMap: { y: makeEncodingItem('Grade'), x: makeEncodingItem('Count'), color: makeEncodingItem('Type') },\n        });\n    }\n\n    // 3. Survey responses\n    {\n        const levels = ['Very Low', 'Low', 'Medium', 'High', 'Very High'];\n        const data: any[] = [];\n        for (const lv of levels) {\n            data.push({ 'Satisfaction Level': lv, Response: 'Agree', Count: Math.round(50 + rand() * 300) });\n            data.push({ 'Satisfaction Level': lv, Response: 'Disagree', Count: Math.round(30 + rand() * 250) });\n        }\n        tests.push({\n            title: 'Survey pyramid (5 levels)',\n            description: 'Satisfaction levels — Agree vs Disagree',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Satisfaction Level'), makeField('Count'), makeField('Response')],\n            metadata: {\n                'Satisfaction Level': { type: Type.String, semanticType: 'Category', levels: levels },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Response: { type: Type.String, semanticType: 'Category', levels: ['Agree', 'Disagree'] },\n            },\n            encodingMap: { y: makeEncodingItem('Satisfaction Level'), x: makeEncodingItem('Count'), color: makeEncodingItem('Response') },\n        });\n    }\n\n    // 4. Income bracket pyramid (medium)\n    {\n        const brackets = ['<$20K', '$20-30K', '$30-40K', '$40-50K', '$50-60K', '$60-70K',\n            '$70-80K', '$80-90K', '$90-100K', '$100-120K', '$120-150K', '$150K+'];\n        const data: any[] = [];\n        for (const b of brackets) {\n            data.push({ 'Income Bracket': b, Area: 'Urban', Count: Math.round(100 + rand() * 3000) });\n            data.push({ 'Income Bracket': b, Area: 'Rural', Count: Math.round(80 + rand() * 2000) });\n        }\n        tests.push({\n            title: 'Income pyramid (12 brackets)',\n            description: '12 income bands — Urban vs Rural',\n            tags: ['ordinal', 'quantitative', 'color', 'medium'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Income Bracket'), makeField('Count'), makeField('Area')],\n            metadata: {\n                'Income Bracket': { type: Type.String, semanticType: 'Category', levels: brackets },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Area: { type: Type.String, semanticType: 'Category', levels: ['Urban', 'Rural'] },\n            },\n            encodingMap: { y: makeEncodingItem('Income Bracket'), x: makeEncodingItem('Count'), color: makeEncodingItem('Area') },\n        });\n    }\n\n    // 5. Education pyramid\n    {\n        const degrees = ['High School', 'Associate', 'Bachelor', 'Master', 'Doctorate'];\n        const data: any[] = [];\n        for (const d of degrees) {\n            data.push({ 'Degree Level': d, Outcome: 'Admitted', Count: Math.round(200 + rand() * 5000) });\n            data.push({ 'Degree Level': d, Outcome: 'Rejected', Count: Math.round(100 + rand() * 3000) });\n        }\n        tests.push({\n            title: 'Education pyramid (5 degrees)',\n            description: 'Degree levels — Admitted vs Rejected applicants',\n            tags: ['ordinal', 'quantitative', 'color', 'small'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Degree Level'), makeField('Count'), makeField('Outcome')],\n            metadata: {\n                'Degree Level': { type: Type.String, semanticType: 'Category', levels: degrees },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Outcome: { type: Type.String, semanticType: 'Category', levels: ['Admitted', 'Rejected'] },\n            },\n            encodingMap: { y: makeEncodingItem('Degree Level'), x: makeEncodingItem('Count'), color: makeEncodingItem('Outcome') },\n        });\n    }\n\n    // 6. Country comparison\n    {\n        const countries = genCategories('Country', 10);\n        const data: any[] = [];\n        for (const c of countries) {\n            data.push({ Country: c, Direction: 'Import', Value: Math.round(1000 + rand() * 50000) });\n            data.push({ Country: c, Direction: 'Export', Value: Math.round(1000 + rand() * 50000) });\n        }\n        tests.push({\n            title: 'Trade pyramid (10 countries)',\n            description: '10 countries — Import vs Export trade values',\n            tags: ['nominal', 'quantitative', 'color', 'medium'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Country'), makeField('Value'), makeField('Direction')],\n            metadata: {\n                Country: { type: Type.String, semanticType: 'Country', levels: countries },\n                Value: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Direction: { type: Type.String, semanticType: 'Category', levels: ['Import', 'Export'] },\n            },\n            encodingMap: { y: makeEncodingItem('Country'), x: makeEncodingItem('Value'), color: makeEncodingItem('Direction') },\n        });\n    }\n\n    // 7. Large cardinality (20 age bands)\n    {\n        const ageBands = Array.from({ length: 20 }, (_, i) => {\n            const lo = i * 5;\n            const hi = lo + 4;\n            return `${lo}-${hi}`;\n        });\n        const data: any[] = [];\n        for (const ag of ageBands) {\n            data.push({ 'Age Band': ag, Gender: 'Male', Population: Math.round(200 + rand() * 8000) });\n            data.push({ 'Age Band': ag, Gender: 'Female', Population: Math.round(200 + rand() * 8000) });\n        }\n        tests.push({\n            title: 'Overstretch pyramid (20 age bands)',\n            description: '20 fine-grained age bands — tests y-axis elastic overstretch',\n            tags: ['nominal', 'quantitative', 'color', 'large', 'overstretch'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Band'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Band': { type: Type.String, semanticType: 'Category', levels: ageBands },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Band'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    // 8. Negative values — should trigger warning\n    {\n        const ageGroups = ['0-14', '15-29', '30-44', '45-59', '60-74', '75+'];\n        const data: any[] = [];\n        for (const ag of ageGroups) {\n            data.push({ 'Age Group': ag, Gender: 'Male', Population: Math.round(-500 + rand() * 4000) });\n            data.push({ 'Age Group': ag, Gender: 'Female', Population: Math.round(-300 + rand() * 3500) });\n        }\n        tests.push({\n            title: 'Negative values warning (6 groups)',\n            description: 'Some values are negative — should trigger negative-value warnings',\n            tags: ['nominal', 'quantitative', 'color', 'small', 'warning', 'negative'],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('Age Group'), makeField('Population'), makeField('Gender')],\n            metadata: {\n                'Age Group': { type: Type.String, semanticType: 'Category', levels: ageGroups },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: ['Male', 'Female'] },\n            },\n            encodingMap: { y: makeEncodingItem('Age Group'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    return [...tests, ...realPyramidCases()];\n}\n\n// ------ Rose Chart (Nightingale / Coxcomb) ------\nexport function genRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'Rose (basic, 8 directions)',\n            description: 'Wind speed by compass direction — classic coxcomb',\n            tags: ['nominal', 'quantitative', 'small'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — wind directions × speed × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'Stacked Rose (8 dirs × 4 seasons)',\n            description: 'Wind speed stacked by season — polar stacked bar',\n            tags: ['nominal', 'quantitative', 'color', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose with many categories\n    {\n        const cats = genCategories('Category', 12);\n        const data = cats.map(c => ({ Category: c, Value: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'Rose (medium, 12 categories)',\n            description: '12 categories — tests angular spacing with more slices',\n            tags: ['nominal', 'quantitative', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: cats },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 4. Rose with color stacking and many groups\n    {\n        const products = genCategories('Product', 6);\n        const regions = ['North', 'South', 'East', 'West'];\n        const data: any[] = [];\n        for (const p of products) {\n            for (const r of regions) {\n                data.push({ Product: p, Sales: Math.round(100 + rand() * 900), Region: r });\n            }\n        }\n        tests.push({\n            title: 'Stacked Rose (6 products × 4 regions)',\n            description: 'Product sales stacked by region',\n            tags: ['nominal', 'quantitative', 'color', 'stacked', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Region')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 5. Rose with inner radius (donut-rose)\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'Donut Rose (12 months, innerRadius)',\n            description: 'Monthly rainfall with inner radius — donut style rose',\n            tags: ['ordinal', 'quantitative', 'properties'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n            chartProperties: { innerRadius: 40 },\n        });\n    }\n\n    // 6. Rose with padAngle\n    {\n        const departments = genCategories('Department', 8);\n        const data = departments.map(d => ({ Department: d, Score: Math.round(50 + rand() * 50) }));\n        tests.push({\n            title: 'Rose with gap (padAngle)',\n            description: 'Departments with angle padding between slices',\n            tags: ['nominal', 'quantitative', 'properties'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Department'), makeField('Score')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Department', levels: departments },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Department'), y: makeEncodingItem('Score') },\n            chartProperties: { padAngle: 0.03 },\n        });\n    }\n\n    // 7. Faceted rose — directions by year (column facet)\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const years = ['2022', '2023', '2024'];\n        const data: any[] = [];\n        for (const yr of years) {\n            for (const d of directions) {\n                data.push({ Direction: d, Speed: Math.round(4 + rand() * 20), Year: yr });\n            }\n        }\n        tests.push({\n            title: 'Faceted Rose (column)',\n            description: 'Wind rose per year — faceted by column',\n            tags: ['nominal', 'quantitative', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Year')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Direction', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Year: { type: Type.String, semanticType: 'Year', levels: years },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), column: makeEncodingItem('Year') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 8. Faceted stacked rose — directions × season, faceted by location\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const locations = ['Coastal', 'Inland'];\n        const data: any[] = [];\n        for (const loc of locations) {\n            for (const d of directions) {\n                for (const s of seasons) {\n                    data.push({ Direction: d, Speed: Math.round(3 + rand() * 18), Season: s, Location: loc });\n                }\n            }\n        }\n        tests.push({\n            title: 'Faceted Stacked Rose (column)',\n            description: 'Stacked wind rose by season, faceted by location',\n            tags: ['nominal', 'quantitative', 'color', 'stacked', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season'), makeField('Location')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Direction', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n                Location: { type: Type.String, semanticType: 'Category', levels: locations },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'),\n                color: makeEncodingItem('Season'), column: makeEncodingItem('Location'),\n            },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 9. Faceted rose — monthly rainfall by region (3 regions)\n    {\n        const months = genMonths(12);\n        const regions = ['North', 'Central', 'South'];\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const m of months) {\n                data.push({ Month: m, Rainfall: Math.round(10 + rand() * 140), Region: r });\n            }\n        }\n        tests.push({\n            title: 'Faceted Rose (monthly × region)',\n            description: 'Monthly rainfall rose faceted by region',\n            tags: ['ordinal', 'quantitative', 'facet'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall'), makeField('Region')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall'), column: makeEncodingItem('Region') },\n        });\n    }\n\n    return [...tests, ...realRoseCases()];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { Channel, EncodingItem } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genDates } from './generators';\n\n/** Facet cardinality sizes */\nexport const FACET_SIZES = { S: 2, M: 4, L: 8, XL: 12 } as const;\n/** Discrete axis cardinality sizes */\nexport const DISCRETE_SIZES = { S: 4, M: 8, L: 20, XL: 50 } as const;\n\n/**\n * Generate facet test cases for a given facet mode (column, row, or column+row).\n * For each combination of facetSize × axisType:\n *   - Continuous × Continuous (scatter in each facet)\n *   - Continuous × Discrete-S/M/L/XL (bar in each facet)\n */\nexport function genFacetTests(\n    mode: 'column' | 'row' | 'column+row',\n): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(mode === 'column' ? 500 : mode === 'row' ? 600 : 700);\n\n    const facetSizeEntries = Object.entries(FACET_SIZES) as [string, number][];\n    const discreteSizeEntries = Object.entries(DISCRETE_SIZES) as [string, number][];\n\n    for (const [facetLabel, facetCount] of facetSizeEntries) {\n        // For column+row mode, split facetCount across columns and rows\n        let colCount: number, rowCount: number;\n        if (mode === 'column+row') {\n            colCount = Math.max(2, Math.ceil(Math.sqrt(facetCount)));\n            rowCount = Math.max(2, Math.ceil(facetCount / colCount));\n        } else {\n            colCount = facetCount;\n            rowCount = facetCount;\n        }\n\n        const facetDesc = mode === 'column+row'\n            ? `${colCount} cols × ${rowCount} rows`\n            : `${facetCount} facets`;\n\n        // --- 1. Continuous × Continuous (scatter) ---\n        {\n            const facetVals = mode === 'column+row'\n                ? null  // handled separately\n                : genCategories('Region', mode === 'column' ? colCount : rowCount);\n            const colVals = mode === 'column+row' ? genCategories('Region', colCount) : undefined;\n            const rowVals = mode === 'column+row' ? genCategories('Zone', rowCount) : undefined;\n\n            const data: any[] = [];\n            const pointsPerFacet = 20;\n\n            if (mode === 'column+row') {\n                for (const c of colVals!) for (const r of rowVals!) {\n                    for (let i = 0; i < pointsPerFacet; i++) {\n                        data.push({\n                            X: Math.round(10 + rand() * 90),\n                            Y: Math.round(10 + rand() * 90),\n                            Col: c,\n                            Row: r,\n                        });\n                    }\n                }\n            } else {\n                for (const f of facetVals!) {\n                    for (let i = 0; i < pointsPerFacet; i++) {\n                        data.push({\n                            X: Math.round(10 + rand() * 90),\n                            Y: Math.round(10 + rand() * 90),\n                            Facet: f,\n                        });\n                    }\n                }\n            }\n\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem('X'),\n                y: makeEncodingItem('Y'),\n            };\n            const fields = [makeField('X'), makeField('Y')];\n            const metadata: Record<string, any> = {\n                X: { type: Type.Number, semanticType: 'Value', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Value', levels: [] },\n            };\n\n            if (mode === 'column+row') {\n                encodingMap.column = makeEncodingItem('Col');\n                encodingMap.row = makeEncodingItem('Row');\n                fields.push(makeField('Col'), makeField('Row'));\n                metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n                metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n            } else if (mode === 'column') {\n                encodingMap.column = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            } else {\n                encodingMap.row = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            }\n\n            tests.push({\n                title: `Cont × Cont — facet ${facetLabel} (${facetDesc})`,\n                description: `Scatter plot with ${facetDesc}`,\n                tags: ['quantitative', 'facet', facetLabel.toLowerCase()],\n                chartType: 'Scatter Plot',\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n\n        // --- 2. Continuous × Discrete (bar chart) ---\n        for (const [discLabel, discCount] of discreteSizeEntries) {\n            const categories = genCategories('Item', discCount);\n            const facetVals = mode === 'column+row'\n                ? null\n                : genCategories('Region', mode === 'column' ? colCount : rowCount);\n            const colVals = mode === 'column+row' ? genCategories('Region', colCount) : undefined;\n            const rowVals = mode === 'column+row' ? genCategories('Zone', rowCount) : undefined;\n\n            const data: any[] = [];\n\n            if (mode === 'column+row') {\n                for (const c of colVals!) for (const r of rowVals!) {\n                    for (const cat of categories) {\n                        data.push({\n                            Category: cat,\n                            Value: Math.round(50 + rand() * 500),\n                            Col: c,\n                            Row: r,\n                        });\n                    }\n                }\n            } else {\n                for (const f of facetVals!) {\n                    for (const cat of categories) {\n                        data.push({\n                            Category: cat,\n                            Value: Math.round(50 + rand() * 500),\n                            Facet: f,\n                        });\n                    }\n                }\n            }\n\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem('Category'),\n                y: makeEncodingItem('Value'),\n            };\n            const fields = [makeField('Category'), makeField('Value')];\n            const metadata: Record<string, any> = {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Value: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            };\n\n            if (mode === 'column+row') {\n                encodingMap.column = makeEncodingItem('Col');\n                encodingMap.row = makeEncodingItem('Row');\n                fields.push(makeField('Col'), makeField('Row'));\n                metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n                metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n            } else if (mode === 'column') {\n                encodingMap.column = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            } else {\n                encodingMap.row = makeEncodingItem('Facet');\n                fields.push(makeField('Facet'));\n                metadata['Facet'] = { type: Type.String, semanticType: 'Category', levels: facetVals };\n            }\n\n            tests.push({\n                title: `Cont × Disc-${discLabel} — facet ${facetLabel} (${facetDesc})`,\n                description: `Bar chart: ${discCount} categories × ${facetDesc}`,\n                tags: ['nominal', 'quantitative', 'facet', facetLabel.toLowerCase(), `disc-${discLabel.toLowerCase()}`],\n                chartType: 'Bar Chart',\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n    }\n\n    return tests;\n}\n\nexport function genFacetColumnTests(): TestCase[] { return genFacetTests('column'); }\nexport function genFacetRowTests(): TestCase[] { return genFacetTests('row'); }\nexport function genFacetColRowTests(): TestCase[] { return genFacetTests('column+row'); }\n\n// ============================================================================\n// Targeted Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet test case from parameters.\n */\nfunction buildFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    xCategories: string[];\n    yIsContinuous: boolean;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xCategories, yIsContinuous, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: Record<string, any>[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    for (const facet of facets) {\n        if (yIsContinuous) {\n            // Scatter: continuous × continuous\n            for (let i = 0; i < 15; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            // Bar: discrete × continuous\n            for (const cat of xCategories) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {};\n    const fields: ReturnType<typeof makeField>[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (yIsContinuous) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Amount', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap };\n}\n\n/**\n * 1. Small facet counts — columns only, rows only, and col×row.\n *    Should render comfortably without wrapping or clipping.\n */\nexport function genFacetSmallTests(): TestCase[] {\n    const cats = ['A', 'B', 'C', 'D'];\n    return [\n        // 2 columns, bar\n        buildFacetTest({\n            title: '2 Columns — Bar',\n            description: '2 column facets, 4 bars each. Should fit side-by-side easily.',\n            tags: ['facet', 'column', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1200,\n        }),\n        // 3 columns, scatter\n        buildFacetTest({\n            title: '3 Columns — Scatter',\n            description: '3 column facets with scatter plots.',\n            tags: ['facet', 'column', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1201,\n        }),\n        // 2 rows, bar\n        buildFacetTest({\n            title: '2 Rows — Bar',\n            description: '2 row facets, 4 bars each. Should stack vertically.',\n            tags: ['facet', 'row', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            rowCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1202,\n        }),\n        // 3 rows, scatter\n        buildFacetTest({\n            title: '3 Rows — Scatter',\n            description: '3 row facets with scatter plots.',\n            tags: ['facet', 'row', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1203,\n        }),\n        // 2×2 col×row, bar\n        buildFacetTest({\n            title: '2×2 Col×Row — Bar',\n            description: '2 columns × 2 rows = 4 facet panels (bar chart).',\n            tags: ['facet', 'colrow', 'small', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 2,\n            rowCount: 2,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1204,\n        }),\n        // 2×3 col×row, scatter\n        buildFacetTest({\n            title: '2×3 Col×Row — Scatter',\n            description: '2 columns × 3 rows = 6 facet panels (scatter).',\n            tags: ['facet', 'colrow', 'small', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 2,\n            rowCount: 3,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1205,\n        }),\n    ];\n}\n\n/**\n * 2. Larger column counts that require horizontal wrapping.\n *    6-8 columns should exceed the default ~400px subplot width.\n */\nexport function genFacetWrapTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        // 6 columns, bar\n        buildFacetTest({\n            title: '6 Columns — Bar (needs wrap)',\n            description: '6 column facets × 3 bars. Should require horizontal wrapping or scrolling.',\n            tags: ['facet', 'column', 'wrap', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 6,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1210,\n        }),\n        // 8 columns, scatter\n        buildFacetTest({\n            title: '8 Columns — Scatter (needs wrap)',\n            description: '8 column facets with scatter plots. Tests horizontal overflow.',\n            tags: ['facet', 'column', 'wrap', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 8,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1211,\n        }),\n        // 10 columns, bar with more categories\n        buildFacetTest({\n            title: '10 Columns — Bar (heavy wrap)',\n            description: '10 column facets × 3 bars each. Extreme horizontal wrap test.',\n            tags: ['facet', 'column', 'wrap', 'heavy', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 10,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1212,\n        }),\n    ];\n}\n\n/**\n * 3. Large col×row grids that require clipping/scrolling.\n *    Many panels stress the layout engine.\n */\nexport function genFacetClipTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        // 4×3 = 12 panels\n        buildFacetTest({\n            title: '4×3 Col×Row — Bar (12 panels)',\n            description: '4 columns × 3 rows = 12 facet panels. Tests dense grid layout.',\n            tags: ['facet', 'colrow', 'clip', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 4,\n            rowCount: 3,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1220,\n        }),\n        // 5×4 = 20 panels, scatter\n        buildFacetTest({\n            title: '5×4 Col×Row — Scatter (20 panels)',\n            description: '5 columns × 4 rows = 20 facet panels. Heavy grid requiring clip.',\n            tags: ['facet', 'colrow', 'clip', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 5,\n            rowCount: 4,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1221,\n        }),\n        // 6×5 = 30 panels\n        buildFacetTest({\n            title: '6×5 Col×Row — Bar (30 panels)',\n            description: '6 columns × 5 rows = 30 facet panels. Extreme grid test.',\n            tags: ['facet', 'colrow', 'clip', 'heavy', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 6,\n            rowCount: 5,\n            xCategories: cats,\n            yIsContinuous: false,\n            seed: 1222,\n        }),\n        // 8 rows, scatter — vertical clip\n        buildFacetTest({\n            title: '8 Rows — Scatter (vertical clip)',\n            description: '8 row facets with scatter plots. Tests vertical overflow.',\n            tags: ['facet', 'row', 'clip', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 8,\n            xCategories: [],\n            yIsContinuous: true,\n            seed: 1223,\n        }),\n    ];\n}\n\n// ============================================================================\n// Overflowed Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet overflow test with many column facets\n * and a banded (discrete) x-axis with `xCount` values.\n */\nfunction buildOverflowFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    /** Number of banded/discrete x values per facet panel */\n    xBandedCount?: number;\n    /** If true, use continuous x × y (scatter) instead of discrete x */\n    continuousXY?: boolean;\n    /** If set, generate a temporal line chart with this many time points */\n    temporalLine?: {\n        pointsPerSeries: number;\n        seriesCount?: number;\n    };\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xBandedCount, continuousXY, temporalLine, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: Record<string, any>[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    const xCategories = xBandedCount ? genCategories('Item', xBandedCount) : [];\n    const seriesNames = temporalLine?.seriesCount\n        ? genCategories('Category', temporalLine.seriesCount) : [];\n    const timePoints = temporalLine\n        ? genDates(temporalLine.pointsPerSeries) : [];\n\n    for (const facet of facets) {\n        if (temporalLine) {\n            const series = seriesNames.length > 0 ? seriesNames : [''];\n            for (const s of series) {\n                for (const t of timePoints) {\n                    const row: Record<string, any> = {\n                        Date: t,\n                        Value: Math.round(50 + rand() * 500),\n                        ...(facet.col != null ? { Col: facet.col } : {}),\n                        ...(facet.row != null ? { Row: facet.row } : {}),\n                    };\n                    if (s) row['Series'] = s;\n                    data.push(row);\n                }\n            }\n        } else if (continuousXY) {\n            for (let i = 0; i < 20; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            for (const cat of xCategories) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {};\n    const fields: ReturnType<typeof makeField>[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (temporalLine) {\n        encodingMap.x = makeEncodingItem('Date');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Date'), makeField('Value'));\n        metadata['Date'] = { type: Type.Date, semanticType: 'Time', levels: [] };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        if (seriesNames.length > 0) {\n            encodingMap.color = makeEncodingItem('Series');\n            fields.push(makeField('Series'));\n            metadata['Series'] = { type: Type.String, semanticType: 'Category', levels: seriesNames };\n        }\n    } else if (continuousXY) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Amount', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap };\n}\n\n/**\n * Overflowed Column facets — enough column facet values that the layout\n * must clip/wrap, combined with discrete (banded) or continuous axes.\n *\n * Tests that computeFacetGrid correctly caps and wraps column-only facets.\n */\nexport function genFacetOverflowedColTests(): TestCase[] {\n    return [\n        // 20 columns with 30 discrete x values each — banded axis makes\n        // each subplot wide, so far fewer columns fit than with continuous.\n        buildOverflowFacetTest({\n            title: '20 Cols × 30 Discrete — Bar (banded overflow)',\n            description: '20 column facets, 30 bars each. Banded x-axis forces wide subplots — heavy overflow + wrap.',\n            tags: ['facet', 'column', 'overflow', 'banded', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 20,\n            xBandedCount: 30,\n            seed: 1300,\n        }),\n        // 20 columns with continuous x × y — smaller subplots fit more columns.\n        buildOverflowFacetTest({\n            title: '20 Cols — Scatter (continuous overflow)',\n            description: '20 column facets with scatter plots. Continuous axes allow more columns before overflow.',\n            tags: ['facet', 'column', 'overflow', 'continuous', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 20,\n            continuousXY: true,\n            seed: 1301,\n        }),\n        // 10 columns with temporal line charts — many time points per panel.\n        // AR-based min subplot width should make panels wider → fewer columns.\n        buildOverflowFacetTest({\n            title: '10 Cols × 50 Dates — Line (temporal overflow)',\n            description: '10 column facets, each with 50 time points. Line chart AR prefers landscape → wider min subplots.',\n            tags: ['facet', 'column', 'overflow', 'temporal', 'line'],\n            chartType: 'Line Chart',\n            colCount: 10,\n            temporalLine: { pointsPerSeries: 50 },\n            seed: 1302,\n        }),\n        // 8 columns with multi-series temporal lines — 3 series × 30 dates.\n        buildOverflowFacetTest({\n            title: '8 Cols × 3 Series × 30 Dates — Line (multi-series)',\n            description: '8 column facets, 3 color series each with 30 dates. Connected marks want wider panels.',\n            tags: ['facet', 'column', 'overflow', 'temporal', 'line', 'color'],\n            chartType: 'Line Chart',\n            colCount: 8,\n            temporalLine: { pointsPerSeries: 30, seriesCount: 3 },\n            seed: 1303,\n        }),\n        // 20 columns with temporal line — heavy overflow, should wrap.\n        buildOverflowFacetTest({\n            title: '20 Cols × 40 Dates — Line (heavy overflow)',\n            description: '20 column facets with 40 time points each. Needs wrap — but wider min subplots mean fewer cols per row.',\n            tags: ['facet', 'column', 'overflow', 'temporal', 'line', 'wrap'],\n            chartType: 'Line Chart',\n            colCount: 20,\n            temporalLine: { pointsPerSeries: 40 },\n            seed: 1304,\n        }),\n    ];\n}\n\n/**\n * Overflowed Column + Row facets — both dimensions exceed comfortable\n * capacity, requiring independent capping on each axis.\n *\n * With canvas 400×300 and minSubplotSize 60:\n *   - 20 bars → minSubplotWidth = max(60, 20×6) = 120 → maxFacetCols = floor(600/120) = 5\n *   - continuous y → minSubplotHeight = 60 → maxFacetRows = floor(450/60) = 7\n *   So 8 cols clips to 5, 10 rows clips to 7.\n */\nexport function genFacetOverflowedColRowTests(): TestCase[] {\n    return [\n        // 8 cols × 10 rows, 20 bars each → clips to ~5×7.\n        buildOverflowFacetTest({\n            title: '8×10 Col×Row × 20 Bars (overflow both)',\n            description: '8 columns × 10 rows, 20 bars each. Both dimensions overflow: cols clip to ~5, rows to ~7.',\n            tags: ['facet', 'colrow', 'overflow', 'bar'],\n            chartType: 'Bar Chart',\n            colCount: 8,\n            rowCount: 10,\n            xBandedCount: 20,\n            seed: 1310,\n        }),\n        // 15 cols × 12 rows, scatter → clips to ~10×7 (continuous needs only 60px).\n        buildOverflowFacetTest({\n            title: '15×12 Col×Row — Scatter (extreme overflow)',\n            description: '15 columns × 12 rows = 180 panels (scatter). Both dimensions far exceed budget.',\n            tags: ['facet', 'colrow', 'overflow', 'extreme', 'scatter'],\n            chartType: 'Scatter Plot',\n            colCount: 15,\n            rowCount: 12,\n            continuousXY: true,\n            seed: 1311,\n        }),\n    ];\n}\n\n/**\n * Overflowed Row facets — enough row facet values that the layout\n * must clip vertically.\n */\nexport function genFacetOverflowedRowTests(): TestCase[] {\n    return [\n        // 15 rows with 10 bars each.\n        buildOverflowFacetTest({\n            title: '15 Rows — Bar (row overflow)',\n            description: '15 row facets, 10 bars each. Vertical overflow requiring row clipping.',\n            tags: ['facet', 'row', 'overflow', 'bar'],\n            chartType: 'Bar Chart',\n            rowCount: 15,\n            xBandedCount: 10,\n            seed: 1320,\n        }),\n        // 12 rows, scatter — vertical overflow.\n        buildOverflowFacetTest({\n            title: '12 Rows — Scatter (row overflow)',\n            description: '12 row facets with scatter plots. Tests vertical clipping.',\n            tags: ['facet', 'row', 'overflow', 'scatter'],\n            chartType: 'Scatter Plot',\n            rowCount: 12,\n            continuousXY: true,\n            seed: 1321,\n        }),\n    ];\n}\n\n// ============================================================================\n// Dense Line + Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a dense-line facet test case.\n *\n * Generates a Line Chart with many overlapping color series (like\n * rolling-correlation curves) faceted into `colCount` column panels.\n * Each panel shares the same temporal x-axis and the same set of color\n * series, mimicking real-world dashboards such as \"Rolling Correlations\n * Between Energy and Food Prices\".\n */\nfunction buildDenseLineFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    colCount: number;\n    colorCount: number;\n    timePoints: number;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, colCount, colorCount, timePoints, seed } = opts;\n    const rand = seededRandom(seed);\n\n    const facetVals = genCategories('Category', colCount);\n    const colorVals = genCategories('Product', colorCount);\n    const dates = genDates(timePoints, 2008);\n\n    const data: Record<string, any>[] = [];\n    for (const facet of facetVals) {\n        for (const series of colorVals) {\n            for (const date of dates) {\n                data.push({\n                    Date: date,\n                    Value: Math.round((rand() * 2 - 1) * 1000) / 1000, // range -1..1\n                    Series: series,\n                    Facet: facet,\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n        x: makeEncodingItem('Date'),\n        y: makeEncodingItem('Value'),\n        color: makeEncodingItem('Series'),\n        column: makeEncodingItem('Facet'),\n    };\n\n    const fields = [\n        makeField('Date'),\n        makeField('Value'),\n        makeField('Series'),\n        makeField('Facet'),\n    ];\n\n    const metadata: Record<string, any> = {\n        Date: { type: Type.Date, semanticType: 'Date', levels: dates },\n        Value: { type: Type.Number, semanticType: 'Value', levels: [] },\n        Series: { type: Type.String, semanticType: 'Category', levels: colorVals },\n        Facet: { type: Type.String, semanticType: 'Category', levels: facetVals },\n    };\n\n    return { title, description, tags, chartType: 'Line Chart', data, fields, metadata, encodingMap };\n}\n\n/**\n * Dense Line + Facet tests — many overlapping color series within each\n * facet panel.  Tests layout, legend, and readability when both the\n * number of lines per panel and the number of facet columns are high.\n *\n * Covers 3, 4, 5, and 6 column facets with 8 color series each.\n */\nexport function genFacetDenseLineTests(): TestCase[] {\n    return [\n        // 3 columns × 8 lines — similar to the rolling-correlation dashboard\n        buildDenseLineFacetTest({\n            title: '3 Cols × 8 Lines — Dense Line',\n            description: '3 column facets, each with 8 overlapping line series. Tests dense multi-series readability.',\n            tags: ['facet', 'column', 'dense-line', 'line'],\n            colCount: 3,\n            colorCount: 8,\n            timePoints: 60,\n            seed: 1400,\n        }),\n        // 4 columns × 8 lines\n        buildDenseLineFacetTest({\n            title: '4 Cols × 8 Lines — Dense Line',\n            description: '4 column facets, each with 8 overlapping line series. Tighter panels than 3-col.',\n            tags: ['facet', 'column', 'dense-line', 'line'],\n            colCount: 4,\n            colorCount: 8,\n            timePoints: 60,\n            seed: 1401,\n        }),\n        // 5 columns × 8 lines\n        buildDenseLineFacetTest({\n            title: '5 Cols × 8 Lines — Dense Line',\n            description: '5 column facets, each with 8 overlapping line series. Panels start getting narrow.',\n            tags: ['facet', 'column', 'dense-line', 'line'],\n            colCount: 5,\n            colorCount: 8,\n            timePoints: 60,\n            seed: 1402,\n        }),\n        // 6 columns × 8 lines\n        buildDenseLineFacetTest({\n            title: '6 Cols × 8 Lines — Dense Line',\n            description: '6 column facets, each with 8 overlapping line series. Heavy layout pressure — tests wrap/clip.',\n            tags: ['facet', 'column', 'dense-line', 'line'],\n            colCount: 6,\n            colorCount: 8,\n            timePoints: 60,\n            seed: 1403,\n        }),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Channel, EncodingItem } from './df-types';\nimport { AssembleOptions } from '../core/types';\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom, genCategories } from './generators';\n\n// ------ Overflow / Discrete Value Capping ------\nexport function genOverflowTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(777);\n\n    // Helper: generate N category names\n    const cats = (prefix: string, n: number) => {\n        const pad = String(n).length;\n        return Array.from({ length: n }, (_, i) => `${prefix}${String(i + 1).padStart(pad, '0')}`);\n    };\n\n    // ---- 1. Bar chart: increasing x cardinality ----\n    for (const n of [50, 100, 150, 200]) {\n        const categories = cats('Cat', n);\n        const data = categories.map(c => ({ Category: c, Sales: Math.round(10 + rand() * 500) }));\n        tests.push({\n            title: `Bar — ${n} x-categories`,\n            description: `Bar chart with ${n} discrete x values to test capping`,\n            tags: ['overflow', 'bar', `n-${n}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // ---- 2. Horizontal bar: increasing y cardinality ----\n    for (const n of [50, 100, 200]) {\n        const categories = cats('Item', n);\n        const data = categories.map(c => ({ Item: c, Revenue: Math.round(10 + rand() * 800) }));\n        tests.push({\n            title: `Horiz Bar — ${n} y-categories`,\n            description: `Horizontal bar chart with ${n} discrete y values`,\n            tags: ['overflow', 'bar', 'horizontal', `n-${n}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Revenue')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('Item'), x: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // ---- 3. Grouped bar: x × color overflow ----\n    for (const [xN, colorN] of [[30, 5], [50, 5], [80, 3], [50, 10]] as const) {\n        const xCats = cats('Product', xN);\n        const colors = cats('Region', colorN);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const c of colors) {\n                data.push({ Product: x, Region: c, Sales: Math.round(10 + rand() * 400) });\n            }\n        }\n        tests.push({\n            title: `Grouped — ${xN}x × ${colorN}color`,\n            description: `Grouped bar: ${xN} x-values × ${colorN} color groups = ${xN * colorN} sub-bars`,\n            tags: ['overflow', 'grouped', `x-${xN}`, `color-${colorN}`],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Region'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // ---- 4. Stacked bar: many x values ----\n    for (const n of [50, 150]) {\n        const xCats = cats('City', n);\n        const segments = cats('Seg', 3);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const s of segments) {\n                data.push({ City: x, Segment: s, Amount: Math.round(10 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: `Stacked — ${n} x-categories`,\n            description: `Stacked bar with ${n} x values and 3 segments`,\n            tags: ['overflow', 'stacked', `n-${n}`],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Segment'), makeField('Amount')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('City'),\n                y: makeEncodingItem('Amount'),\n                color: makeEncodingItem('Segment'),\n            },\n        });\n    }\n\n    // ---- 5. Heatmap: large x × large y ----\n    for (const [xN, yN] of [[30, 30], [80, 20], [50, 50]] as const) {\n        const xCats = cats('Col', xN);\n        const yCats = cats('Row', yN);\n        const data: any[] = [];\n        for (const x of xCats) {\n            for (const y of yCats) {\n                data.push({ Col: x, Row: y, Value: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: `Heatmap — ${xN}x × ${yN}y`,\n            description: `Heatmap with ${xN}×${yN} = ${xN * yN} cells`,\n            tags: ['overflow', 'heatmap', `x-${xN}`, `y-${yN}`],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Col'), makeField('Row'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Col'),\n                y: makeEncodingItem('Row'),\n                color: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    // ---- 6. Large color cardinality (numeric on color) ----\n    {\n        const countries = cats('Country', 5);\n        const data: any[] = [];\n        for (const c of countries) {\n            for (let age = 15; age <= 85; age++) {\n                data.push({ Country: c, Age: age, Count: Math.round(50 + rand() * 200) });\n            }\n        }\n        tests.push({\n            title: `Color overflow — 71 numeric values`,\n            description: `Age 15-85 on color channel (71 unique values)`,\n            tags: ['overflow', 'color', 'numeric-color'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Country'), makeField('Age'), makeField('Count')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                x: makeEncodingItem('Country'),\n                y: makeEncodingItem('Count'),\n                color: makeEncodingItem('Age'),\n            },\n        });\n    }\n\n    // ---- 7. Boxplot with many categories ----\n    for (const n of [50, 120]) {\n        const categories = cats('Group', n);\n        const data: any[] = [];\n        for (const c of categories) {\n            for (let i = 0; i < 10; i++) {\n                data.push({ Group: c, Score: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: `Boxplot — ${n} groups`,\n            description: `Boxplot with ${n} discrete groups on x-axis`,\n            tags: ['overflow', 'boxplot', `n-${n}`],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Group'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Score') },\n        });\n    }\n\n    // ---- 8. Faceted + overflow within subplots ----\n    {\n        const regions = cats('Region', 4);\n        const products = cats('Prod', 80);\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const p of products) {\n                data.push({ Region: r, Product: p, Sales: Math.round(10 + rand() * 500) });\n            }\n        }\n        tests.push({\n            title: `Facet + 80 x-categories`,\n            description: `4 column facets each with 80 x-categories`,\n            tags: ['overflow', 'facet', 'n-80'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Product'), makeField('Sales')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                column: makeEncodingItem('Region'),\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n            },\n        });\n    }\n\n    // ---- 9. Many facet columns with small discrete x ----\n    for (const [facetN, xN] of [[8, 3], [12, 4], [15, 2], [20, 3]] as const) {\n        const facets = cats('Panel', facetN);\n        const xCats = cats('Type', xN);\n        const data: any[] = [];\n        for (const f of facets) {\n            for (const x of xCats) {\n                data.push({ Panel: f, Type: x, Value: Math.round(10 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: `${facetN} facets × ${xN} x-bars`,\n            description: `${facetN} column facets, each with only ${xN} x-categories — thin subplots`,\n            tags: ['overflow', 'facet', 'thin', `facet-${facetN}`, `x-${xN}`],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Panel'), makeField('Type'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: {\n                column: makeEncodingItem('Panel'),\n                x: makeEncodingItem('Type'),\n                y: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ------ Elasticity & Stretch Comparison ------\nexport function genElasticityTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(999);\n\n    // ========== Helper to build a bar-chart test case with given layout ==========\n    function makeBarTest(\n        title: string,\n        description: string,\n        tags: string[],\n        xCategories: string[],\n        assembleOptions: AssembleOptions,\n        facetCategories?: string[],\n    ): TestCase {\n        const data: Record<string, any>[] = [];\n        if (facetCategories) {\n            for (const f of facetCategories) {\n                for (const x of xCategories) {\n                    data.push({ Panel: f, Category: x, Value: Math.round(10 + rand() * 500) });\n                }\n            }\n        } else {\n            for (const x of xCategories) {\n                data.push({ Category: x, Value: Math.round(10 + rand() * 500) });\n            }\n        }\n\n        const fields = facetCategories\n            ? [makeField('Panel'), makeField('Category'), makeField('Value')]\n            : [makeField('Category'), makeField('Value')];\n\n        const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n            x: makeEncodingItem('Category'),\n            y: makeEncodingItem('Value'),\n        };\n        if (facetCategories) {\n            encodingMap.column = makeEncodingItem('Panel');\n        }\n\n        return {\n            title,\n            description,\n            tags,\n            chartType: 'Bar Chart',\n            data,\n            fields,\n            metadata: buildMetadata(data),\n            encodingMap,\n            assembleOptions,\n        };\n    }\n\n    // =========================================================================\n    // Group A: Axis-only (no facets) — compare elasticity / maxStretch\n    // =========================================================================\n    const mediumCategories = genCategories('Country', 15);\n    const largeCategories = genCategories('Name', 30);\n\n    // A1: 15 x-categories — default\n    tests.push(makeBarTest(\n        '15 bars — default (e=0.5, s=2)',\n        '15 x-categories, default axis elasticity & stretch',\n        ['axis-only', 'medium', 'default'],\n        mediumCategories,\n        { elasticity: 0.5, maxStretch: 2 },\n    ));\n\n    // A2: 15 x-categories — low elasticity\n    tests.push(makeBarTest(\n        '15 bars — low axis (e=0.2, s=1.2)',\n        '15 x-categories, conservative axis stretch',\n        ['axis-only', 'medium', 'low'],\n        mediumCategories,\n        { elasticity: 0.2, maxStretch: 1.2 },\n    ));\n\n    // A3: 15 x-categories — high elasticity\n    tests.push(makeBarTest(\n        '15 bars — high axis (e=0.8, s=3)',\n        '15 x-categories, aggressive axis stretch',\n        ['axis-only', 'medium', 'high'],\n        mediumCategories,\n        { elasticity: 0.8, maxStretch: 3 },\n    ));\n\n    // A4: 30 x-categories — default\n    tests.push(makeBarTest(\n        '30 bars — default (e=0.5, s=2)',\n        '30 x-categories, default axis elasticity & stretch',\n        ['axis-only', 'large', 'default'],\n        largeCategories,\n        { elasticity: 0.5, maxStretch: 2 },\n    ));\n\n    // A5: 30 x-categories — low\n    tests.push(makeBarTest(\n        '30 bars — low axis (e=0.2, s=1.2)',\n        '30 x-categories, conservative axis stretch',\n        ['axis-only', 'large', 'low'],\n        largeCategories,\n        { elasticity: 0.2, maxStretch: 1.2 },\n    ));\n\n    // A6: 30 x-categories — high\n    tests.push(makeBarTest(\n        '30 bars — high axis (e=0.8, s=3)',\n        '30 x-categories, aggressive axis stretch',\n        ['axis-only', 'large', 'high'],\n        largeCategories,\n        { elasticity: 0.8, maxStretch: 3 },\n    ));\n\n    // =========================================================================\n    // Group B: Facet + axis — compare facet vs axis params independently\n    // =========================================================================\n    const facets8 = genCategories('Department', 8);\n    const bars5 = genCategories('Category', 5);\n    const facets12 = genCategories('Company', 12);\n    const bars8 = genCategories('Category', 8);\n\n    // B1: 8 facets × 5 bars — all defaults\n    tests.push(makeBarTest(\n        '8F × 5B — all default',\n        '8 column facets, 5 bars each, default axis & facet settings',\n        ['facet+axis', 'default'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 2, facetElasticity: 0.3 },\n        facets8,\n    ));\n\n    // B2: 8 facets × 5 bars — conservative facet, default axis\n    tests.push(makeBarTest(\n        '8F × 5B — conservative facet (fe=0.15, ms=1.5)',\n        '8 column facets, 5 bars, conservative unified stretch',\n        ['facet+axis', 'conservative-facet'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 1.5, facetElasticity: 0.15 },\n        facets8,\n    ));\n\n    // B3: 8 facets × 5 bars — aggressive facet, default axis\n    tests.push(makeBarTest(\n        '8F × 5B — aggressive (fe=0.6, ms=2.5)',\n        '8 column facets, 5 bars, aggressive unified stretch',\n        ['facet+axis', 'aggressive-facet'],\n        bars5,\n        { elasticity: 0.5, maxStretch: 2.5, facetElasticity: 0.6 },\n        facets8,\n    ));\n\n    // B4: 12 facets × 8 bars — all defaults\n    tests.push(makeBarTest(\n        '12F × 8B — all default',\n        '12 column facets, 8 bars each, default settings',\n        ['facet+axis', 'large', 'default'],\n        bars8,\n        { elasticity: 0.5, maxStretch: 2, facetElasticity: 0.3 },\n        facets12,\n    ));\n\n    // B5: 12 facets × 8 bars — tight budget, aggressive axis elasticity\n    tests.push(makeBarTest(\n        '12F × 8B — tight (ms=1.5, fe=0.15, e=0.8)',\n        '12 facets, 8 bars, tight unified budget + high axis elasticity',\n        ['facet+axis', 'large', 'mixed-tight-facet'],\n        bars8,\n        { elasticity: 0.8, maxStretch: 1.5, facetElasticity: 0.15 },\n        facets12,\n    ));\n\n    // B6: 12 facets × 8 bars — wide budget, low axis elasticity\n    tests.push(makeBarTest(\n        '12F × 8B — wide (ms=3, fe=0.6, e=0.2)',\n        '12 facets, 8 bars, wide unified budget + low axis elasticity',\n        ['facet+axis', 'large', 'mixed-wide-facet'],\n        bars8,\n        { elasticity: 0.2, maxStretch: 3, facetElasticity: 0.6 },\n        facets12,\n    ));\n\n    // B7: 8 facets × 5 bars — no stretch at all\n    tests.push(makeBarTest(\n        '8F × 5B — no stretch (all 1.0)',\n        '8 column facets, 5 bars, stretch disabled',\n        ['facet+axis', 'no-stretch'],\n        bars5,\n        { elasticity: 0, maxStretch: 1, facetElasticity: 0 },\n        facets8,\n    ));\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gas pressure model test cases (docs/design-stretch-model.md §2).\n *\n * 3 × 3 matrix of scatter plots varying:\n *   Density:       sparse (50 pts)  ×  dense (500 pts)  ×  very dense (3000 pts)\n *   Distribution:  uniform          ×  single cluster   ×  two clusters\n *\n * All use Scatter Plot with quantitative X/Y so the gas pressure model\n * (not the spring model) drives canvas sizing.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Data distribution generators\n// ---------------------------------------------------------------------------\n\n/** Uniform random in [0, 100] × [0, 100] */\nfunction genUniform(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round(rand() * 1000) / 10,\n    }));\n}\n\n/** 70% of points in a tight cluster at (70, 70), rest spread uniformly */\nfunction genSingleCluster(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    const clusterN = Math.round(n * 0.7);\n    const points: { x: number; y: number }[] = [];\n\n    // Dense cluster centered at (70, 70), σ ≈ 5\n    for (let i = 0; i < clusterN; i++) {\n        // Box-Muller approximation using seeded rand\n        const u1 = rand() || 0.001;\n        const u2 = rand();\n        const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n        const z1 = Math.sqrt(-2 * Math.log(u1)) * Math.sin(2 * Math.PI * u2);\n        points.push({\n            x: Math.round((70 + z0 * 5) * 10) / 10,\n            y: Math.round((70 + z1 * 5) * 10) / 10,\n        });\n    }\n\n    // Sparse background\n    for (let i = clusterN; i < n; i++) {\n        points.push({\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round(rand() * 1000) / 10,\n        });\n    }\n    return points;\n}\n\n/** Two clusters: 40% at (25, 25) σ≈5, 40% at (75, 75) σ≈5, 20% uniform */\nfunction genTwoClusters(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    const c1N = Math.round(n * 0.4);\n    const c2N = Math.round(n * 0.4);\n    const points: { x: number; y: number }[] = [];\n\n    const addCluster = (cx: number, cy: number, count: number) => {\n        for (let i = 0; i < count; i++) {\n            const u1 = rand() || 0.001;\n            const u2 = rand();\n            const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n            const z1 = Math.sqrt(-2 * Math.log(u1)) * Math.sin(2 * Math.PI * u2);\n            points.push({\n                x: Math.round((cx + z0 * 5) * 10) / 10,\n                y: Math.round((cy + z1 * 5) * 10) / 10,\n            });\n        }\n    };\n\n    addCluster(25, 25, c1N);\n    addCluster(75, 75, c2N);\n\n    // Sparse background\n    for (let i = c1N + c2N; i < n; i++) {\n        points.push({\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round(rand() * 1000) / 10,\n        });\n    }\n    return points;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builder\n// ---------------------------------------------------------------------------\n\nconst DENSITIES = [\n    { label: 'Sparse', n: 50, tag: 'sparse' },\n    { label: 'Dense', n: 500, tag: 'dense' },\n    { label: 'Very Dense', n: 3000, tag: 'very-dense' },\n] as const;\n\nconst DISTRIBUTIONS = [\n    { label: 'Uniform', gen: genUniform, tag: 'uniform' },\n    { label: 'Single Cluster', gen: genSingleCluster, tag: 'cluster-1' },\n    { label: 'Two Clusters', gen: genTwoClusters, tag: 'cluster-2' },\n] as const;\n\nfunction buildTestCase(\n    densityLabel: string,\n    distLabel: string,\n    n: number,\n    data: { x: number; y: number }[],\n    tags: string[],\n): TestCase {\n    const rows = data.map(p => ({ X: p.x, Y: p.y }));\n    return {\n        title: `${densityLabel} × ${distLabel} (N=${n})`,\n        description: `${n} scatter points, ${distLabel.toLowerCase()} distribution. Tests gas pressure model §2.`,\n        tags: ['gas-pressure', 'scatter', ...tags],\n        chartType: 'Scatter Plot',\n        data: rows,\n        fields: [makeField('X'), makeField('Y')],\n        metadata: {\n            X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('X'),\n            y: makeEncodingItem('Y'),\n        },\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Asymmetric density generators (X and Y have different spreads)\n// ---------------------------------------------------------------------------\n\n/** Wide X range [0,100], narrow Y range [45,55] — horizontal band */\nfunction genWideXNarrowY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round((45 + rand() * 10) * 10) / 10,\n    }));\n}\n\n/** Narrow X range [45,55], wide Y range [0,100] — vertical band */\nfunction genNarrowXWideY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round((45 + rand() * 10) * 10) / 10,\n        y: Math.round(rand() * 1000) / 10,\n    }));\n}\n\n/** Wide X [0,100], Y concentrated in two narrow bands [10-15] and [85-90] */\nfunction genWideXBandedY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => {\n        const band = rand() < 0.5 ? 10 : 85;\n        return {\n            x: Math.round(rand() * 1000) / 10,\n            y: Math.round((band + rand() * 5) * 10) / 10,\n        };\n    });\n}\n\n/** Diagonal stripe: Y ≈ X ± 3 — points cluster along the diagonal */\nfunction genDiagonalStripe(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => {\n        const base = rand() * 100;\n        const u1 = rand() || 0.001;\n        const u2 = rand();\n        const noise = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2) * 3;\n        return {\n            x: Math.round(base * 10) / 10,\n            y: Math.round((base + noise) * 10) / 10,\n        };\n    });\n}\n\n/** X uniform [0,100], Y exponential (most points near 0, tail to ~50) */\nfunction genUniformXExponentialY(n: number, seed: number): { x: number; y: number }[] {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        x: Math.round(rand() * 1000) / 10,\n        y: Math.round(-Math.log(rand() || 0.001) * 10 * 10) / 10,\n    }));\n}\n\nconst ASYMMETRIC_CASES = [\n    { label: 'Wide X, Narrow Y', gen: genWideXNarrowY, tag: 'wide-x-narrow-y',\n      desc: 'X spans full range, Y compressed to 10% — horizontal band' },\n    { label: 'Narrow X, Wide Y', gen: genNarrowXWideY, tag: 'narrow-x-wide-y',\n      desc: 'X compressed to 10%, Y spans full range — vertical band' },\n    { label: 'Wide X, Banded Y', gen: genWideXBandedY, tag: 'wide-x-banded-y',\n      desc: 'X uniform, Y in two narrow bands — two horizontal stripes' },\n    { label: 'Diagonal Stripe', gen: genDiagonalStripe, tag: 'diagonal',\n      desc: 'Points along Y≈X diagonal with σ≈3 noise — linear cluster' },\n    { label: 'Uniform X, Exp Y', gen: genUniformXExponentialY, tag: 'uniform-x-exp-y',\n      desc: 'X uniform, Y exponential — bottom-heavy skew' },\n] as const;\n\n// ---------------------------------------------------------------------------\n// Public generator\n// ---------------------------------------------------------------------------\n\n/**\n * Generate the 3×3 gas-pressure test matrix.\n * Row = density (sparse / dense / very dense)\n * Column = distribution (uniform / single cluster / two clusters)\n */\nexport function genGasPressureTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    let seed = 1000;\n\n    // --- Symmetric density tests (3×3 matrix) ---\n    for (const density of DENSITIES) {\n        for (const dist of DISTRIBUTIONS) {\n            const points = dist.gen(density.n, seed++);\n            tests.push(buildTestCase(\n                density.label,\n                dist.label,\n                density.n,\n                points,\n                [density.tag, dist.tag],\n            ));\n        }\n    }\n\n    // --- Asymmetric X/Y density tests ---\n    // Uses dense (500) and very dense (3000) to show the effect clearly\n    for (const asym of ASYMMETRIC_CASES) {\n        for (const density of [DENSITIES[1], DENSITIES[2]]) {\n            const points = asym.gen(density.n, seed++);\n            tests.push({\n                ...buildTestCase(\n                    density.label,\n                    asym.label,\n                    density.n,\n                    points,\n                    [density.tag, asym.tag, 'asymmetric'],\n                ),\n                description: `${density.n} points, ${asym.desc}.`,\n            });\n        }\n    }\n\n    // --- Per-axis stretch tests: stretch X but not Y ---\n    // Case 1: Many evenly-spaced X values, few distinct Y values.\n    // 1000 points on 200 unique X positions × 5 Y rows → X is dense, Y is sparse.\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,        // 0–100, ~200 unique\n            y: yLevels[Math.floor(r() * yLevels.length)],  // only 5 values\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Stretch X Only (rows)', n, points,\n                ['dense', 'stretch-x', 'per-axis']),\n            description: '1000 points on ~200 unique X positions but only 5 Y rows. X should stretch, Y should not.',\n        });\n    }\n\n    // Case 2: Dense horizontal cluster at center, full Y range.\n    // 800 points with X clustered in [40,60] (σ≈3) but Y uniform [0,100].\n    // X is over-packed in a narrow horizontal band → stretch X.\n    // Y is well-spread → no Y stretch needed.\n    {\n        const r = seededRandom(seed++);\n        const n = 800;\n        const points = Array.from({ length: n }, () => {\n            const u1 = r() || 0.001;\n            const u2 = r();\n            const zx = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n            return {\n                x: Math.round((50 + zx * 3) * 10) / 10,   // tight around 50, σ≈3\n                y: Math.round(r() * 1000) / 10,             // uniform 0–100\n            };\n        });\n        tests.push({\n            ...buildTestCase('Dense', 'Stretch X Only (cluster)', n, points,\n                ['dense', 'stretch-x', 'per-axis', 'cluster-x']),\n            description: '800 points with X clustered at 50±3 but Y uniform [0,100]. X is over-packed, Y is fine.',\n        });\n    }\n\n    // --- maintainContinuousAxisRatio tests ---\n    // Same data as \"Stretch X Only (rows)\" but with the ratio lock on:\n    // both axes should stretch together using the larger factor.\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,\n            y: yLevels[Math.floor(r() * yLevels.length)],\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Ratio Lock ON (rows)', n, points,\n                ['dense', 'ratio-lock', 'per-axis']),\n            description: '1000 points, 200 X positions × 5 Y rows, maintainContinuousAxisRatio=true. Both axes stretch equally.',\n            assembleOptions: { maintainContinuousAxisRatio: true },\n        });\n    }\n    // Same data without ratio lock for comparison\n    {\n        const r = seededRandom(seed++);\n        const yLevels = [10, 30, 50, 70, 90];\n        const n = 1000;\n        const points = Array.from({ length: n }, () => ({\n            x: Math.round(r() * 1000) / 10,\n            y: yLevels[Math.floor(r() * yLevels.length)],\n        }));\n        tests.push({\n            ...buildTestCase('Dense', 'Ratio Lock OFF (rows)', n, points,\n                ['dense', 'no-ratio-lock', 'per-axis']),\n            description: '1000 points, 200 X positions × 5 Y rows, default independent stretch. X stretches, Y does not.',\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Line & Area chart stretch stress tests.\n *\n * Covers 5 scenarios × 2 chart types + boundary cases + vertical (flipped) variants.\n *\n * Scenarios:\n *   A. Many X positions, few series     (200 dates × 3 series = 600 pts)\n *   B. Few X positions, many series     (12 dates × 20 series = 240 pts)\n *   C. Many X positions, many series    (200 dates × 20 series = 4000 pts)\n *   D. Moderate X, 40 series            (100 dates × 40 series = 4000 pts)\n *   E. Moderate X, 60 series            (100 dates × 60 series = 6000 pts)\n *\n * Current line/area params:  { x: 100, y: 20, seriesCountAxis: 'auto' }\n * Default elasticity: 0.3, maxStretch: 1.5\n *\n * Expected stretch (base canvas 400×300):\n *\n *  Scenario A (200×3):\n *    X: uniqueX=200, σ1d=√100=10 → pressure=200×10/400=5.0 → 5.0^0.3=1.62 → capped 1.5\n *    Y: nSeries=3, σ_y=20        → pressure=3×20/300=0.20  → <1, no stretch\n *    → width=600, height=300     ✓ X-only stretch\n *\n *  Scenario B (12×20):\n *    X: uniqueX=12, σ1d=10       → pressure=12×10/400=0.30 → <1, no stretch\n *    Y: nSeries=20, σ_y=20       → pressure=20×20/300=1.33 → 1.33^0.3=1.09\n *    → width=400, height=328     ✓ Mild Y stretch\n *\n *  Scenario C (200×20):\n *    X: pressure=5.0 → capped 1.5\n *    Y: nSeries=20   → pressure=1.33 → 1.09\n *    → width=600, height=328     ✓ X dominant\n *\n *  Scenario D (100×40):\n *    X: uniqueX=100, σ1d=10      → pressure=2.5 → 2.5^0.3=1.32\n *    Y: nSeries=40, σ_y=20       → pressure=2.67 → 2.67^0.3=1.35\n *    → width=528, height=406     ✓ Both axes stretch similarly\n *\n *  Scenario E (100×60):\n *    X: pressure=2.5 → 1.32\n *    Y: nSeries=60, σ_y=20       → pressure=4.0 → 4.0^0.3=1.52 → capped 1.5\n *    → width=528, height=450     ✓ Y hits cap\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genDates } from './generators';\n\n// ---------------------------------------------------------------------------\n// Smooth random walk generator (shared across tests)\n// ---------------------------------------------------------------------------\nfunction makeRandWalk(rand: () => number) {\n    return (n: number, base: number, volatility: number): number[] => {\n        const values: number[] = [base];\n        let momentum = 0;\n        for (let i = 1; i < n; i++) {\n            momentum = 0.65 * momentum + (rand() - 0.5) * volatility;\n            values.push(Math.round(Math.max(0, values[i - 1] + momentum)));\n        }\n        return values;\n    };\n}\n\n// ---------------------------------------------------------------------------\n// Series name pools (realistic)\n// ---------------------------------------------------------------------------\nconst SERIES_3 = ['Revenue', 'Costs', 'Profit'];\nconst SERIES_20 = [\n    'Automotive', 'Banking', 'Construction', 'Defense', 'Energy',\n    'Fashion', 'Gaming', 'Healthcare', 'Insurance', 'Jewelry',\n    'Logistics', 'Manufacturing', 'Networking', 'Oil & Gas', 'Pharma',\n    'Real Estate', 'Retail', 'Software', 'Telecom', 'Utilities',\n];\n\nconst SERIES_40 = [\n    ...SERIES_20,\n    'Agriculture', 'Aerospace', 'Biotech', 'Chemicals', 'Consulting',\n    'Education', 'Entertainment', 'Fintech', 'Forestry', 'Hospitality',\n    'Legal', 'Media', 'Mining', 'Packaging', 'Publishing',\n    'Semiconductors', 'Shipping', 'Sports', 'Textiles', 'Waste Mgmt',\n];\n\nconst SERIES_60 = [\n    ...SERIES_40,\n    'Advertising', 'Architecture', 'Brewing', 'Ceramics', 'Dairy',\n    'E-commerce', 'Fisheries', 'Furniture', 'Genomics', 'HVAC',\n    'Irrigation', 'Journalism', 'Knitwear', 'Lighting', 'Marine',\n    'Nutrition', 'Optics', 'Plumbing', 'Quarrying', 'Robotics',\n];\n\n// ---------------------------------------------------------------------------\n// Generator\n// ---------------------------------------------------------------------------\nexport function genLineAreaStretchTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(8800);\n    const walk = makeRandWalk(rand);\n\n    // Helper to build a multi-series dataset\n    const buildData = (nDates: number, seriesNames: string[], startYear: number) => {\n        const dates = genDates(nDates, startYear);\n        const data: any[] = [];\n        for (const s of seriesNames) {\n            const base = 50 + Math.round(rand() * 300);\n            const vals = walk(nDates, base, 15);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Series: s, Value: vals[i] });\n            }\n        }\n        return { dates, data };\n    };\n\n    // -----------------------------------------------------------------------\n    // Scenario A: Many X (200 dates) × Few series (3)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(200, SERIES_3, 2015);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 200 dates × 3 series (600 pts)`,\n            description: 'Many time points, few series — X should stretch to max, Y mild',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_3 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line A'));\n        tests.push(makeCase('Area Chart', 'Area A'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario B: Few X (12 dates) × Many series (20)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(12, SERIES_20, 2020);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 12 dates × 20 series (240 pts)`,\n            description: 'Few time points, many series — should barely stretch',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line B'));\n        tests.push(makeCase('Area Chart', 'Area B'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario C: Many X (200 dates) × Many series (20)\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(200, SERIES_20, 2010);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 200 dates × 20 series (4000 pts)`,\n            description: 'Dense spaghetti — X should max out, Y moderate',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line C'));\n        tests.push(makeCase('Area Chart', 'Area C'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario D: Many X (100 dates) × 40 series\n    //   X: uniqueX=100, σ1d=√100=10 → pressure=100×10/400=2.5 → 2.5^0.3=1.32\n    //   Y: nSeries=40, σ_y=20       → pressure=40×20/300=2.67  → 2.67^0.3=1.35\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, SERIES_40, 2018);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 100 dates × 40 series (4000 pts)`,\n            description: '40 overlapping series — Y should stretch noticeably',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_40 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line D'));\n        tests.push(makeCase('Area Chart', 'Area D'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Scenario E: Many X (100 dates) × 60 series\n    //   X: uniqueX=100, σ1d=10 → pressure=2.5 → 2.5^0.3=1.32\n    //   Y: nSeries=60, σ_y=20  → pressure=60×20/300=4.0 → 4.0^0.3=1.52 → capped 1.5\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, SERIES_60, 2016);\n        const makeCase = (chartType: string, tag: string): TestCase => ({\n            title: `${tag}: 100 dates × 60 series (6000 pts)`,\n            description: '60 series — Y should hit maxStretch cap',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType,\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_60 },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n        tests.push(makeCase('Line Chart', 'Line E'));\n        tests.push(makeCase('Area Chart', 'Area E'));\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: Very few X (5 dates) × 2 series — should not stretch at all\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(5, ['Actual', 'Forecast'], 2024);\n        tests.push({\n            title: 'Line boundary: 5 dates × 2 series (no stretch)',\n            description: 'Minimal data — no stretch expected',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Actual', 'Forecast'] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: 50 dates × 1 series — single line, moderate X stretch\n    // -----------------------------------------------------------------------\n    {\n        const dates = genDates(50, 2022);\n        const vals = walk(50, 200, 20);\n        const data = dates.map((d, i) => ({ Date: d, Value: vals[i] }));\n        tests.push({\n            title: 'Line boundary: 50 dates × 1 series (single line)',\n            description: 'Single series — X stretch only, no Y stretch',\n            tags: ['temporal', 'quantitative', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Boundary: 100 dates × 8 series — the screenshot case\n    // -----------------------------------------------------------------------\n    {\n        const { data } = buildData(100, ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'], 2015);\n        tests.push({\n            title: 'Line reference: 100 dates × 8 series (800 pts)',\n            description: 'The original screenshot case — should stretch X clearly more than Y',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Vertical (axes-flipped): Y=temporal, X=quantitative\n    // Tests that seriesCountAxis:'auto' correctly resolves when flipped.\n    // In 2D path, auto → Y for standard; when flipped the positional axis\n    // is Y (dates) and the series overlap is on X (values).\n    // -----------------------------------------------------------------------\n\n    // Vertical Line: 100 dates × 8 series\n    {\n        const { data } = buildData(100, ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'], 2017);\n        tests.push({\n            title: 'Vertical Line: 100 dates × 8 series',\n            description: 'Axes flipped — Y=dates, X=values. Series overlap on X axis.',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: ['Auto', 'Books', 'Clothing', 'Electronics', 'Food', 'Garden', 'Home', 'Sports'] },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Line: 200 dates × 20 series (dense spaghetti, flipped)\n    {\n        const { data } = buildData(200, SERIES_20, 2012);\n        tests.push({\n            title: 'Vertical Line: 200 dates × 20 series',\n            description: 'Dense vertical spaghetti — Y should stretch (positional dates), X mild (series)',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_20 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Area: 100 dates × 40 series (stacked, flipped)\n    {\n        const { data } = buildData(100, SERIES_40, 2019);\n        tests.push({\n            title: 'Vertical Area: 100 dates × 40 series',\n            description: 'Vertical stacked area with 40 series — both axes should stretch',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_40 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // Vertical Line: 12 dates × 60 series (extreme, flipped)\n    {\n        const { data } = buildData(12, SERIES_60, 2024);\n        tests.push({\n            title: 'Vertical Line: 12 dates × 60 series',\n            description: 'Extreme series count vertical — X (series axis) should hit cap',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'vertical'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_60 },\n            },\n            encodingMap: { y: makeEncodingItem('Date'), x: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    // -----------------------------------------------------------------------\n    // Faceted dense line: 150 dates × 8 series × 3 column facets\n    //\n    // Exercises the ideal-then-compress approach (§2.8):\n    //   Phase 1: uncapped gas pressure → ideal dimensions\n    //   Phase 2: compress into budget (canvasW × maxStretch / facets)\n    //   Phase 3: AR-aware adjustment using ideal AR as target\n    //\n    // Math (base 400×300, β=2.0, σ_x=100, σ_y=20, seriesCountAxis='auto'→Y):\n    //   Phase 1 — Ideal (uncapped, against base 400×300):\n    //     X positional: ~150 unique, σ1d=10 → p=3.75 → raw 3.75^0.3=1.53\n    //     Y series: 8 series, σ=20 → p=0.53 → raw 1.0\n    //     idealW=400×1.53=612, idealH=300×1.0=300, idealAR=2.04\n    //\n    //   Phase 2 — Compress (budget 400×2=800 total):\n    //     availW = 800/3 ≈ 267, availH = 600 (no row faceting)\n    //     finalW = min(612, 267) = 267, finalH = min(300, 600) = 300\n    //\n    //   Phase 3 — AR correction (R=0.5):\n    //     currentAR=267/300=0.89, arDrift=0.89/2.04=0.44\n    //     finalH = 300 × 0.44^0.5 = 300 × 0.66 = 199\n    //     → subplot 267×199, AR=1.34  ✓ landscape preserved, total=800\n    // -----------------------------------------------------------------------\n    {\n        const FACETS_3 = ['Clothing', 'Electronics', 'Food'];\n        const SERIES_8 = ['Laptop', 'Phone', 'Tablet', 'Desktop', 'Monitor', 'Keyboard', 'Mouse', 'Headphones'];\n        const dates = genDates(150, 2008);\n        const data: any[] = [];\n        for (const facet of FACETS_3) {\n            for (const s of SERIES_8) {\n                const base = Math.round(rand() * 200 - 100);  // range roughly -100..100\n                const vals = walk(150, base, 30);\n                for (let i = 0; i < dates.length; i++) {\n                    data.push({ Date: dates[i], Facet: facet, Series: s, Value: vals[i] });\n                }\n            }\n        }\n        tests.push({\n            title: 'Faceted Line: 150 dates × 8 series × 3 columns',\n            description: 'Dense faceted line — ideal-then-squeeze AR preservation',\n            tags: ['temporal', 'quantitative', 'color', 'stretch-test', 'faceted'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value'), makeField('Series'), makeField('Facet')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: SERIES_8 },\n                Facet: { type: Type.String, semanticType: 'Category', levels: FACETS_3 },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                y: makeEncodingItem('Value'),\n                color: makeEncodingItem('Series'),\n                column: makeEncodingItem('Facet'),\n            },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * ECharts backend comparison tests.\n *\n * Runs the same test inputs through BOTH assembleVegaLite (Vega-Lite) and\n * assembleECharts (ECharts) to verify:\n *   1. Both produce valid output from the same inputs\n *   2. The structural differences are as expected (encoding-based vs series-based)\n *   3. Core analysis phases (semantics, layout, overflow) produce identical results\n *\n * Covers: Scatter Plot, Line Chart, Bar Chart, Stacked Bar Chart, Grouped Bar Chart\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genDates, genMonths } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators — shared across VL and EC\n// ---------------------------------------------------------------------------\n\nfunction genScatterData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Weight: Math.round((40 + rand() * 60) * 10) / 10,\n        Height: Math.round((150 + rand() * 50) * 10) / 10,\n    }));\n}\n\nfunction genScatterColorData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: categories[i % categories.length],\n    }));\n}\n\nfunction genBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const products = ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'];\n    return products.map(p => ({\n        Product: p,\n        Sales: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Revenue: Math.round(1000 + rand() * 5000),\n    }));\n}\n\nfunction genMultiSeriesLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['ProductA', 'ProductB', 'ProductC'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Sales: Math.round(500 + rand() * 2000),\n                Product: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genStackedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genGroupedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const years = ['2022', '2023', '2024'];\n    const departments = ['Sales', 'Engineering', 'Marketing'];\n    const data: any[] = [];\n    for (const y of years) {\n        for (const d of departments) {\n            data.push({\n                Year: y,\n                Budget: Math.round(10000 + rand() * 50000),\n                Department: d,\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\nexport function genEChartsScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic scatter — quant × quant\n    {\n        const data = genScatterData(50, 42);\n        tests.push({\n            title: 'EC: Scatter — Basic Q×Q',\n            description: '50 points, two quantitative axes. Compare VL encoding-based vs EC series-based.',\n            tags: ['echarts', 'scatter', 'quantitative'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // 2. Scatter with color grouping\n    {\n        const data = genScatterColorData(90, 77);\n        tests.push({\n            title: 'EC: Scatter — Color Groups',\n            description: '90 points, 3 groups. VL: one encoding.color; EC: 3 separate series.',\n            tags: ['echarts', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Dense scatter — tests point sizing\n    {\n        const data = genScatterData(500, 99);\n        tests.push({\n            title: 'EC: Scatter — Dense (500 pts)',\n            description: 'Dense scatter plot. VL uses applyPointSizeScaling; EC controls itemStyle.',\n            tags: ['echarts', 'scatter', 'dense'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single series line\n    {\n        const data = genLineData(200);\n        tests.push({\n            title: 'EC: Line — Single Series',\n            description: 'Ordinal x-axis, single line. VL: mark=line; EC: series type=line.',\n            tags: ['echarts', 'line', 'single-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Multi-series line (the key difference test)\n    {\n        const data = genMultiSeriesLineData(300);\n        tests.push({\n            title: 'EC: Line — Multi-Series (3 products)',\n            description: 'Color channel → multiple lines. VL: single spec with color encoding; EC: 3 explicit series with category-aligned data.',\n            tags: ['echarts', 'line', 'multi-series', 'color'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: ['ProductA','ProductB','ProductC'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 3. Multi-series with many categories\n    {\n        const rand = seededRandom(400);\n        const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n        const series = genCategories('Region', 8);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const s of series) {\n                data.push({ Month: m, Value: Math.round(rand() * 1000), Region: s });\n            }\n        }\n        tests.push({\n            title: 'EC: Line — 8 Series × 12 Months',\n            description: 'High series count. VL: one color encoding; EC: 8 separate series objects.',\n            tags: ['echarts', 'line', 'multi-series', 'medium'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value'), makeField('Region')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: series },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple bar\n    {\n        const data = genBarData(500);\n        tests.push({\n            title: 'EC: Bar — Simple (5 bars)',\n            description: 'Nominal x, quantitative y. VL: mark=bar + encoding; EC: series type=bar + xAxis.data.',\n            tags: ['echarts', 'bar', 'simple'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Product', levels: ['Apples','Bananas','Cherries','Dates','Elderberries'] },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 2. Many bars (tests overflow and label rotation)\n    {\n        const rand = seededRandom(501);\n        const cats = genCategories('Item', 25);\n        const data = cats.map(c => ({ Item: c, Count: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'EC: Bar — Many Categories (25)',\n            description: 'Tests label handling. VL: labelAngle in axis config; EC: axisLabel.rotate.',\n            tags: ['echarts', 'bar', 'medium', 'overflow'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Count')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: cats },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Count') },\n        });\n    }\n\n    // 3. Diverging bar (positive + negative values around the zero baseline)\n    {\n        const cats = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'];\n        const vals = [120, -45, 80, -30, 60, -20, 95];\n        const data = cats.map((c, i) => ({ Month: c, NetChange: vals[i] }));\n        tests.push({\n            title: 'EC: Bar — Net Change (diverging)',\n            description: 'Positive and negative values render bars on both sides of the zero baseline.',\n            tags: ['echarts', 'bar', 'diverging'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Month'), makeField('NetChange')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: cats },\n                NetChange: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('NetChange') },\n        });\n    }\n\n    // 4. Clean medium-cardinality categorical bar\n    {\n        const rand = seededRandom(502);\n        const cats = genCategories('Team', 8);\n        const data = cats.map(c => ({ Team: c, Points: Math.round(20 + rand() * 180) }));\n        tests.push({\n            title: 'EC: Bar — 8 Teams',\n            description: 'A clean categorical bar with eight evenly-labelled categories.',\n            tags: ['echarts', 'bar', 'medium'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Team'), makeField('Points')],\n            metadata: {\n                Team: { type: Type.String, semanticType: 'Category', levels: cats },\n                Points: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Team'), y: makeEncodingItem('Points') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsStackedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic stacked bar\n    {\n        const data = genStackedBarData(600);\n        tests.push({\n            title: 'EC: Stacked Bar — 4Q × 4 Regions',\n            description: 'VL: color channel auto-stacks; EC: series[].stack=\"total\" explicit.',\n            tags: ['echarts', 'stacked-bar', 'color'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: ['Q1','Q2','Q3','Q4'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['North','South','East','West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    // 2. Stacked bar with many stacks\n    {\n        const rand = seededRandom(601);\n        const cats = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];\n        const types = genCategories('TaskType', 6);\n        const data: any[] = [];\n        for (const c of cats) {\n            for (const t of types) {\n                data.push({ Day: c, Hours: Math.round(1 + rand() * 8), TaskType: t });\n            }\n        }\n        tests.push({\n            title: 'EC: Stacked Bar — 5 Days × 6 Types',\n            description: 'More stack segments. Tests legend sizing in both backends.',\n            tags: ['echarts', 'stacked-bar', 'medium'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Day'), makeField('Hours'), makeField('TaskType')],\n            metadata: {\n                Day: { type: Type.String, semanticType: 'Category', levels: cats },\n                Hours: { type: Type.Number, semanticType: 'Duration', levels: [] },\n                TaskType: { type: Type.String, semanticType: 'Category', levels: types },\n            },\n            encodingMap: { x: makeEncodingItem('Day'), y: makeEncodingItem('Hours'), color: makeEncodingItem('TaskType') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsGroupedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic grouped bar\n    {\n        const data = genGroupedBarData(700);\n        tests.push({\n            title: 'EC: Grouped Bar — 3 Years × 3 Depts',\n            description: 'VL: group channel → xOffset; EC: multiple series side-by-side (barGap).',\n            tags: ['echarts', 'grouped-bar', 'group'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Year'), makeField('Budget'), makeField('Department')],\n            metadata: {\n                Year: { type: Type.String, semanticType: 'Year', levels: ['2022','2023','2024'] },\n                Budget: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: ['Sales','Engineering','Marketing'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Year'),\n                y: makeEncodingItem('Budget'),\n                group: makeEncodingItem('Department'),\n            },\n        });\n    }\n\n    // 2. Grouped bar with more groups\n    {\n        const rand = seededRandom(701);\n        const categories = ['A', 'B', 'C', 'D'];\n        const groups = genCategories('Method', 5);\n        const data: any[] = [];\n        for (const c of categories) {\n            for (const g of groups) {\n                data.push({ Category: c, Score: Math.round(rand() * 100), Method: g });\n            }\n        }\n        tests.push({\n            title: 'EC: Grouped Bar — 4 Categories × 5 Methods',\n            description: 'More groups per category. Tests bar width calculation in both backends.',\n            tags: ['echarts', 'grouped-bar', 'medium'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Category'), makeField('Score'), makeField('Method')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Method: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Category'),\n                y: makeEncodingItem('Score'),\n                group: makeEncodingItem('Method'),\n            },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Grouped bar — many categories (20 products × 3 groups)\n    {\n        const rand = seededRandom(900);\n        const products = genCategories('Product', 20);\n        const channels = ['Online', 'Retail', 'Wholesale'];\n        const data: any[] = [];\n        for (const p of products) {\n            for (const c of channels) {\n                data.push({ Product: p, Sales: Math.round(100 + rand() * 9000), Channel: c });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 20 Categories × 3 Groups',\n            description: 'Many x-axis categories with grouping. Tests horizontal overflow and label crowding.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'overflow'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales'), makeField('Channel')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Channel: { type: Type.String, semanticType: 'Category', levels: channels },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Product'),\n                y: makeEncodingItem('Sales'),\n                group: makeEncodingItem('Channel'),\n            },\n        });\n    }\n\n    // 2. Grouped bar — many groups (4 quarters × 10 regions)\n    {\n        const rand = seededRandom(901);\n        const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n        const regions = genCategories('Region', 10);\n        const data: any[] = [];\n        for (const q of quarters) {\n            for (const r of regions) {\n                data.push({ Quarter: q, Revenue: Math.round(500 + rand() * 5000), Region: r });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 4 Quarters × 10 Groups',\n            description: 'Few categories but many groups per category. Tests bar width when bands are subdivided heavily.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'many-groups'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Quarter'),\n                y: makeEncodingItem('Revenue'),\n                group: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // 3. Grouped bar — many categories AND many groups (12 months × 6 types)\n    {\n        const rand = seededRandom(902);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        const types = genCategories('Type', 6);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const t of types) {\n                data.push({ Month: m, Count: Math.round(10 + rand() * 200), Type: t });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Grouped Bar — 12 Months × 6 Types',\n            description: 'Both many categories and many groups. Extreme horizontal stretch scenario.',\n            tags: ['echarts', 'grouped-bar', 'stress', 'extreme'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Month'), makeField('Count'), makeField('Type')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n                Type: { type: Type.String, semanticType: 'Category', levels: types },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Month'),\n                y: makeEncodingItem('Count'),\n                group: makeEncodingItem('Type'),\n            },\n        });\n    }\n\n    // 4. Line chart — many x-values (60 days) causing horizontal stretch\n    {\n        const rand = seededRandom(903);\n        const days: string[] = [];\n        for (let i = 1; i <= 60; i++) {\n            const month = Math.ceil(i / 30).toString().padStart(2, '0');\n            const dayOfMonth = ((i - 1) % 30 + 1).toString().padStart(2, '0');\n            days.push(`2024-${month}-${dayOfMonth}`);\n        }\n        const data = days.map(d => ({ Date: d, Value: Math.round(rand() * 500) }));\n        tests.push({\n            title: 'EC Stress: Line — 60 Daily Points',\n            description: 'Many x-axis values on a single line. Tests horizontal stretch and label rotation/density.',\n            tags: ['echarts', 'line', 'stress', 'stretch'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Date'), makeField('Value')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Temporal', levels: days },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 5. Multi-series line — many x-values with multiple series (30 weeks × 5 products)\n    {\n        const rand = seededRandom(904);\n        const weeks: string[] = [];\n        for (let i = 1; i <= 30; i++) weeks.push(`W${i}`);\n        const products = genCategories('Prod', 5);\n        const data: any[] = [];\n        for (const w of weeks) {\n            for (const p of products) {\n                data.push({ Week: w, Sales: Math.round(50 + rand() * 500), Product: p });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Line — 30 Weeks × 5 Products',\n            description: 'Multi-series line with many x-values. Tests legend + horizontal stretch together.',\n            tags: ['echarts', 'line', 'stress', 'multi-series', 'stretch'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Week'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Week: { type: Type.String, semanticType: 'Category', levels: weeks },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n            },\n            encodingMap: { x: makeEncodingItem('Week'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 6. Stacked bar — many categories (15 cities × 4 segments)\n    {\n        const rand = seededRandom(905);\n        const cities = genCategories('City', 15);\n        const segments = ['Residential', 'Commercial', 'Industrial', 'Government'];\n        const data: any[] = [];\n        for (const c of cities) {\n            for (const s of segments) {\n                data.push({ City: c, Spending: Math.round(1000 + rand() * 20000), Segment: s });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Stacked Bar — 15 Cities × 4 Segments',\n            description: 'Many categories with stacking. Tests whether stacked bars maintain adequate width with many x-values.',\n            tags: ['echarts', 'stacked-bar', 'stress', 'overflow'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Spending'), makeField('Segment')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Spending: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Segment: { type: Type.String, semanticType: 'Category', levels: segments },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Spending'), color: makeEncodingItem('Segment') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Area Chart tests\n// ===========================================================================\n\nexport function genEChartsAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single-series area\n    {\n        const rand = seededRandom(1000);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun'];\n        const data = months.map(m => ({ Month: m, Revenue: Math.round(100 + rand() * 900) }));\n        tests.push({\n            title: 'EC: Area — Single Series',\n            description: 'Single area chart. VL: mark=area; EC: line series + areaStyle.',\n            tags: ['echarts', 'area', 'single-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Stacked multi-series area\n    {\n        const rand = seededRandom(1001);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'];\n        const products = ['Desktop', 'Mobile', 'Tablet'];\n        const data: any[] = [];\n        for (const m of months) {\n            for (const p of products) {\n                data.push({ Month: m, Sales: Math.round(50 + rand() * 500), Product: p });\n            }\n        }\n        tests.push({\n            title: 'EC: Area — Stacked 3 Products',\n            description: 'Stacked area. VL: y.stack; EC: series[].stack + areaStyle.',\n            tags: ['echarts', 'area', 'stacked', 'multi-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Pie Chart tests\n// ===========================================================================\n\nexport function genEChartsPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic pie\n    {\n        const data = [\n            { Category: 'Electronics', Revenue: 4500 },\n            { Category: 'Clothing', Revenue: 3200 },\n            { Category: 'Food', Revenue: 2800 },\n            { Category: 'Books', Revenue: 1500 },\n            { Category: 'Sports', Revenue: 900 },\n        ];\n        tests.push({\n            title: 'EC: Pie — 5 Slices',\n            description: 'Basic pie chart. VL: mark=arc + theta; EC: series type=pie.',\n            tags: ['echarts', 'pie', 'basic'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Category'), makeField('Revenue')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: ['Electronics','Clothing','Food','Books','Sports'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Pie with many slices\n    {\n        const rand = seededRandom(1010);\n        const categories = genCategories('Item', 10);\n        const data = categories.map(c => ({ Item: c, Count: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'EC: Pie — 10 Slices',\n            description: 'Many-slice pie. Tests label overlap and legend sizing.',\n            tags: ['echarts', 'pie', 'medium'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Item'), makeField('Count')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Count: { type: Type.Number, semanticType: 'Count', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Item'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Heatmap tests\n// ===========================================================================\n\nexport function genEChartsHeatmapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic heatmap\n    {\n        const rand = seededRandom(1020);\n        const days = ['Mon','Tue','Wed','Thu','Fri'];\n        const hours = ['9am','10am','11am','12pm','1pm','2pm','3pm','4pm','5pm'];\n        const data: any[] = [];\n        for (const d of days) {\n            for (const h of hours) {\n                data.push({ Day: d, Hour: h, Activity: Math.round(rand() * 100) });\n            }\n        }\n        tests.push({\n            title: 'EC: Heatmap — 5 Days × 9 Hours',\n            description: 'Categorical x+y with quantitative color. VL: mark=rect + color scale; EC: heatmap + visualMap.',\n            tags: ['echarts', 'heatmap', 'basic'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Day'), makeField('Hour'), makeField('Activity')],\n            metadata: {\n                Day: { type: Type.String, semanticType: 'Category', levels: days },\n                Hour: { type: Type.String, semanticType: 'Category', levels: hours },\n                Activity: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Day'), y: makeEncodingItem('Hour'), color: makeEncodingItem('Activity') },\n        });\n    }\n\n    // 2. Larger heatmap\n    {\n        const rand = seededRandom(1021);\n        const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        const regions = genCategories('Region', 8);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const r of regions) {\n                data.push({ Month: m, Region: r, Sales: Math.round(rand() * 10000) });\n            }\n        }\n        tests.push({\n            title: 'EC: Heatmap — 12 Months × 8 Regions',\n            description: 'Larger heatmap. Tests color gradient and label density.',\n            tags: ['echarts', 'heatmap', 'medium'],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Month'), makeField('Region'), makeField('Sales')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Region'), color: makeEncodingItem('Sales') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Histogram tests\n// ===========================================================================\n\nexport function genEChartsHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple histogram\n    {\n        const rand = seededRandom(1030);\n        const data = Array.from({ length: 200 }, () => ({\n            Score: Math.round(rand() * 100),\n        }));\n        tests.push({\n            title: 'EC: Histogram — 200 Values',\n            description: 'Single-variable histogram. VL: encoding.x.bin=true; EC: client-side binning.',\n            tags: ['echarts', 'histogram', 'basic'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    // 2. Histogram with color grouping\n    {\n        const rand = seededRandom(1031);\n        const groups = ['Male', 'Female'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const offset = g === 'Male' ? 10 : -5;\n            for (let i = 0; i < 150; i++) {\n                data.push({\n                    Height: Math.round(155 + offset + rand() * 40),\n                    Gender: g,\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Histogram — Stacked by Gender',\n            description: 'Stacked histogram with color grouping.',\n            tags: ['echarts', 'histogram', 'stacked', 'color'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Height'), makeField('Gender')],\n            metadata: {\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Gender: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Height'), color: makeEncodingItem('Gender') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Boxplot tests\n// ===========================================================================\n\nexport function genEChartsBoxplotTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic boxplot — 4 categories\n    {\n        const rand = seededRandom(1040);\n        const categories = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const c of categories) {\n            const base = c === 'Summer' ? 28 : c === 'Winter' ? 5 : 15;\n            for (let i = 0; i < 40; i++) {\n                data.push({\n                    Season: c,\n                    Temperature: Math.round((base + (rand() - 0.5) * 20) * 10) / 10,\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Boxplot — 4 Seasons',\n            description: 'Box-and-whisker per season. VL: mark=boxplot auto-quartiles; EC: client-side quartile computation.',\n            tags: ['echarts', 'boxplot', 'basic'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('Season'), makeField('Temperature')],\n            metadata: {\n                Season: { type: Type.String, semanticType: 'Category', levels: categories },\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Season'), y: makeEncodingItem('Temperature') },\n        });\n    }\n\n    // 2. Boxplot with many categories\n    {\n        const rand = seededRandom(1041);\n        const cities = genCategories('City', 8);\n        const data: any[] = [];\n        for (const c of cities) {\n            for (let i = 0; i < 30; i++) {\n                data.push({\n                    City: c,\n                    Salary: Math.round(30000 + rand() * 70000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Boxplot — 8 Cities',\n            description: 'More categories with salary distributions. Tests box width scaling.',\n            tags: ['echarts', 'boxplot', 'medium'],\n            chartType: 'Boxplot',\n            data,\n            fields: [makeField('City'), makeField('Salary')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Salary: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Salary') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genEChartsRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single-group radar\n    {\n        const data = [\n            { Metric: 'Speed', Value: 80 },\n            { Metric: 'Strength', Value: 70 },\n            { Metric: 'Defense', Value: 90 },\n            { Metric: 'Agility', Value: 65 },\n            { Metric: 'Intelligence', Value: 85 },\n        ];\n        tests.push({\n            title: 'EC: Radar — Single Polygon',\n            description: 'Single-group radar. VL: manual trig + layered marks; EC: native radar series.',\n            tags: ['echarts', 'radar', 'single'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Speed','Strength','Defense','Agility','Intelligence'] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    // 2. Multi-group radar\n    {\n        const metrics = ['Attack', 'Defense', 'Speed', 'HP', 'Special', 'Accuracy'];\n        const groups = ['Warrior', 'Mage', 'Rogue'];\n        const rand = seededRandom(1050);\n        const data: any[] = [];\n        for (const g of groups) {\n            for (const m of metrics) {\n                data.push({ Skill: m, Score: Math.round(30 + rand() * 70), Class: g });\n            }\n        }\n        tests.push({\n            title: 'EC: Radar — 3 Groups × 6 Axes',\n            description: 'Multi-group radar comparison. EC excels here — native polar layout vs VL manual trig.',\n            tags: ['echarts', 'radar', 'multi-group'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Skill'), makeField('Score'), makeField('Class')],\n            metadata: {\n                Skill: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Score: { type: Type.Number, semanticType: 'Score', levels: [] },\n                Class: { type: Type.String, semanticType: 'Category', levels: groups },\n            },\n            encodingMap: { x: makeEncodingItem('Skill'), y: makeEncodingItem('Score'), color: makeEncodingItem('Class') },\n        });\n    }\n\n    // 3. Radar with many axes\n    {\n        const metrics = ['Metric1','Metric2','Metric3','Metric4','Metric5','Metric6','Metric7','Metric8','Metric9','Metric10'];\n        const rand = seededRandom(1051);\n        const data = metrics.map(m => ({ Metric: m, Value: Math.round(20 + rand() * 80) }));\n        tests.push({\n            title: 'EC: Radar — 10 Axes',\n            description: 'Dense radar with many axes. Tests label crowding on spokes.',\n            tags: ['echarts', 'radar', 'dense'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Candlestick Chart\n// ---------------------------------------------------------------------------\n\nexport function genEChartsCandlestickTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n\n    function genOHLC(days: number, startPrice: number) {\n        const data: any[] = [];\n        let price = startPrice;\n        const baseDate = new Date('2024-01-02');\n        for (let i = 0; i < days; i++) {\n            const date = new Date(baseDate);\n            date.setDate(baseDate.getDate() + i);\n            const change = (rand() - 0.48) * 4;\n            const open = Math.round(price * 100) / 100;\n            const close = Math.round((price + change) * 100) / 100;\n            const high = Math.round((Math.max(open, close) + rand() * 2) * 100) / 100;\n            const low = Math.round((Math.min(open, close) - rand() * 2) * 100) / 100;\n            data.push({\n                Date: date.toISOString().slice(0, 10),\n                Open: open, High: high, Low: low, Close: close,\n            });\n            price = close;\n        }\n        return data;\n    }\n\n    // 1. 30-day OHLC\n    {\n        const data = genOHLC(30, 150);\n        tests.push({\n            title: 'EC: Candlestick — 30-day OHLC',\n            description: 'One month stock data. EC: native candlestick series; VL: layered rule+bar.',\n            tags: ['echarts', 'candlestick', 'small'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    // 2. 90-day dense\n    {\n        const data = genOHLC(90, 50);\n        tests.push({\n            title: 'EC: Candlestick — 90-day Dense',\n            description: 'Three months — tests candle width auto-sizing and dataZoom.',\n            tags: ['echarts', 'candlestick', 'medium'],\n            chartType: 'Candlestick Chart',\n            data,\n            fields: [makeField('Date'), makeField('Open'), makeField('High'), makeField('Low'), makeField('Close')],\n            metadata: {\n                Date: { type: Type.String, semanticType: 'Date', levels: [] },\n                Open: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                High: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Low: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Close: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Date'),\n                open: makeEncodingItem('Open'),\n                high: makeEncodingItem('High'),\n                low: makeEncodingItem('Low'),\n                close: makeEncodingItem('Close'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Streamgraph\n// ---------------------------------------------------------------------------\n\nexport function genEChartsStreamgraphTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1150);\n\n    const genFlow = (n: number, base: number, volatility: number): number[] => {\n        const values: number[] = [base];\n        let momentum = 0;\n        for (let i = 1; i < n; i++) {\n            momentum = 0.6 * momentum + (rand() - 0.5) * volatility;\n            values.push(Math.round(Math.max(10, values[i - 1] + momentum)));\n        }\n        return values;\n    };\n\n    // 1. Basic streamgraph — 5 series\n    {\n        const dates = genDates(40, 2020);\n        const genres = ['Rock', 'Pop', 'Jazz', 'Electronic', 'Classical'];\n        const data: any[] = [];\n        for (const g of genres) {\n            const base = 100 + Math.round(rand() * 200);\n            const series = genFlow(40, base, 30);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Genre: g, Listeners: series[i] });\n            }\n        }\n        tests.push({\n            title: 'EC: Streamgraph — 5 Series',\n            description: '40 dates × 5 genres. EC: stacked area with baseline offset; VL: area + y.stack=center.',\n            tags: ['echarts', 'streamgraph', 'medium'],\n            chartType: 'Streamgraph',\n            data,\n            fields: [makeField('Date'), makeField('Listeners'), makeField('Genre')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Listeners: { type: Type.Number, semanticType: 'Quantity', levels: genres },\n                Genre: { type: Type.String, semanticType: 'Category', levels: genres },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Listeners'), color: makeEncodingItem('Genre') },\n        });\n    }\n\n    // 2. Dense streamgraph — 8 series\n    {\n        const dates = genDates(60, 2018);\n        const categories = genCategories('Sector', 8);\n        const data: any[] = [];\n        for (const cat of categories) {\n            const base = 150 + Math.round(rand() * 300);\n            const series = genFlow(60, base, 35);\n            for (let i = 0; i < dates.length; i++) {\n                data.push({ Date: dates[i], Sector: cat, Revenue: series[i] });\n            }\n        }\n        tests.push({\n            title: 'EC: Streamgraph — 8 Series Dense',\n            description: '60 dates × 8 sectors — dense center-stacked flow.',\n            tags: ['echarts', 'streamgraph', 'large'],\n            chartType: 'Streamgraph',\n            data,\n            fields: [makeField('Date'), makeField('Revenue'), makeField('Sector')],\n            metadata: {\n                Date: { type: Type.Date, semanticType: 'Date', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Sector: { type: Type.String, semanticType: 'Category', levels: categories },\n            },\n            encodingMap: { x: makeEncodingItem('Date'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Sector') },\n        });\n    }\n\n    return tests;\n}\n\n// ============================================================================\n// ECharts Facet Tests\n// ============================================================================\n\n/**\n * Helper: build a facet test for dual VL+EC rendering.\n */\nfunction buildEChartsFacetTest(opts: {\n    title: string;\n    description: string;\n    tags: string[];\n    chartType: string;\n    colCount?: number;\n    rowCount?: number;\n    xCategories?: string[];\n    scatter?: boolean;\n    seed: number;\n}): TestCase {\n    const { title, description, tags, chartType, colCount, rowCount, xCategories, scatter, seed } = opts;\n    const rand = seededRandom(seed);\n    const colVals = colCount ? genCategories('Region', colCount) : undefined;\n    const rowVals = rowCount ? genCategories('Zone', rowCount) : undefined;\n\n    const data: any[] = [];\n    const facets: { col?: string; row?: string }[] = [];\n    if (colVals && rowVals) {\n        for (const c of colVals) for (const r of rowVals) facets.push({ col: c, row: r });\n    } else if (colVals) {\n        for (const c of colVals) facets.push({ col: c });\n    } else if (rowVals) {\n        for (const r of rowVals) facets.push({ row: r });\n    }\n\n    for (const facet of facets) {\n        if (scatter) {\n            for (let i = 0; i < 15; i++) {\n                data.push({\n                    X: Math.round(10 + rand() * 90),\n                    Y: Math.round(10 + rand() * 90),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        } else {\n            for (const cat of xCategories!) {\n                data.push({\n                    Category: cat,\n                    Value: Math.round(50 + rand() * 500),\n                    ...(facet.col != null ? { Col: facet.col } : {}),\n                    ...(facet.row != null ? { Row: facet.row } : {}),\n                });\n            }\n        }\n    }\n\n    const encodingMap: Partial<Record<string, any>> = {};\n    const fields: any[] = [];\n    const metadata: Record<string, any> = {};\n\n    if (scatter) {\n        encodingMap.x = makeEncodingItem('X');\n        encodingMap.y = makeEncodingItem('Y');\n        fields.push(makeField('X'), makeField('Y'));\n        metadata['X'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n        metadata['Y'] = { type: Type.Number, semanticType: 'Value', levels: [] };\n    } else {\n        encodingMap.x = makeEncodingItem('Category');\n        encodingMap.y = makeEncodingItem('Value');\n        fields.push(makeField('Category'), makeField('Value'));\n        metadata['Category'] = { type: Type.String, semanticType: 'Category', levels: xCategories };\n        metadata['Value'] = { type: Type.Number, semanticType: 'Amount', levels: [] };\n    }\n\n    if (colVals) {\n        encodingMap.column = makeEncodingItem('Col');\n        fields.push(makeField('Col'));\n        metadata['Col'] = { type: Type.String, semanticType: 'Category', levels: colVals };\n    }\n    if (rowVals) {\n        encodingMap.row = makeEncodingItem('Row');\n        fields.push(makeField('Row'));\n        metadata['Row'] = { type: Type.String, semanticType: 'Category', levels: rowVals };\n    }\n\n    return { title, description, tags, chartType, data, fields, metadata, encodingMap } as TestCase;\n}\n\n/** Small facet counts — columns, rows, col×row */\nexport function genEChartsFacetSmallTests(): TestCase[] {\n    const cats = ['A', 'B', 'C', 'D'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2 Columns — Bar',\n            description: '2 column facets, 4 bars each.',\n            tags: ['echarts', 'facet', 'column', 'small'],\n            chartType: 'Bar Chart', colCount: 2, xCategories: cats, seed: 1300,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 3 Columns — Scatter',\n            description: '3 column facets with scatter plots.',\n            tags: ['echarts', 'facet', 'column', 'small'],\n            chartType: 'Scatter Plot', colCount: 3, scatter: true, seed: 1301,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2 Rows — Bar',\n            description: '2 row facets, 4 bars each.',\n            tags: ['echarts', 'facet', 'row', 'small'],\n            chartType: 'Bar Chart', rowCount: 2, xCategories: cats, seed: 1302,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 3 Rows — Scatter',\n            description: '3 row facets with scatter plots.',\n            tags: ['echarts', 'facet', 'row', 'small'],\n            chartType: 'Scatter Plot', rowCount: 3, scatter: true, seed: 1303,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2×2 Col×Row — Bar',\n            description: '2 columns × 2 rows = 4 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'small'],\n            chartType: 'Bar Chart', colCount: 2, rowCount: 2, xCategories: cats, seed: 1304,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 2×3 Col×Row — Scatter',\n            description: '2 columns × 3 rows = 6 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'small'],\n            chartType: 'Scatter Plot', colCount: 2, rowCount: 3, scatter: true, seed: 1305,\n        }),\n    ];\n}\n\n/** Larger column counts that require horizontal wrapping */\nexport function genEChartsFacetWrapTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 6 Columns — Bar (wrap)',\n            description: '6 column facets × 3 bars. Tests horizontal wrapping.',\n            tags: ['echarts', 'facet', 'column', 'wrap'],\n            chartType: 'Bar Chart', colCount: 6, xCategories: cats, seed: 1310,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 8 Columns — Scatter (wrap)',\n            description: '8 column facets with scatter plots.',\n            tags: ['echarts', 'facet', 'column', 'wrap'],\n            chartType: 'Scatter Plot', colCount: 8, scatter: true, seed: 1311,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 10 Columns — Bar (heavy wrap)',\n            description: '10 column facets. Extreme horizontal wrap.',\n            tags: ['echarts', 'facet', 'column', 'wrap', 'heavy'],\n            chartType: 'Bar Chart', colCount: 10, xCategories: cats, seed: 1312,\n        }),\n    ];\n}\n\n/** Large col×row grids requiring clipping */\nexport function genEChartsFacetClipTests(): TestCase[] {\n    const cats = ['A', 'B', 'C'];\n    return [\n        buildEChartsFacetTest({\n            title: 'EC Facet: 4×3 Col×Row — Bar (12 panels)',\n            description: '4 columns × 3 rows = 12 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'clip'],\n            chartType: 'Bar Chart', colCount: 4, rowCount: 3, xCategories: cats, seed: 1320,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 5×4 Col×Row — Scatter (20 panels)',\n            description: '5 columns × 4 rows = 20 panels.',\n            tags: ['echarts', 'facet', 'colrow', 'clip'],\n            chartType: 'Scatter Plot', colCount: 5, rowCount: 4, scatter: true, seed: 1321,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 6×5 Col×Row — Bar (30 panels)',\n            description: '6 columns × 5 rows = 30 panels. Extreme grid.',\n            tags: ['echarts', 'facet', 'colrow', 'clip', 'heavy'],\n            chartType: 'Bar Chart', colCount: 6, rowCount: 5, xCategories: cats, seed: 1322,\n        }),\n        buildEChartsFacetTest({\n            title: 'EC Facet: 8 Rows — Scatter (vertical clip)',\n            description: '8 row facets. Tests vertical overflow.',\n            tags: ['echarts', 'facet', 'row', 'clip'],\n            chartType: 'Scatter Plot', rowCount: 8, scatter: true, seed: 1323,\n        }),\n    ];\n}\n\n// ===========================================================================\n// Rose Chart tests\n// ===========================================================================\n\nexport function genEChartsRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1400);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'EC: Rose — 8 Directions',\n            description: 'Wind speed by compass direction. VL: arc+theta+radius; EC: series type=bar (polar).',\n            tags: ['echarts', 'rose', 'basic'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — directions × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'EC: Stacked Rose — 8 dirs × 4 seasons',\n            description: 'Stacked wind rose by season. Tests polar stacked bar rendering.',\n            tags: ['echarts', 'rose', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose — 12 months\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'EC: Rose — 12 Months Rainfall',\n            description: 'Monthly rainfall as a rose chart. Tests many-category angular layout.',\n            tags: ['echarts', 'rose', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Gauge Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsGaugeTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    // 1. Basic gauge — single KPI value\n    {\n        const data = [{ Score: 72.5 }];\n        tests.push({\n            title: 'EC: Gauge — Single KPI',\n            description: 'Single-value gauge chart. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'gauge', 'basic'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Score') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 2. Multiple pointers — multi-KPI gauge\n    {\n        const data = [\n            { Metric: 'CPU', Usage: 65 },\n            { Metric: 'Memory', Usage: 82 },\n            { Metric: 'Disk', Usage: 43 },\n        ];\n        tests.push({\n            title: 'EC: Gauge — Multi-Pointer (3 KPIs)',\n            description: 'Three pointers on a single gauge for CPU/Memory/Disk.',\n            tags: ['echarts', 'gauge', 'multi'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Usage')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['CPU', 'Memory', 'Disk'] },\n                Usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Usage'), column: makeEncodingItem('Metric') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 3. Aggregate gauge — average of many values\n    {\n        const data = Array.from({ length: 50 }, () => ({\n            Temperature: Math.round((18 + rand() * 15) * 10) / 10,\n        }));\n        tests.push({\n            title: 'EC: Gauge — Aggregated (50 rows avg)',\n            description: 'Gauge showing average of 50 temperature readings.',\n            tags: ['echarts', 'gauge', 'aggregate'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Temperature')],\n            metadata: {\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Temperature') },\n            chartProperties: { min: 0, max: 50 },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Funnel Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsFunnelTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1600);\n\n    // 1. Basic sales funnel\n    {\n        const stages = ['Visits', 'Signups', 'Trials', 'Purchases', 'Renewals'];\n        const data = stages.map((s, i) => ({\n            Stage: s,\n            Count: Math.round(10000 / Math.pow(2, i) + rand() * 500),\n        }));\n        tests.push({\n            title: 'EC: Funnel — Sales Pipeline',\n            description: 'Classic conversion funnel. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'funnel', 'basic'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Stage'), makeField('Count')],\n            metadata: {\n                Stage: { type: Type.String, semanticType: 'Category', levels: stages },\n                Count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Stage'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    // 2. Recruitment funnel — ascending\n    {\n        const steps = ['Applied', 'Screened', 'Interviewed', 'Offered', 'Hired'];\n        const data = steps.map((s, i) => ({\n            Step: s,\n            Candidates: Math.round(500 / Math.pow(1.8, i) + rand() * 30),\n        }));\n        tests.push({\n            title: 'EC: Funnel — Recruitment (ascending)',\n            description: 'Hiring funnel sorted ascending (narrowest at top).',\n            tags: ['echarts', 'funnel', 'ascending'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Step'), makeField('Candidates')],\n            metadata: {\n                Step: { type: Type.String, semanticType: 'Category', levels: steps },\n                Candidates: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Step'), size: makeEncodingItem('Candidates') },\n            chartProperties: { sort: 'ascending' },\n        });\n    }\n\n    // 3. Many stages\n    {\n        const steps = ['Awareness', 'Interest', 'Consideration', 'Intent',\n                        'Evaluation', 'Trial', 'Purchase', 'Loyalty'];\n        const data = steps.map((s, i) => ({\n            Phase: s,\n            Users: Math.round(50000 / Math.pow(1.5, i) + rand() * 1000),\n        }));\n        tests.push({\n            title: 'EC: Funnel — 8-Stage Marketing',\n            description: 'Marketing funnel with 8 stages. Tests label fitting.',\n            tags: ['echarts', 'funnel', 'many-stages'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Users')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: steps },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Phase'), size: makeEncodingItem('Users') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Treemap tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsTreemapTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1700);\n\n    // 1. Flat treemap — market sectors\n    {\n        const sectors = ['Technology', 'Healthcare', 'Finance', 'Energy', 'Consumer', 'Industrials'];\n        const data = sectors.map(s => ({\n            Sector: s,\n            MarketCap: Math.round(500 + rand() * 4500),\n        }));\n        tests.push({\n            title: 'EC: Treemap — Market Sectors',\n            description: 'Flat treemap of market cap by sector. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'treemap', 'flat'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Sector'), makeField('MarketCap')],\n            metadata: {\n                Sector: { type: Type.String, semanticType: 'Category', levels: sectors },\n                MarketCap: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Sector'), size: makeEncodingItem('MarketCap') },\n        });\n    }\n\n    // 2. Hierarchical treemap — regions → countries\n    {\n        const hierarchy: Record<string, string[]> = {\n            'Americas': ['USA', 'Canada', 'Brazil', 'Mexico'],\n            'Europe': ['UK', 'Germany', 'France', 'Italy'],\n            'Asia': ['China', 'Japan', 'India', 'Korea'],\n        };\n        const data: any[] = [];\n        for (const [region, countries] of Object.entries(hierarchy)) {\n            for (const country of countries) {\n                data.push({\n                    Region: region,\n                    Country: country,\n                    Revenue: Math.round(100 + rand() * 2000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Treemap — Regions × Countries',\n            description: 'Two-level treemap: 3 regions → 4 countries each.',\n            tags: ['echarts', 'treemap', 'hierarchical'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Region'), makeField('Country'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Region'),\n                detail: makeEncodingItem('Country'),\n                size: makeEncodingItem('Revenue'),\n            },\n        });\n    }\n\n    // 3. Large flat treemap — 15 categories\n    {\n        const categories = genCategories('Item', 15);\n        const data = categories.map(c => ({\n            Item: c,\n            Size: Math.round(50 + rand() * 500),\n        }));\n        tests.push({\n            title: 'EC: Treemap — 15 Categories',\n            description: 'Large flat treemap with 15 items. Tests label fitting and color cycling.',\n            tags: ['echarts', 'treemap', 'large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Item'), makeField('Size')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: categories },\n                Size: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Item'), size: makeEncodingItem('Size') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Sunburst Chart tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsSunburstTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1800);\n\n    // 1. Flat sunburst — budget categories\n    {\n        const categories = ['Housing', 'Food', 'Transport', 'Entertainment', 'Savings', 'Healthcare'];\n        const data = categories.map(c => ({\n            Category: c,\n            Amount: Math.round(200 + rand() * 2000),\n        }));\n        tests.push({\n            title: 'EC: Sunburst — Budget Categories',\n            description: 'Single-ring sunburst of budget allocation. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'sunburst', 'flat'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Category'), makeField('Amount')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: categories },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Amount') },\n        });\n    }\n\n    // 2. Two-ring sunburst — departments → teams\n    {\n        const hierarchy: Record<string, string[]> = {\n            'Engineering': ['Frontend', 'Backend', 'Infra', 'QA'],\n            'Product': ['Design', 'PM', 'Research'],\n            'Operations': ['HR', 'Finance', 'Legal'],\n        };\n        const data: any[] = [];\n        for (const [dept, teams] of Object.entries(hierarchy)) {\n            for (const team of teams) {\n                data.push({\n                    Department: dept,\n                    Team: team,\n                    Headcount: Math.round(5 + rand() * 50),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Sunburst — Departments × Teams',\n            description: 'Two-ring sunburst: 3 departments → 3–4 teams each.',\n            tags: ['echarts', 'sunburst', 'hierarchical'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Department'), makeField('Team'), makeField('Headcount')],\n            metadata: {\n                Department: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Team: { type: Type.String, semanticType: 'Category', levels: [] },\n                Headcount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Department'),\n                group: makeEncodingItem('Team'),\n                size: makeEncodingItem('Headcount'),\n            },\n        });\n    }\n\n    // 3. Sunburst with many items\n    {\n        const continents: Record<string, string[]> = {\n            'North America': ['USA', 'Canada', 'Mexico'],\n            'Europe': ['UK', 'France', 'Germany', 'Spain', 'Italy'],\n            'Asia': ['China', 'Japan', 'India', 'Korea', 'Thailand'],\n            'South America': ['Brazil', 'Argentina', 'Chile'],\n        };\n        const data: any[] = [];\n        for (const [cont, countries] of Object.entries(continents)) {\n            for (const country of countries) {\n                data.push({\n                    Continent: cont,\n                    Country: country,\n                    Population: Math.round(10 + rand() * 1400),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC: Sunburst — 4 Continents × Countries',\n            description: 'Two-ring sunburst with 16 countries across 4 continents.',\n            tags: ['echarts', 'sunburst', 'large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Continent'), makeField('Country'), makeField('Population')],\n            metadata: {\n                Continent: { type: Type.String, semanticType: 'Category', levels: Object.keys(continents) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Continent'),\n                group: makeEncodingItem('Country'),\n                size: makeEncodingItem('Population'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Sankey Diagram tests (ECharts-only)\n// ===========================================================================\n\nexport function genEChartsSankeyTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1900);\n\n    // 1. Simple energy flow\n    {\n        const data = [\n            { Source: 'Coal', Target: 'Electricity', Value: 250 },\n            { Source: 'Gas', Target: 'Electricity', Value: 180 },\n            { Source: 'Gas', Target: 'Heating', Value: 120 },\n            { Source: 'Oil', Target: 'Transport', Value: 300 },\n            { Source: 'Oil', Target: 'Industry', Value: 80 },\n            { Source: 'Electricity', Target: 'Residential', Value: 200 },\n            { Source: 'Electricity', Target: 'Industry', Value: 230 },\n            { Source: 'Heating', Target: 'Residential', Value: 120 },\n        ];\n        tests.push({\n            title: 'EC: Sankey — Energy Flow',\n            description: 'Energy source → use Sankey diagram. ECharts-only — no VL equivalent.',\n            tags: ['echarts', 'sankey', 'basic'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Value')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Value'),\n            },\n        });\n    }\n\n    // 2. Website user flow\n    {\n        const data = [\n            { From: 'Home', To: 'Products', Users: 450 },\n            { From: 'Home', To: 'About', Users: 120 },\n            { From: 'Home', To: 'Blog', Users: 200 },\n            { From: 'Products', To: 'Cart', Users: 180 },\n            { From: 'Products', To: 'Details', Users: 270 },\n            { From: 'Details', To: 'Cart', Users: 150 },\n            { From: 'Cart', To: 'Checkout', Users: 200 },\n            { From: 'Blog', To: 'Products', Users: 80 },\n        ];\n        tests.push({\n            title: 'EC: Sankey — Website User Flow',\n            description: 'Page-to-page navigation flow with link width proportional to user count.',\n            tags: ['echarts', 'sankey', 'user-flow'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('From'), makeField('To'), makeField('Users')],\n            metadata: {\n                From: { type: Type.String, semanticType: 'Category', levels: [] },\n                To: { type: Type.String, semanticType: 'Category', levels: [] },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('From'),\n                y: makeEncodingItem('To'),\n                size: makeEncodingItem('Users'),\n            },\n        });\n    }\n\n    // 3. Dense Sankey — budget allocation\n    {\n        const sources = ['Federal', 'State', 'Municipal'];\n        const intermediates = ['Education', 'Healthcare', 'Defense', 'Infrastructure'];\n        const destinations = ['Salaries', 'Equipment', 'Contracts', 'Research'];\n        const data: any[] = [];\n        for (const src of sources) {\n            for (const mid of intermediates) {\n                data.push({ Source: src, Target: mid, Amount: Math.round(50 + rand() * 500) });\n            }\n        }\n        for (const mid of intermediates) {\n            for (const dst of destinations) {\n                data.push({ Source: mid, Target: dst, Amount: Math.round(30 + rand() * 300) });\n            }\n        }\n        tests.push({\n            title: 'EC: Sankey — Budget Flow (3-layer)',\n            description: '3 sources → 4 intermediates → 4 destinations. Tests dense multi-layer layout.',\n            tags: ['echarts', 'sankey', 'dense'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Amount')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Amount'),\n            },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Stress tests for ECharts-only chart types\n// ===========================================================================\n\nexport function genEChartsUniqueStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // ── Gauge stress ─────────────────────────────────────────────────────\n\n    // 1. Gauge — many KPIs (6 pointers side-by-side)\n    {\n        const rand = seededRandom(2000);\n        const metrics = ['CPU', 'Memory', 'Disk', 'Network', 'GPU', 'IO'];\n        const data = metrics.map(m => ({\n            Metric: m,\n            Usage: Math.round(10 + rand() * 90),\n        }));\n        tests.push({\n            title: 'EC Stress: Gauge — 6 KPIs',\n            description: '6 separate gauge dials side-by-side. Tests layout spacing with many gauges.',\n            tags: ['echarts', 'gauge', 'stress'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Usage')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: metrics },\n                Usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Usage'), column: makeEncodingItem('Metric') },\n            chartProperties: { max: 100 },\n        });\n    }\n\n    // 2. Gauge — aggregated from many rows\n    {\n        const rand = seededRandom(2001);\n        const data = Array.from({ length: 200 }, () => ({\n            Latency: Math.round((5 + rand() * 500) * 10) / 10,\n        }));\n        tests.push({\n            title: 'EC Stress: Gauge — Aggregated (200 rows)',\n            description: 'Single gauge averaging 200 latency readings.',\n            tags: ['echarts', 'gauge', 'stress', 'aggregate'],\n            chartType: 'Gauge Chart',\n            data,\n            fields: [makeField('Latency')],\n            metadata: {\n                Latency: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { size: makeEncodingItem('Latency') },\n            chartProperties: { min: 0, max: 500 },\n        });\n    }\n\n    // ── Funnel stress ────────────────────────────────────────────────────\n\n    // 3. Funnel — 12 stages\n    {\n        const rand = seededRandom(2010);\n        const stages = [\n            'Impression', 'View', 'Click', 'Visit', 'Browse',\n            'Add to Cart', 'Checkout Start', 'Address', 'Payment',\n            'Review', 'Confirm', 'Purchase',\n        ];\n        const data = stages.map((s, i) => ({\n            Stage: s,\n            Users: Math.round(100000 / Math.pow(1.4, i) + rand() * 2000),\n        }));\n        tests.push({\n            title: 'EC Stress: Funnel — 12 Stages',\n            description: '12-stage e-commerce funnel. Tests label fitting in narrow trapezoids.',\n            tags: ['echarts', 'funnel', 'stress', 'many-stages'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Stage'), makeField('Users')],\n            metadata: {\n                Stage: { type: Type.String, semanticType: 'Category', levels: stages },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Stage'), size: makeEncodingItem('Users') },\n        });\n    }\n\n    // 4. Funnel — extreme value ratio (top 100× bottom)\n    {\n        const stages = ['Awareness', 'Interest', 'Desire', 'Action', 'Retention'];\n        const values = [100000, 25000, 5000, 800, 120];\n        const data = stages.map((s, i) => ({ Phase: s, Count: values[i] }));\n        tests.push({\n            title: 'EC Stress: Funnel — Extreme Ratio (833:1)',\n            description: 'Top stage is ~833× larger than bottom. Tests rendering of very thin tail stages.',\n            tags: ['echarts', 'funnel', 'stress', 'extreme-ratio'],\n            chartType: 'Funnel Chart',\n            data,\n            fields: [makeField('Phase'), makeField('Count')],\n            metadata: {\n                Phase: { type: Type.String, semanticType: 'Category', levels: stages },\n                Count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { y: makeEncodingItem('Phase'), size: makeEncodingItem('Count') },\n        });\n    }\n\n    // ── Treemap stress ───────────────────────────────────────────────────\n\n    // 5. Treemap — 30 flat categories\n    {\n        const rand = seededRandom(2020);\n        const categories = genCategories('Stock', 30);\n        const data = categories.map(c => ({\n            Stock: c,\n            MarketCap: Math.round(100 + rand() * 5000),\n        }));\n        tests.push({\n            title: 'EC Stress: Treemap — 30 Items (Flat)',\n            description: '30-item flat treemap. Tests label density and color cycling.',\n            tags: ['echarts', 'treemap', 'stress', 'flat-large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Stock'), makeField('MarketCap')],\n            metadata: {\n                Stock: { type: Type.String, semanticType: 'Category', levels: categories },\n                MarketCap: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Stock'), size: makeEncodingItem('MarketCap') },\n        });\n    }\n\n    // 6. Treemap — deep hierarchy (6 regions × 8 products)\n    {\n        const rand = seededRandom(2021);\n        const regions = ['North America', 'Europe', 'Asia Pacific', 'Latin America', 'Middle East', 'Africa'];\n        const products = ['Software', 'Hardware', 'Services', 'Cloud', 'Security', 'Analytics', 'Mobile', 'AI'];\n        const data: any[] = [];\n        for (const r of regions) {\n            for (const p of products) {\n                data.push({\n                    Region: r,\n                    Product: p,\n                    Revenue: Math.round(50 + rand() * 3000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Treemap — 6 Regions × 8 Products (48 leaves)',\n            description: '48-leaf hierarchical treemap. Tests nested labels and color saturation.',\n            tags: ['echarts', 'treemap', 'stress', 'hierarchical-large'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Region'), makeField('Product'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n                Product: { type: Type.String, semanticType: 'Category', levels: products },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Region'),\n                detail: makeEncodingItem('Product'),\n                size: makeEncodingItem('Revenue'),\n            },\n        });\n    }\n\n    // 7. Treemap — extreme value skew (one item dominates)\n    {\n        const rand = seededRandom(2022);\n        const items = ['Dominant', 'Small A', 'Small B', 'Small C', 'Tiny D', 'Tiny E', 'Tiny F', 'Tiny G'];\n        const values = [50000, 800, 600, 400, 100, 80, 50, 30];\n        const data = items.map((item, i) => ({ Category: item, Value: values[i] + Math.round(rand() * 50) }));\n        tests.push({\n            title: 'EC Stress: Treemap — Extreme Skew',\n            description: 'One category dominates (~96% of total). Tests visibility of tiny rectangles.',\n            tags: ['echarts', 'treemap', 'stress', 'skew'],\n            chartType: 'Treemap',\n            data,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: {\n                Category: { type: Type.String, semanticType: 'Category', levels: items },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Category'), size: makeEncodingItem('Value') },\n        });\n    }\n\n    // ── Sunburst stress ──────────────────────────────────────────────────\n\n    // 8. Sunburst — 5 continents × 6 countries (30 outer slices)\n    {\n        const rand = seededRandom(2030);\n        const hierarchy: Record<string, string[]> = {\n            'North America': ['USA', 'Canada', 'Mexico', 'Cuba', 'Jamaica', 'Panama'],\n            'Europe': ['UK', 'France', 'Germany', 'Spain', 'Italy', 'Netherlands'],\n            'Asia': ['China', 'Japan', 'India', 'Korea', 'Thailand', 'Vietnam'],\n            'Africa': ['Nigeria', 'Egypt', 'South Africa', 'Kenya', 'Ghana', 'Morocco'],\n            'Oceania': ['Australia', 'New Zealand', 'Fiji', 'Samoa', 'Tonga', 'Vanuatu'],\n        };\n        const data: any[] = [];\n        for (const [continent, countries] of Object.entries(hierarchy)) {\n            for (const country of countries) {\n                data.push({\n                    Continent: continent,\n                    Country: country,\n                    GDP: Math.round(10 + rand() * 20000),\n                });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sunburst — 5 × 6 (30 outer slices)',\n            description: '30 countries across 5 continents. Tests outer-ring label crowding.',\n            tags: ['echarts', 'sunburst', 'stress', 'large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Continent'), makeField('Country'), makeField('GDP')],\n            metadata: {\n                Continent: { type: Type.String, semanticType: 'Category', levels: Object.keys(hierarchy) },\n                Country: { type: Type.String, semanticType: 'Country', levels: [] },\n                GDP: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                color: makeEncodingItem('Continent'),\n                group: makeEncodingItem('Country'),\n                size: makeEncodingItem('GDP'),\n            },\n        });\n    }\n\n    // 9. Sunburst — flat with 20 slices\n    {\n        const rand = seededRandom(2031);\n        const categories = genCategories('Expense', 20);\n        const data = categories.map(c => ({\n            Expense: c,\n            Amount: Math.round(100 + rand() * 5000),\n        }));\n        tests.push({\n            title: 'EC Stress: Sunburst — 20 Flat Slices',\n            description: 'Single-ring sunburst with 20 categories. Tests label overlap on thin slices.',\n            tags: ['echarts', 'sunburst', 'stress', 'flat-large'],\n            chartType: 'Sunburst Chart',\n            data,\n            fields: [makeField('Expense'), makeField('Amount')],\n            metadata: {\n                Expense: { type: Type.String, semanticType: 'Category', levels: categories },\n                Amount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Expense'), size: makeEncodingItem('Amount') },\n        });\n    }\n\n    // ── Sankey stress ────────────────────────────────────────────────────\n\n    // 10. Sankey — 4-layer deep (5 → 6 → 6 → 4 = 21 nodes, ~70 links)\n    {\n        const rand = seededRandom(2040);\n        const layer1 = ['Source A', 'Source B', 'Source C', 'Source D', 'Source E'];\n        const layer2 = genCategories('Process', 6);\n        const layer3 = genCategories('Output', 6);\n        const layer4 = ['Final X', 'Final Y', 'Final Z', 'Final W'];\n        const data: any[] = [];\n        for (const s of layer1) {\n            for (const p of layer2) {\n                if (rand() > 0.4) {\n                    data.push({ Source: s, Target: p, Flow: Math.round(20 + rand() * 300) });\n                }\n            }\n        }\n        for (const p of layer2) {\n            for (const o of layer3) {\n                if (rand() > 0.35) {\n                    data.push({ Source: p, Target: o, Flow: Math.round(10 + rand() * 200) });\n                }\n            }\n        }\n        for (const o of layer3) {\n            for (const f of layer4) {\n                if (rand() > 0.3) {\n                    data.push({ Source: o, Target: f, Flow: Math.round(5 + rand() * 150) });\n                }\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — 4-Layer Deep (~70 links)',\n            description: '5 sources → 6 processes → 6 outputs → 4 finals. Tests multi-layer routing.',\n            tags: ['echarts', 'sankey', 'stress', 'deep'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Source'), makeField('Target'), makeField('Flow')],\n            metadata: {\n                Source: { type: Type.String, semanticType: 'Category', levels: [] },\n                Target: { type: Type.String, semanticType: 'Category', levels: [] },\n                Flow: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Source'),\n                y: makeEncodingItem('Target'),\n                size: makeEncodingItem('Flow'),\n            },\n        });\n    }\n\n    // 11. Sankey — wide fan-out (2 sources → 15 targets)\n    {\n        const rand = seededRandom(2041);\n        const sources = ['Revenue', 'Funding'];\n        const targets = genCategories('Dept', 15);\n        const data: any[] = [];\n        for (const s of sources) {\n            for (const t of targets) {\n                data.push({ From: s, To: t, Budget: Math.round(100 + rand() * 5000) });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — Wide Fan-Out (2 → 15)',\n            description: '2 sources distributing to 15 departments. Tests node stacking with many targets.',\n            tags: ['echarts', 'sankey', 'stress', 'fan-out'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('From'), makeField('To'), makeField('Budget')],\n            metadata: {\n                From: { type: Type.String, semanticType: 'Category', levels: sources },\n                To: { type: Type.String, semanticType: 'Category', levels: targets },\n                Budget: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('From'),\n                y: makeEncodingItem('To'),\n                size: makeEncodingItem('Budget'),\n            },\n        });\n    }\n\n    // 12. Sankey — dense mesh (8 × 8 = 64 links)\n    {\n        const rand = seededRandom(2042);\n        const left = genCategories('Origin', 8);\n        const right = genCategories('Dest', 8);\n        const data: any[] = [];\n        for (const l of left) {\n            for (const r of right) {\n                data.push({ Origin: l, Dest: r, Volume: Math.round(10 + rand() * 500) });\n            }\n        }\n        tests.push({\n            title: 'EC Stress: Sankey — Dense Mesh (8 × 8 = 64 links)',\n            description: 'Fully connected 8→8 network. Tests link crossing and visual clarity.',\n            tags: ['echarts', 'sankey', 'stress', 'mesh'],\n            chartType: 'Sankey Diagram',\n            data,\n            fields: [makeField('Origin'), makeField('Dest'), makeField('Volume')],\n            metadata: {\n                Origin: { type: Type.String, semanticType: 'Category', levels: left },\n                Dest: { type: Type.String, semanticType: 'Category', levels: right },\n                Volume: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('Origin'),\n                y: makeEncodingItem('Dest'),\n                size: makeEncodingItem('Volume'),\n            },\n        });\n    }\n\n    return tests;\n}\n// ---------------------------------------------------------------------------\n// Calendar Heatmap (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nfunction genDailySeries(startISO: string, days: number, seed: number) {\n    const rand = seededRandom(seed);\n    const start = new Date(startISO + 'T00:00:00Z');\n    return Array.from({ length: days }, (_, i) => {\n        const d = new Date(start);\n        d.setUTCDate(start.getUTCDate() + i);\n        const weekday = d.getUTCDay(); // 0 Sun .. 6 Sat\n        const base = weekday === 0 || weekday === 6 ? 2 : 8;\n        const v = Math.max(0, Math.round(base + (rand() - 0.5) * 10));\n        return { date: d.toISOString().slice(0, 10), commits: v };\n    });\n}\n\nexport function genEChartsCalendarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const meta = {\n        date: { type: Type.Date, semanticType: 'Date', levels: [] },\n        commits: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n    };\n    const enc = { x: makeEncodingItem('date'), color: makeEncodingItem('commits') };\n    const fields = [makeField('date'), makeField('commits')];\n\n    // 1. One quarter\n    tests.push({\n        title: 'EC: Calendar Heatmap — One Quarter *',\n        description: '~120 daily values laid out on a calendar; weekdays run higher than weekends.',\n        tags: ['echarts', 'calendar', 'heatmap', 'temporal'],\n        chartType: 'Calendar Heatmap',\n        data: genDailySeries('2023-01-01', 120, 7),\n        fields, metadata: meta, encodingMap: enc,\n    });\n\n    // 2. Full year\n    tests.push({\n        title: 'EC: Calendar Heatmap — Full Year *',\n        description: 'A full year of daily activity (365 cells), GitHub-contributions style.',\n        tags: ['echarts', 'calendar', 'heatmap', 'temporal'],\n        chartType: 'Calendar Heatmap',\n        data: genDailySeries('2023-01-01', 365, 11),\n        fields, metadata: meta, encodingMap: enc,\n    });\n\n    // 3. Multi-year span\n    tests.push({\n        title: 'EC: Calendar Heatmap — 18 Months *',\n        description: 'A range that crosses a year boundary (~550 daily cells).',\n        tags: ['echarts', 'calendar', 'heatmap', 'temporal', 'multi-year'],\n        chartType: 'Calendar Heatmap',\n        data: genDailySeries('2022-06-01', 550, 13),\n        fields, metadata: meta, encodingMap: enc,\n    });\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Parallel Coordinates (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nfunction genCarRows(n: number, seed: number, withOrigin: boolean) {\n    const rand = seededRandom(seed);\n    const origins = ['USA', 'Europe', 'Japan'];\n    const gauss = () => (rand() + rand() + rand() - 1.5); // ~N(0,~0.5)\n    return Array.from({ length: n }, (_, i) => {\n        const origin = origins[i % origins.length];\n        let mpg, hp, wt, acc;\n        if (origin === 'USA') { mpg = 20 + gauss() * 8; hp = 150 + gauss() * 60; wt = 3400 + gauss() * 800; acc = 15 + gauss() * 4; }\n        else if (origin === 'Europe') { mpg = 27 + gauss() * 8; hp = 110 + gauss() * 50; wt = 2800 + gauss() * 700; acc = 16 + gauss() * 4; }\n        else { mpg = 31 + gauss() * 8; hp = 95 + gauss() * 40; wt = 2300 + gauss() * 600; acc = 16.5 + gauss() * 4; }\n        const row: Record<string, any> = {\n            MPG: Math.round(mpg * 10) / 10,\n            Horsepower: Math.round(hp),\n            Weight: Math.round(wt),\n            Acceleration: Math.round(acc * 10) / 10,\n        };\n        if (withOrigin) row.Origin = origin;\n        return row;\n    });\n}\n\nexport function genEChartsParallelTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Grouped by Origin (4 dims, 3 groups)\n    {\n        const data = genCarRows(45, 11, true);\n        tests.push({\n            title: 'EC: Parallel Coordinates — Cars by Origin *',\n            description: '4 quantitative dimensions, lines colored by Origin (3 groups).',\n            tags: ['echarts', 'parallel', 'multivariate', 'color'],\n            chartType: 'Parallel Coordinates',\n            data,\n            fields: [makeField('MPG'), makeField('Horsepower'), makeField('Weight'), makeField('Acceleration'), makeField('Origin')],\n            metadata: {\n                MPG: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Horsepower: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Acceleration: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Origin: { type: Type.String, semanticType: 'Category', levels: ['USA', 'Europe', 'Japan'] },\n            },\n            encodingMap: { color: makeEncodingItem('Origin') },\n            chartProperties: { dimensions: ['MPG', 'Horsepower', 'Weight', 'Acceleration'] },\n        });\n    }\n\n    // 2. Single series (no color)\n    {\n        const data = genCarRows(40, 17, false);\n        tests.push({\n            title: 'EC: Parallel Coordinates — Single Series *',\n            description: '4 quantitative dimensions, no grouping.',\n            tags: ['echarts', 'parallel', 'multivariate'],\n            chartType: 'Parallel Coordinates',\n            data,\n            fields: [makeField('MPG'), makeField('Horsepower'), makeField('Weight'), makeField('Acceleration')],\n            metadata: {\n                MPG: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Horsepower: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Acceleration: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {},\n            chartProperties: { dimensions: ['MPG', 'Horsepower', 'Weight', 'Acceleration'] },\n        });\n    }\n\n    // 3. Six dimensions, more rows\n    {\n        const rand = seededRandom(31);\n        const tiers = ['A', 'B', 'C', 'D'];\n        const data = Array.from({ length: 90 }, (_, i) => ({\n            Speed: Math.round(rand() * 1000) / 10,\n            Power: Math.round(rand() * 1000) / 10,\n            Range: Math.round(rand() * 1000) / 10,\n            Comfort: Math.round(rand() * 1000) / 10,\n            Price: Math.round(rand() * 1000) / 10,\n            Safety: Math.round(rand() * 1000) / 10,\n            Tier: tiers[i % tiers.length],\n        }));\n        tests.push({\n            title: 'EC: Parallel Coordinates — Six Metrics *',\n            description: '6 quantitative dimensions, 90 rows, 4 groups.',\n            tags: ['echarts', 'parallel', 'multivariate', 'dense'],\n            chartType: 'Parallel Coordinates',\n            data,\n            fields: [makeField('Speed'), makeField('Power'), makeField('Range'), makeField('Comfort'), makeField('Price'), makeField('Safety'), makeField('Tier')],\n            metadata: {\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Power: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Range: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Comfort: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Price: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Safety: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Tier: { type: Type.String, semanticType: 'Category', levels: ['A', 'B', 'C', 'D'] },\n            },\n            encodingMap: { color: makeEncodingItem('Tier') },\n            chartProperties: { dimensions: ['Speed', 'Power', 'Range', 'Comfort', 'Price', 'Safety'] },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Network Graph (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nexport function genEChartsGraphTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const meta = {\n        Source: { type: Type.String, semanticType: 'Category', levels: [] as string[] },\n        Target: { type: Type.String, semanticType: 'Category', levels: [] as string[] },\n        Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] as string[] },\n    };\n    const fields = [makeField('Source'), makeField('Target'), makeField('Weight')];\n    const enc = { x: makeEncodingItem('Source'), y: makeEncodingItem('Target'), size: makeEncodingItem('Weight') };\n\n    // 1. Small team collaboration network (weighted edges)\n    {\n        const people = ['Ana', 'Ben', 'Cara', 'Dan', 'Eve', 'Finn', 'Gia'];\n        const rand = seededRandom(71);\n        const data: any[] = [];\n        for (let i = 0; i < people.length; i++) {\n            for (let j = i + 1; j < people.length; j++) {\n                if (rand() < 0.45) {\n                    data.push({ Source: people[i], Target: people[j], Weight: Math.round(1 + rand() * 9) });\n                }\n            }\n        }\n        // Guarantee connectivity for a clean render.\n        if (data.length < 6) {\n            for (let i = 1; i < people.length; i++) data.push({ Source: people[0], Target: people[i], Weight: 3 });\n        }\n        tests.push({\n            title: 'EC: Network Graph — Team Collaboration *',\n            description: '7 nodes, weighted edges; node size encodes degree, circular layout.',\n            tags: ['echarts', 'graph', 'network'],\n            chartType: 'Network Graph',\n            data,\n            fields, metadata: meta, encodingMap: enc,\n        });\n    }\n\n    // 2. Hub-and-spoke (one dominant node)\n    {\n        const data: any[] = [];\n        const spokes = ['S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8'];\n        const rand = seededRandom(73);\n        for (const s of spokes) data.push({ Source: 'Hub', Target: s, Weight: Math.round(2 + rand() * 8) });\n        // A few peripheral links between spokes.\n        data.push({ Source: 'S1', Target: 'S2', Weight: 1 });\n        data.push({ Source: 'S3', Target: 'S4', Weight: 1 });\n        tests.push({\n            title: 'EC: Network Graph — Hub & Spoke *',\n            description: 'A dominant hub connected to 8 spokes; the hub should render largest.',\n            tags: ['echarts', 'graph', 'network', 'hub'],\n            chartType: 'Network Graph',\n            data,\n            fields, metadata: meta, encodingMap: enc,\n        });\n    }\n\n    // 3. Larger unweighted graph (tests density + sizing)\n    {\n        const n = 16;\n        const nodes = Array.from({ length: n }, (_, i) => `N${i + 1}`);\n        const rand = seededRandom(79);\n        const data: any[] = [];\n        for (let i = 0; i < n; i++) {\n            for (let j = i + 1; j < n; j++) {\n                if (rand() < 0.18) data.push({ Source: nodes[i], Target: nodes[j], Weight: 1 });\n            }\n        }\n        for (let i = 1; i < n; i++) data.push({ Source: nodes[i - 1], Target: nodes[i], Weight: 1 });\n        tests.push({\n            title: 'EC: Network Graph — 16 Nodes (dense) *',\n            description: '16 nodes with many unweighted edges; exercises canvas sizing for larger graphs.',\n            tags: ['echarts', 'graph', 'network', 'dense'],\n            chartType: 'Network Graph',\n            data,\n            fields, metadata: meta, encodingMap: enc,\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Tree (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nexport function genEChartsTreeTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Two-level org / category tree (color + detail + size)\n    {\n        const rand = seededRandom(83);\n        const groups: Record<string, string[]> = {\n            Engineering: ['Backend', 'Frontend', 'Infra', 'QA'],\n            Sales: ['EMEA', 'AMER', 'APAC'],\n            Marketing: ['Brand', 'Growth'],\n            Support: ['Tier 1', 'Tier 2'],\n        };\n        const data: any[] = [];\n        for (const [dept, teams] of Object.entries(groups)) {\n            for (const team of teams) data.push({ Dept: dept, Team: team, Headcount: Math.round(3 + rand() * 20) });\n        }\n        tests.push({\n            title: 'EC: Tree — Org Hierarchy *',\n            description: 'Three levels (root → department → team); leaf value = headcount, left-to-right.',\n            tags: ['echarts', 'tree', 'hierarchy'],\n            chartType: 'Tree',\n            data,\n            fields: [makeField('Dept'), makeField('Team'), makeField('Headcount')],\n            metadata: {\n                Dept: { type: Type.String, semanticType: 'Category', levels: Object.keys(groups) },\n                Team: { type: Type.String, semanticType: 'Category', levels: [] },\n                Headcount: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Dept'), detail: makeEncodingItem('Team'), size: makeEncodingItem('Headcount') },\n        });\n    }\n\n    // 2. Single-level tree (color only → root → categories)\n    {\n        const rand = seededRandom(89);\n        const cats = ['North', 'South', 'East', 'West', 'Central'];\n        const data = cats.map((c) => ({ Region: c, Sales: Math.round(40 + rand() * 120) }));\n        tests.push({\n            title: 'EC: Tree — Regions (single level) *',\n            description: 'Two levels (root → region); no detail channel.',\n            tags: ['echarts', 'tree', 'hierarchy'],\n            chartType: 'Tree',\n            data,\n            fields: [makeField('Region'), makeField('Sales')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: cats },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Region'), size: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 3. Many leaves (tall tree → tests vertical sizing)\n    {\n        const rand = seededRandom(97);\n        const groups = ['A', 'B', 'C', 'D'];\n        const data: any[] = [];\n        for (const g of groups) {\n            const count = 5 + Math.floor(rand() * 4);\n            for (let i = 0; i < count; i++) data.push({ Group: g, Item: `${g}${i + 1}`, Value: Math.round(1 + rand() * 50) });\n        }\n        tests.push({\n            title: 'EC: Tree — Many Leaves *',\n            description: '4 groups with many leaves each; exercises vertical canvas growth.',\n            tags: ['echarts', 'tree', 'hierarchy', 'dense'],\n            chartType: 'Tree',\n            data,\n            fields: [makeField('Group'), makeField('Item'), makeField('Value')],\n            metadata: {\n                Group: { type: Type.String, semanticType: 'Category', levels: groups },\n                Item: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Group'), detail: makeEncodingItem('Item'), size: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Chart.js backend comparison tests.\n *\n * Runs the same test inputs through ALL THREE backends:\n *   assembleVegaLite (Vega-Lite), assembleECharts (ECharts), assembleChartjs (Chart.js)\n *\n * Covers: Scatter Plot, Line Chart, Bar Chart, Stacked Bar Chart,\n *         Grouped Bar Chart, Area Chart, Pie Chart, Histogram, Radar Chart\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom, genCategories, genMonths } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators\n// ---------------------------------------------------------------------------\n\nfunction genScatterData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Weight: Math.round((40 + rand() * 60) * 10) / 10,\n        Height: Math.round((150 + rand() * 50) * 10) / 10,\n    }));\n}\n\nfunction genScatterColorData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const categories = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: categories[i % categories.length],\n    }));\n}\n\nfunction genBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const products = ['Apples', 'Bananas', 'Cherries', 'Dates', 'Elderberries'];\n    return products.map(p => ({\n        Product: p,\n        Sales: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];\n    return months.map(m => ({\n        Month: m,\n        Revenue: Math.round(1000 + rand() * 5000),\n    }));\n}\n\nfunction genMultiSeriesLineData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['ProductA', 'ProductB', 'ProductC'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Sales: Math.round(500 + rand() * 2000),\n                Product: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genStackedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genGroupedBarData(seed: number) {\n    const rand = seededRandom(seed);\n    const years = ['2022', '2023', '2024'];\n    const departments = ['Sales', 'Engineering', 'Marketing'];\n    const data: any[] = [];\n    for (const y of years) {\n        for (const d of departments) {\n            data.push({\n                Year: y,\n                Budget: Math.round(10000 + rand() * 50000),\n                Department: d,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genAreaData(seed: number) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const series = ['Web', 'Mobile', 'Desktop'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Users: Math.round(500 + rand() * 3000),\n                Platform: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genPieData(seed: number) {\n    const rand = seededRandom(seed);\n    const segments = ['Mobile', 'Desktop', 'Tablet', 'Other'];\n    return segments.map(s => ({\n        Device: s,\n        Visits: Math.round(100 + rand() * 1000),\n    }));\n}\n\nfunction genHistogramData(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    return Array.from({ length: n }, () => ({\n        Score: Math.round(rand() * 100),\n    }));\n}\n\nfunction genRadarData(seed: number) {\n    const rand = seededRandom(seed);\n    const metrics = ['Speed', 'Power', 'Defense', 'Stamina', 'Accuracy', 'Agility'];\n    const entities = ['Player A', 'Player B', 'Player C'];\n    const data: any[] = [];\n    for (const e of entities) {\n        for (const m of metrics) {\n            data.push({\n                Metric: m,\n                Score: Math.round(30 + rand() * 70),\n                Player: e,\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\nexport function genChartJsScatterTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic scatter\n    {\n        const data = genScatterData(50, 42);\n        tests.push({\n            title: 'CJS: Scatter — Basic Q×Q',\n            description: '50 points, two quantitative axes.',\n            tags: ['chartjs', 'scatter', 'quantitative'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // 2. Scatter with color grouping\n    {\n        const data = genScatterColorData(90, 77);\n        tests.push({\n            title: 'CJS: Scatter — Color Groups',\n            description: '90 points, 3 groups. CJS: 3 datasets with different colors.',\n            tags: ['chartjs', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    // 3. Dense scatter\n    {\n        const data = genScatterData(500, 99);\n        tests.push({\n            title: 'CJS: Scatter — Dense (500 pts)',\n            description: 'Dense scatter plot. CJS adjusts pointRadius automatically.',\n            tags: ['chartjs', 'scatter', 'dense'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsLineTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Single series line\n    {\n        const data = genLineData(200);\n        tests.push({\n            title: 'CJS: Line — Single Series',\n            description: 'Ordinal x-axis, single line.',\n            tags: ['chartjs', 'line', 'single-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    // 2. Multi-series line\n    {\n        const data = genMultiSeriesLineData(300);\n        tests.push({\n            title: 'CJS: Line — Multi-Series (3 products)',\n            description: 'Color channel → multiple datasets.',\n            tags: ['chartjs', 'line', 'multi-series', 'color'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Sales'), makeField('Product')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Product: { type: Type.String, semanticType: 'Category', levels: ['ProductA','ProductB','ProductC'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Sales'), color: makeEncodingItem('Product') },\n        });\n    }\n\n    // 3. Medium multi-series line (5 regions)\n    {\n        const rand = seededRandom(301);\n        const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n        const regions = genCategories('Region', 5);\n        const data: any[] = [];\n        for (const m of months) {\n            for (const r of regions) {\n                data.push({ Month: m, Value: Math.round(200 + rand() * 800), Region: r });\n            }\n        }\n        tests.push({\n            title: 'CJS: Line — 5 Regions × 12 Months',\n            description: 'Higher series count exercises legend layout and the colour palette.',\n            tags: ['chartjs', 'line', 'multi-series', 'medium'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value'), makeField('Region')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: regions },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Simple bar\n    {\n        const data = genBarData(100);\n        tests.push({\n            title: 'CJS: Bar — Basic',\n            description: '5 products, single dataset.',\n            tags: ['chartjs', 'bar', 'simple'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Product'), makeField('Sales')],\n            metadata: {\n                Product: { type: Type.String, semanticType: 'Category', levels: ['Apples','Bananas','Cherries','Dates','Elderberries'] },\n                Sales: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Product'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    // 2. Many categories\n    {\n        const rand = seededRandom(150);\n        const cities = genCategories('City', 20);\n        const data = cities.map(c => ({\n            City: c,\n            Population: Math.round(10000 + rand() * 900000),\n        }));\n        tests.push({\n            title: 'CJS: Bar — 20 categories',\n            description: 'Many categories — tests layout and label rotation.',\n            tags: ['chartjs', 'bar', 'many-categories'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('City'), makeField('Population')],\n            metadata: {\n                City: { type: Type.String, semanticType: 'Category', levels: cities },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Population') },\n        });\n    }\n\n    // 3. Diverging bar (positive + negative values)\n    {\n        const cats = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'];\n        const vals = [120, -45, 80, -30, 60, -20, 95];\n        const data = cats.map((c, i) => ({ Month: c, NetChange: vals[i] }));\n        tests.push({\n            title: 'CJS: Bar — Net Change (diverging)',\n            description: 'Positive and negative values render bars on both sides of the zero baseline.',\n            tags: ['chartjs', 'bar', 'diverging'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Month'), makeField('NetChange')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: cats },\n                NetChange: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('NetChange') },\n        });\n    }\n\n    // 4. Clean medium-cardinality categorical bar\n    {\n        const rand = seededRandom(151);\n        const cats = genCategories('Team', 8);\n        const data = cats.map(c => ({ Team: c, Points: Math.round(20 + rand() * 180) }));\n        tests.push({\n            title: 'CJS: Bar — 8 Teams',\n            description: 'A clean categorical bar with eight evenly-labelled categories.',\n            tags: ['chartjs', 'bar', 'medium'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Team'), makeField('Points')],\n            metadata: {\n                Team: { type: Type.String, semanticType: 'Category', levels: cats },\n                Points: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Team'), y: makeEncodingItem('Points') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsStackedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genStackedBarData(500);\n        tests.push({\n            title: 'CJS: Stacked Bar — Regions × Quarters',\n            description: 'Stacked bar chart with 4 quarters and 4 regions.',\n            tags: ['chartjs', 'stacked-bar', 'color'],\n            chartType: 'Stacked Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Category', levels: ['Q1','Q2','Q3','Q4'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['North','South','East','West'] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), color: makeEncodingItem('Region') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsGroupedBarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genGroupedBarData(600);\n        tests.push({\n            title: 'CJS: Grouped Bar — 3 Years × 3 Departments',\n            description: 'Grouped (side-by-side) bar chart.',\n            tags: ['chartjs', 'grouped-bar', 'color'],\n            chartType: 'Grouped Bar Chart',\n            data,\n            fields: [makeField('Year'), makeField('Budget'), makeField('Department')],\n            metadata: {\n                Year: { type: Type.String, semanticType: 'Category', levels: ['2022','2023','2024'] },\n                Budget: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Department: { type: Type.String, semanticType: 'Category', levels: ['Sales','Engineering','Marketing'] },\n            },\n            encodingMap: { x: makeEncodingItem('Year'), y: makeEncodingItem('Budget'), group: makeEncodingItem('Department') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsAreaTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genAreaData(700);\n        tests.push({\n            title: 'CJS: Area — Stacked (3 Platforms)',\n            description: 'Stacked area chart with fill.',\n            tags: ['chartjs', 'area', 'stacked', 'color'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Users'), makeField('Platform')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug'] },\n                Users: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Platform: { type: Type.String, semanticType: 'Category', levels: ['Web','Mobile','Desktop'] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Users'), color: makeEncodingItem('Platform') },\n        });\n    }\n\n    // Single series area\n    {\n        const data = genLineData(701);\n        tests.push({\n            title: 'CJS: Area — Single Series',\n            description: 'Single series area chart.',\n            tags: ['chartjs', 'area', 'single-series'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: ['Jan','Feb','Mar','Apr','May','Jun'] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsPieTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Basic pie\n    {\n        const data = genPieData(800);\n        tests.push({\n            title: 'CJS: Pie — Device Breakdown',\n            description: 'Pie chart: color=Device, size=Visits.',\n            tags: ['chartjs', 'pie'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Device'), makeField('Visits')],\n            metadata: {\n                Device: { type: Type.String, semanticType: 'Category', levels: ['Mobile','Desktop','Tablet','Other'] },\n                Visits: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Device'), size: makeEncodingItem('Visits') },\n        });\n    }\n\n    // 2. Doughnut\n    {\n        const data = genPieData(801);\n        tests.push({\n            title: 'CJS: Doughnut — Device Breakdown',\n            description: 'Doughnut chart with innerRadius.',\n            tags: ['chartjs', 'doughnut', 'pie'],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Device'), makeField('Visits')],\n            metadata: {\n                Device: { type: Type.String, semanticType: 'Category', levels: ['Mobile','Desktop','Tablet','Other'] },\n                Visits: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Device'), size: makeEncodingItem('Visits') },\n            chartProperties: { innerRadius: 40 },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsHistogramTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genHistogramData(200, 900);\n        tests.push({\n            title: 'CJS: Histogram — Scores (200 pts)',\n            description: 'Histogram with 10 bins.',\n            tags: ['chartjs', 'histogram'],\n            chartType: 'Histogram',\n            data,\n            fields: [makeField('Score')],\n            metadata: {\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Score') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsRadarTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genRadarData(1000);\n        tests.push({\n            title: 'CJS: Radar — 3 Players × 6 Metrics',\n            description: 'Radar chart with multiple groups.',\n            tags: ['chartjs', 'radar', 'multi-group'],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Score'), makeField('Player')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: ['Speed','Power','Defense','Stamina','Accuracy','Agility'] },\n                Score: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Player: { type: Type.String, semanticType: 'Category', levels: ['Player A','Player B','Player C'] },\n            },\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Score'), color: makeEncodingItem('Player') },\n        });\n    }\n\n    return tests;\n}\n\nexport function genChartJsStressTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // Large scatter\n    {\n        const data = genScatterData(1000, 1100);\n        tests.push({\n            title: 'CJS: Stress — 1000pt Scatter',\n            description: '1000-point scatter plot performance test.',\n            tags: ['chartjs', 'stress', 'scatter'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('Weight'), makeField('Height')],\n            metadata: {\n                Weight: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Height: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Weight'), y: makeEncodingItem('Height') },\n        });\n    }\n\n    // Many categories bar\n    {\n        const rand = seededRandom(1200);\n        const items = genCategories('Item', 50);\n        const data = items.map(i => ({\n            Item: i,\n            Value: Math.round(rand() * 1000),\n        }));\n        tests.push({\n            title: 'CJS: Stress — 50 Cat Bar',\n            description: '50-category bar chart — tests overflow and label rotation.',\n            tags: ['chartjs', 'stress', 'bar', 'overflow'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Item'), makeField('Value')],\n            metadata: {\n                Item: { type: Type.String, semanticType: 'Category', levels: items },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ===========================================================================\n// Rose Chart tests\n// ===========================================================================\n\nexport function genChartJsRoseTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    // 1. Basic rose — wind directions × speed\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const data = directions.map(d => ({ Direction: d, Speed: Math.round(5 + rand() * 25) }));\n        tests.push({\n            title: 'CJS: Rose — 8 Directions',\n            description: 'Wind speed by compass direction. CJS: polarArea chart type.',\n            tags: ['chartjs', 'rose', 'basic'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 2. Stacked rose — directions × season\n    {\n        const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];\n        const seasons = ['Spring', 'Summer', 'Autumn', 'Winter'];\n        const data: any[] = [];\n        for (const d of directions) {\n            for (const s of seasons) {\n                data.push({ Direction: d, Speed: Math.round(3 + rand() * 20), Season: s });\n            }\n        }\n        tests.push({\n            title: 'CJS: Stacked Rose — 8 dirs × 4 seasons',\n            description: 'Stacked wind rose by season.',\n            tags: ['chartjs', 'rose', 'stacked'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Direction'), makeField('Speed'), makeField('Season')],\n            metadata: {\n                Direction: { type: Type.String, semanticType: 'Category', levels: directions },\n                Speed: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Season: { type: Type.String, semanticType: 'Category', levels: seasons },\n            },\n            encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('Speed'), color: makeEncodingItem('Season') },\n            chartProperties: { alignment: 'center' },\n        });\n    }\n\n    // 3. Rose — 12 months\n    {\n        const months = genMonths(12);\n        const data = months.map(m => ({ Month: m, Rainfall: Math.round(20 + rand() * 150) }));\n        tests.push({\n            title: 'CJS: Rose — 12 Months Rainfall',\n            description: 'Monthly rainfall as a rose chart.',\n            tags: ['chartjs', 'rose', 'medium'],\n            chartType: 'Rose Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Doughnut Chart (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nexport function genChartJsDoughnutTests(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(41);\n\n    // 1. Market share (few slices)\n    {\n        const browsers = ['Chrome', 'Safari', 'Edge', 'Firefox', 'Other'];\n        const data = browsers.map((b) => ({ Browser: b, Share: Math.round((5 + rand() * 45) * 10) / 10 }));\n        tests.push({\n            title: 'CJS: Doughnut — Browser Share *',\n            description: '5-slice doughnut with a 55% hollow centre; color = category, size = value.',\n            tags: ['chartjs', 'doughnut', 'part-to-whole'],\n            chartType: 'Doughnut Chart',\n            data,\n            fields: [makeField('Browser'), makeField('Share')],\n            metadata: {\n                Browser: { type: Type.String, semanticType: 'Category', levels: browsers },\n                Share: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Browser'), size: makeEncodingItem('Share') },\n        });\n    }\n\n    // 2. Many slices\n    {\n        const cats = genCategories('Dept', 9);\n        const data = cats.map((c) => ({ Dept: c, Budget: Math.round(10 + rand() * 90) }));\n        tests.push({\n            title: 'CJS: Doughnut — Budget by Department (9 slices) *',\n            description: 'Doughnut with 9 categories; legend on the right.',\n            tags: ['chartjs', 'doughnut', 'part-to-whole', 'many-categories'],\n            chartType: 'Doughnut Chart',\n            data,\n            fields: [makeField('Dept'), makeField('Budget')],\n            metadata: {\n                Dept: { type: Type.String, semanticType: 'Category', levels: cats },\n                Budget: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { color: makeEncodingItem('Dept'), size: makeEncodingItem('Budget') },\n        });\n    }\n\n    // 3. Count-only (no size field)\n    {\n        const types = ['Bug', 'Feature', 'Chore', 'Docs'];\n        const data = Array.from({ length: 60 }, () => ({ Type: types[Math.floor(rand() * types.length)] }));\n        tests.push({\n            title: 'CJS: Doughnut — Issue Types (counts) *',\n            description: 'No size channel; slice value is the count of rows per category.',\n            tags: ['chartjs', 'doughnut', 'part-to-whole', 'count'],\n            chartType: 'Doughnut Chart',\n            data,\n            fields: [makeField('Type')],\n            metadata: {\n                Type: { type: Type.String, semanticType: 'Category', levels: types },\n            },\n            encodingMap: { color: makeEncodingItem('Type') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Combo Chart — Bar + Line (NEW — flagged with * for inspection)\n// ---------------------------------------------------------------------------\n\nexport function genChartJsComboTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Monthly revenue (bars) + growth-rate % (line, right axis)\n    {\n        const rand = seededRandom(53);\n        const months = genMonths(12);\n        let prev = 100 + rand() * 40;\n        const data = months.map((m) => {\n            const rev = Math.round(prev);\n            const growth = Math.round((rand() * 20 - 5) * 10) / 10;\n            prev = prev * (1 + growth / 100);\n            return { Month: m, Revenue: rev, Growth: growth };\n        });\n        tests.push({\n            title: 'CJS: Combo — Revenue (bars) + Growth % (line) *',\n            description: 'Dual-axis combo: bars on the left axis, a % line on the right axis.',\n            tags: ['chartjs', 'combo', 'dual-axis', 'bar', 'line'],\n            chartType: 'Combo Chart',\n            data,\n            fields: [makeField('Month'), makeField('Revenue'), makeField('Growth')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Category', levels: months },\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Growth: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Revenue') },\n            chartProperties: { lineField: 'Growth' },\n        });\n    }\n\n    // 2. Rainfall (bars) + temperature (line) — classic climograph\n    {\n        const rand = seededRandom(59);\n        const months = genMonths(12);\n        const data = months.map((m, i) => {\n            const seasonal = Math.sin((i / 12) * Math.PI * 2);\n            return {\n                Month: m,\n                Rainfall: Math.round(40 + (1 - seasonal) * 60 + rand() * 20),\n                Temperature: Math.round((15 + seasonal * 10 + rand() * 3) * 10) / 10,\n            };\n        });\n        tests.push({\n            title: 'CJS: Combo — Rainfall (bars) + Temperature (line) *',\n            description: 'Climograph-style combo with very different unit scales on each axis.',\n            tags: ['chartjs', 'combo', 'dual-axis', 'climograph'],\n            chartType: 'Combo Chart',\n            data,\n            fields: [makeField('Month'), makeField('Rainfall'), makeField('Temperature')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Category', levels: months },\n                Rainfall: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Rainfall') },\n            chartProperties: { lineField: 'Temperature' },\n        });\n    }\n\n    // 3. Single measure → degrades to a plain bar chart (no line)\n    {\n        const rand = seededRandom(61);\n        const cats = genCategories('Region', 7);\n        const data = cats.map((c) => ({ Region: c, Sales: Math.round(20 + rand() * 80) }));\n        tests.push({\n            title: 'CJS: Combo — Single Measure (bars only) *',\n            description: 'No second numeric field; the combo gracefully degrades to bars.',\n            tags: ['chartjs', 'combo', 'fallback'],\n            chartType: 'Combo Chart',\n            data,\n            fields: [makeField('Region'), makeField('Sales')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Category', levels: cats },\n                Sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Region'), y: makeEncodingItem('Sales') },\n        });\n    }\n\n    return tests;\n}\n\nfunction genBubbleData(n: number, seed: number, withRegion: boolean) {\n    const rand = seededRandom(seed);\n    const regions = ['Asia', 'Europe', 'Africa', 'Americas'];\n    return Array.from({ length: n }, (_, i) => {\n        const row: Record<string, any> = {\n            GDP: Math.round((1 + rand() * 59) * 10) / 10,\n            LifeExp: Math.round((50 + rand() * 35) * 10) / 10,\n            Population: Math.round((1 + rand() * 1400) * 10) / 10,\n        };\n        if (withRegion) row.Region = regions[i % regions.length];\n        return row;\n    });\n}\n\nexport function genChartJsBubbleTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    // 1. Grouped bubble: size + color\n    {\n        const data = genBubbleData(40, 17, true);\n        tests.push({\n            title: 'CJS: Bubble — GDP × LifeExp × Population *',\n            description: 'Bubble chart: x=GDP, y=LifeExp, size=Population, color=Region (4 groups).',\n            tags: ['chartjs', 'bubble', 'size', 'color'],\n            chartType: 'Bubble Chart',\n            data,\n            fields: [makeField('GDP'), makeField('LifeExp'), makeField('Population'), makeField('Region')],\n            metadata: {\n                GDP: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                LifeExp: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['Asia', 'Europe', 'Africa', 'Americas'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('GDP'),\n                y: makeEncodingItem('LifeExp'),\n                size: makeEncodingItem('Population'),\n                color: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    // 2. Single-series bubble: size only\n    {\n        const data = genBubbleData(36, 23, false);\n        tests.push({\n            title: 'CJS: Bubble — Single Series (size only) *',\n            description: 'Bubble chart with one series; bubble area encodes Population.',\n            tags: ['chartjs', 'bubble', 'size'],\n            chartType: 'Bubble Chart',\n            data,\n            fields: [makeField('GDP'), makeField('LifeExp'), makeField('Population')],\n            metadata: {\n                GDP: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                LifeExp: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('GDP'),\n                y: makeEncodingItem('LifeExp'),\n                size: makeEncodingItem('Population'),\n            },\n        });\n    }\n\n    // 3. Dense bubble: tests density-aware radius scaling\n    {\n        const data = genBubbleData(120, 29, true);\n        tests.push({\n            title: 'CJS: Bubble — Dense (120 points) *',\n            description: 'Dense bubble chart; radius shrinks with point density to stay legible.',\n            tags: ['chartjs', 'bubble', 'dense', 'size', 'color'],\n            chartType: 'Bubble Chart',\n            data,\n            fields: [makeField('GDP'), makeField('LifeExp'), makeField('Population'), makeField('Region')],\n            metadata: {\n                GDP: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                LifeExp: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Population: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Region: { type: Type.String, semanticType: 'Category', levels: ['Asia', 'Europe', 'Africa', 'Americas'] },\n            },\n            encodingMap: {\n                x: makeEncodingItem('GDP'),\n                y: makeEncodingItem('LifeExp'),\n                size: makeEncodingItem('Population'),\n                color: makeEncodingItem('Region'),\n            },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Plotly backend tests.\n *\n * Exercises the Plotly backend's first-merge surface: the four acceptance\n * templates (Bar, Line, Area, Scatter) with color on/off, and the facet\n * grid path (column, row, column×row) that renders as Plotly subplot pairs.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Test data generators\n// ---------------------------------------------------------------------------\n\nfunction genRegionSales(seed: number) {\n    const rand = seededRandom(seed);\n    const regions = ['East', 'South', 'North', 'West', 'Central'];\n    return regions.map(r => ({\n        Region: r,\n        Revenue: Math.round(100 + rand() * 900),\n    }));\n}\n\nfunction genMonthlySeries(seed: number, series: string[]) {\n    const rand = seededRandom(seed);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const data: any[] = [];\n    for (const m of months) {\n        for (const s of series) {\n            data.push({\n                Month: m,\n                Value: Math.round(200 + rand() * 800),\n                Series: s,\n            });\n        }\n    }\n    return data;\n}\n\nfunction genScatterGroups(n: number, seed: number) {\n    const rand = seededRandom(seed);\n    const groups = ['Alpha', 'Beta', 'Gamma'];\n    return Array.from({ length: n }, (_, i) => ({\n        X: Math.round(rand() * 100 * 10) / 10,\n        Y: Math.round(rand() * 100 * 10) / 10,\n        Group: groups[i % groups.length],\n    }));\n}\n\nfunction genQuarterRegion(seed: number) {\n    const rand = seededRandom(seed);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const regions = ['North', 'South'];\n    const data: any[] = [];\n    for (const q of quarters) {\n        for (const r of regions) {\n            data.push({\n                Quarter: q,\n                Revenue: Math.round(200 + rand() * 800),\n                Region: r,\n            });\n        }\n    }\n    return data;\n}\n\n// ---------------------------------------------------------------------------\n// Test case builders\n// ---------------------------------------------------------------------------\n\n/** The four acceptance templates, single-series and color-grouped. */\nexport function genPlotlyCoreTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genRegionSales(42);\n        tests.push({\n            title: 'PL: Bar — Basic N×Q',\n            description: 'Single bar trace; category order preserved, zero baseline.',\n            tags: ['plotly', 'bar'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Region', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Region'), y: makeEncodingItem('Revenue') },\n        });\n    }\n\n    {\n        const data = genRegionSales(43);\n        tests.push({\n            title: 'PL: Bar — Horizontal',\n            description: 'Category on y → orientation \"h\" bar trace.',\n            tags: ['plotly', 'bar', 'horizontal'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Region'), makeField('Revenue')],\n            metadata: {\n                Region: { type: Type.String, semanticType: 'Region', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Revenue'), y: makeEncodingItem('Region') },\n        });\n    }\n\n    {\n        const data = genMonthlySeries(77, ['ProductA', 'ProductB', 'ProductC']);\n        tests.push({\n            title: 'PL: Line — Color Groups',\n            description: 'One trace per series; legend from trace names.',\n            tags: ['plotly', 'line', 'color', 'multi-series'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    {\n        const data = genMonthlySeries(88, ['Web', 'Mobile']);\n        tests.push({\n            title: 'PL: Area — Stacked',\n            description: 'Color groups stack via stackgroup (Plotly-native stacking).',\n            tags: ['plotly', 'area', 'color', 'stacked'],\n            chartType: 'Area Chart',\n            data,\n            fields: [makeField('Month'), makeField('Value'), makeField('Series')],\n            metadata: {\n                Month: { type: Type.String, semanticType: 'Month', levels: [] },\n                Value: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Series: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Month'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n        });\n    }\n\n    {\n        const data = genScatterGroups(90, 99);\n        tests.push({\n            title: 'PL: Scatter — Color Groups',\n            description: 'Markers mode, one trace per group, qualitative palette.',\n            tags: ['plotly', 'scatter', 'color', 'multi-series'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('X'), makeField('Y'), makeField('Group')],\n            metadata: {\n                X: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Y: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Group: { type: Type.String, semanticType: 'Category', levels: ['Alpha', 'Beta', 'Gamma'] },\n            },\n            encodingMap: { x: makeEncodingItem('X'), y: makeEncodingItem('Y'), color: makeEncodingItem('Group') },\n        });\n    }\n\n    return tests;\n}\n\n/** Facet grid path: column, row, and column×row subplot grids. */\nexport function genPlotlyFacetTests(): TestCase[] {\n    const tests: TestCase[] = [];\n\n    {\n        const data = genQuarterRegion(11);\n        tests.push({\n            title: 'PL: Facet — Column',\n            description: 'Bar per Region column; shared nice y-domain, leftmost-only y labels.',\n            tags: ['plotly', 'facet', 'column', 'bar'],\n            chartType: 'Bar Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Quarter', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Region', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), column: makeEncodingItem('Region') },\n        });\n    }\n\n    {\n        const data = genQuarterRegion(22);\n        tests.push({\n            title: 'PL: Facet — Row',\n            description: 'Line per Region row; rotated row headers, x title on bottom row only.',\n            tags: ['plotly', 'facet', 'row', 'line'],\n            chartType: 'Line Chart',\n            data,\n            fields: [makeField('Quarter'), makeField('Revenue'), makeField('Region')],\n            metadata: {\n                Quarter: { type: Type.String, semanticType: 'Quarter', levels: [] },\n                Revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n                Region: { type: Type.String, semanticType: 'Region', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('Quarter'), y: makeEncodingItem('Revenue'), row: makeEncodingItem('Region') },\n        });\n    }\n\n    {\n        const rand = seededRandom(33);\n        const data: any[] = [];\n        for (const a of ['A', 'B']) {\n            for (const b of ['X', 'Y']) {\n                for (let i = 0; i < 12; i++) {\n                    data.push({\n                        V: Math.round(rand() * 100),\n                        W: Math.round(rand() * 100),\n                        Col: a,\n                        Row: b,\n                    });\n                }\n            }\n        }\n        tests.push({\n            title: 'PL: Facet — Column × Row Grid',\n            description: 'Scatter 2×2 grid; one subplot axis pair per cell.',\n            tags: ['plotly', 'facet', 'grid', 'scatter'],\n            chartType: 'Scatter Plot',\n            data,\n            fields: [makeField('V'), makeField('W'), makeField('Col'), makeField('Row')],\n            metadata: {\n                V: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                W: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Col: { type: Type.String, semanticType: 'Category', levels: [] },\n                Row: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: { x: makeEncodingItem('V'), y: makeEncodingItem('W'), column: makeEncodingItem('Col'), row: makeEncodingItem('Row') },\n        });\n    }\n\n    return tests;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Discrete-axis sizing tests.\n *\n * For each major chart type, creates test cases at three cardinality levels\n * (20, 60, 120) designed for a 400×300 canvas.  This systematically exercises\n * the assembler's elastic stretch, overflow filtering, label rotation, and\n * step-based sizing across discrete X and discrete Y orientations.\n *\n * Cardinality rationale (400×300 canvas, ~20px default step):\n *   - 20 items:  fits comfortably, no compression needed\n *   - 60 items:  triggers elastic stretch, label rotation\n *   - 120 items: triggers overflow filtering (too many to show)\n */\n\nimport { TestCase, makeField, makeEncodingItem, buildMetadata } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction cats(prefix: string, n: number): string[] {\n    const pad = String(n).length;\n    return Array.from({ length: n }, (_, i) => `${prefix}${String(i + 1).padStart(pad, '0')}`);\n}\n\nfunction randVal(rand: () => number, min = 10, max = 500): number {\n    return Math.round(min + rand() * (max - min));\n}\n\nconst SIZES = [\n    { n: 20,  label: '20' },\n    { n: 60,  label: '60' },\n    { n: 120, label: '120' },\n] as const;\n\n// ---------------------------------------------------------------------------\n// Bar Chart\n// ---------------------------------------------------------------------------\nfunction genBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(100);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        const xCats = cats('Cat', n);\n        const xData = xCats.map(c => ({ Category: c, Value: randVal(rand) }));\n        tests.push({\n            title: `Bar ▸ X ×${label}`,\n            description: `Bar chart with ${n} categories on X axis`,\n            tags: ['bar', 'discrete-x', `n${label}`],\n            chartType: 'Bar Chart',\n            data: xData,\n            fields: [makeField('Category'), makeField('Value')],\n            metadata: buildMetadata(xData),\n            encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value') },\n        });\n\n        // Discrete Y\n        const yCats = cats('Item', n);\n        const yData = yCats.map(c => ({ Item: c, Revenue: randVal(rand) }));\n        tests.push({\n            title: `Bar ▸ Y ×${label}`,\n            description: `Horizontal bar with ${n} categories on Y axis`,\n            tags: ['bar', 'discrete-y', `n${label}`],\n            chartType: 'Bar Chart',\n            data: yData,\n            fields: [makeField('Item'), makeField('Revenue')],\n            metadata: buildMetadata(yData),\n            encodingMap: { y: makeEncodingItem('Item'), x: makeEncodingItem('Revenue') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Stacked Bar Chart\n// ---------------------------------------------------------------------------\nfunction genStackedBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(200);\n    const segments = cats('Seg', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('City', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of segments) data.push({ City: c, Segment: s, Amount: randVal(rand) });\n            tests.push({\n                title: `Stacked Bar ▸ X ×${label}`,\n                description: `Stacked bar with ${n} x-categories × 3 segments`,\n                tags: ['stacked-bar', 'discrete-x', `n${label}`],\n                chartType: 'Stacked Bar Chart',\n                data,\n                fields: [makeField('City'), makeField('Segment'), makeField('Amount')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('City'), y: makeEncodingItem('Amount'), color: makeEncodingItem('Segment') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Dept', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of segments) data.push({ Dept: c, Segment: s, Budget: randVal(rand) });\n            tests.push({\n                title: `Stacked Bar ▸ Y ×${label}`,\n                description: `Horizontal stacked bar with ${n} y-categories × 3 segments`,\n                tags: ['stacked-bar', 'discrete-y', `n${label}`],\n                chartType: 'Stacked Bar Chart',\n                data,\n                fields: [makeField('Dept'), makeField('Segment'), makeField('Budget')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Dept'), x: makeEncodingItem('Budget'), color: makeEncodingItem('Segment') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Grouped Bar Chart\n// ---------------------------------------------------------------------------\nfunction genGroupedBarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(300);\n    const groups = cats('Grp', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Cat', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const g of groups) data.push({ Category: c, Group: g, Value: randVal(rand) });\n            tests.push({\n                title: `Grouped Bar ▸ X ×${label}`,\n                description: `Grouped bar with ${n} x-categories × 3 groups`,\n                tags: ['grouped-bar', 'discrete-x', `n${label}`],\n                chartType: 'Grouped Bar Chart',\n                data,\n                fields: [makeField('Category'), makeField('Group'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Category'), y: makeEncodingItem('Value'), group: makeEncodingItem('Group') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Region', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const g of groups) data.push({ Region: c, Group: g, Sales: randVal(rand) });\n            tests.push({\n                title: `Grouped Bar ▸ Y ×${label}`,\n                description: `Horizontal grouped bar with ${n} y-categories × 3 groups`,\n                tags: ['grouped-bar', 'discrete-y', `n${label}`],\n                chartType: 'Grouped Bar Chart',\n                data,\n                fields: [makeField('Region'), makeField('Group'), makeField('Sales')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Region'), x: makeEncodingItem('Sales'), group: makeEncodingItem('Group') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Scatter Plot\n// ---------------------------------------------------------------------------\nfunction genScatterSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(400);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Species', n);\n            const pointsPer = 5;\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Species: c, Weight: randVal(rand, 10, 200) });\n            tests.push({\n                title: `Scatter ▸ X ×${label}`,\n                description: `Scatter with ${n} discrete categories on X`,\n                tags: ['scatter', 'discrete-x', `n${label}`],\n                chartType: 'Scatter Plot',\n                data,\n                fields: [makeField('Species'), makeField('Weight')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('Weight') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Lab', n);\n            const pointsPer = 5;\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Lab: c, Score: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Scatter ▸ Y ×${label}`,\n                description: `Scatter with ${n} discrete categories on Y`,\n                tags: ['scatter', 'discrete-y', `n${label}`],\n                chartType: 'Scatter Plot',\n                data,\n                fields: [makeField('Lab'), makeField('Score')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Lab'), x: makeEncodingItem('Score') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Line Chart\n// ---------------------------------------------------------------------------\nfunction genLineSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(500);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X (ordinal — numbered steps imply sequence)\n        {\n            const categories = cats('Step', n);\n            const data = categories.map(c => ({ Step: c, Value: randVal(rand) }));\n            tests.push({\n                title: `Line ▸ X ×${label}`,\n                description: `Line chart with ${n} ordinal steps on X`,\n                tags: ['line', 'discrete-x', `n${label}`],\n                chartType: 'Line Chart',\n                data,\n                fields: [makeField('Step'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Step'), y: makeEncodingItem('Value') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Area Chart\n// ---------------------------------------------------------------------------\nfunction genAreaSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(600);\n    const series = cats('S', 3);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X (ordinal — numbered periods imply sequence)\n        {\n            const categories = cats('Period', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (const s of series) data.push({ Period: c, Series: s, Value: randVal(rand, 5, 200) });\n            tests.push({\n                title: `Area ▸ X ×${label}`,\n                description: `Stacked area with ${n} ordinal periods × 3 series`,\n                tags: ['area', 'discrete-x', `n${label}`],\n                chartType: 'Area Chart',\n                data,\n                fields: [makeField('Period'), makeField('Series'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Period'), y: makeEncodingItem('Value'), color: makeEncodingItem('Series') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Lollipop Chart\n// ---------------------------------------------------------------------------\nfunction genLollipopSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(700);\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Item', n);\n            const data = categories.map(c => ({ Item: c, Value: randVal(rand) }));\n            tests.push({\n                title: `Lollipop ▸ X ×${label}`,\n                description: `Lollipop with ${n} categories on X`,\n                tags: ['lollipop', 'discrete-x', `n${label}`],\n                chartType: 'Lollipop Chart',\n                data,\n                fields: [makeField('Item'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Item'), y: makeEncodingItem('Value') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Country', n);\n            const data = categories.map(c => ({ Country: c, GDP: randVal(rand, 100, 5000) }));\n            tests.push({\n                title: `Lollipop ▸ Y ×${label}`,\n                description: `Horizontal lollipop with ${n} categories on Y`,\n                tags: ['lollipop', 'discrete-y', `n${label}`],\n                chartType: 'Lollipop Chart',\n                data,\n                fields: [makeField('Country'), makeField('GDP')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Country'), x: makeEncodingItem('GDP') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Heatmap (always discrete X + Y)\n// ---------------------------------------------------------------------------\nfunction genHeatmapSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(800);\n\n    for (const { n, label } of SIZES) {\n        const yN = Math.max(5, Math.round(n * 0.6));\n        const xCats = cats('Col', n);\n        const yCats = cats('Row', yN);\n        const data: Record<string, any>[] = [];\n        for (const x of xCats) for (const y of yCats) data.push({ Col: x, Row: y, Value: randVal(rand, 0, 100) });\n        tests.push({\n            title: `Heatmap ▸ XY ×${label}×${yN}`,\n            description: `Heatmap with ${n} columns × ${yN} rows`,\n            tags: ['heatmap', 'discrete-xy', `n${label}`],\n            chartType: 'Heatmap',\n            data,\n            fields: [makeField('Col'), makeField('Row'), makeField('Value')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Col'), y: makeEncodingItem('Row'), color: makeEncodingItem('Value') },\n        });\n    }\n\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Boxplot\n// ---------------------------------------------------------------------------\nfunction genBoxplotSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(900);\n    const pointsPer = 15;\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Group', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Group: c, Value: randVal(rand, 0, 200) });\n            tests.push({\n                title: `Boxplot ▸ X ×${label}`,\n                description: `Boxplot with ${n} groups on X`,\n                tags: ['boxplot', 'discrete-x', `n${label}`],\n                chartType: 'Boxplot',\n                data,\n                fields: [makeField('Group'), makeField('Value')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Group'), y: makeEncodingItem('Value') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Cat', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Category: c, Score: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Boxplot ▸ Y ×${label}`,\n                description: `Horizontal boxplot with ${n} groups on Y`,\n                tags: ['boxplot', 'discrete-y', `n${label}`],\n                chartType: 'Boxplot',\n                data,\n                fields: [makeField('Category'), makeField('Score')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Category'), x: makeEncodingItem('Score') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Strip Plot\n// ---------------------------------------------------------------------------\nfunction genStripSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1000);\n    const pointsPer = 10;\n\n    for (const { n, label } of SIZES) {\n        // Discrete X\n        {\n            const categories = cats('Species', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Species: c, Length: randVal(rand, 10, 80) });\n            tests.push({\n                title: `Strip ▸ X ×${label}`,\n                description: `Strip plot with ${n} categories on X`,\n                tags: ['strip', 'discrete-x', `n${label}`],\n                chartType: 'Strip Plot',\n                data,\n                fields: [makeField('Species'), makeField('Length')],\n                metadata: buildMetadata(data),\n                encodingMap: { x: makeEncodingItem('Species'), y: makeEncodingItem('Length') },\n            });\n        }\n\n        // Discrete Y\n        {\n            const categories = cats('Lab', n);\n            const data: Record<string, any>[] = [];\n            for (const c of categories) for (let i = 0; i < pointsPer; i++) data.push({ Lab: c, Result: randVal(rand, 0, 100) });\n            tests.push({\n                title: `Strip ▸ Y ×${label}`,\n                description: `Horizontal strip with ${n} categories on Y`,\n                tags: ['strip', 'discrete-y', `n${label}`],\n                chartType: 'Strip Plot',\n                data,\n                fields: [makeField('Lab'), makeField('Result')],\n                metadata: buildMetadata(data),\n                encodingMap: { y: makeEncodingItem('Lab'), x: makeEncodingItem('Result') },\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Bump Chart\n// ---------------------------------------------------------------------------\nfunction genBumpSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1100);\n    const teams = cats('Team', 5);\n\n    for (const { n, label } of SIZES) {\n        const steps = cats('Week', n);\n        const data: Record<string, any>[] = [];\n        for (const s of steps) for (const t of teams) data.push({ Week: s, Team: t, Rank: Math.floor(rand() * 5) + 1 });\n        tests.push({\n            title: `Bump ▸ X ×${label}`,\n            description: `Bump chart with ${n} time steps × 5 teams`,\n            tags: ['bump', 'discrete-x', `n${label}`],\n            chartType: 'Bump Chart',\n            data,\n            fields: [makeField('Week'), makeField('Team'), makeField('Rank')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Week'), y: makeEncodingItem('Rank'), color: makeEncodingItem('Team') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Pyramid Chart\n// ---------------------------------------------------------------------------\nfunction genPyramidSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1200);\n    const genders = ['Male', 'Female'];\n\n    for (const { n, label } of SIZES) {\n        const ageBands = cats('Age', n);\n        const data: Record<string, any>[] = [];\n        for (const a of ageBands) for (const g of genders) data.push({ AgeGroup: a, Gender: g, Population: randVal(rand, 1000, 50000) });\n        tests.push({\n            title: `Pyramid ▸ Y ×${label}`,\n            description: `Pyramid chart with ${n} age groups on Y`,\n            tags: ['pyramid', 'discrete-y', `n${label}`],\n            chartType: 'Pyramid Chart',\n            data,\n            fields: [makeField('AgeGroup'), makeField('Gender'), makeField('Population')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('AgeGroup'), x: makeEncodingItem('Population'), color: makeEncodingItem('Gender') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Waterfall Chart\n// ---------------------------------------------------------------------------\nfunction genWaterfallSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1300);\n\n    for (const { n, label } of SIZES) {\n        const steps = cats('Step', n);\n        const data = steps.map((s, i) => ({\n            Step: s,\n            Amount: i === 0 ? randVal(rand, 500, 1000) :\n                i === n - 1 ? randVal(rand, 200, 800) :\n                    (rand() > 0.5 ? 1 : -1) * randVal(rand, 10, 150),\n            Type: i === 0 ? 'start' : i === n - 1 ? 'end' : 'delta',\n        }));\n        tests.push({\n            title: `Waterfall ▸ X ×${label}`,\n            description: `Waterfall with ${n} steps on X`,\n            tags: ['waterfall', 'discrete-x', `n${label}`],\n            chartType: 'Waterfall Chart',\n            data,\n            fields: [makeField('Step'), makeField('Amount'), makeField('Type')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Step'), y: makeEncodingItem('Amount'), color: makeEncodingItem('Type') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Ranged Dot Plot\n// ---------------------------------------------------------------------------\nfunction genRangedDotSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1400);\n    const phases = ['Before', 'After'];\n\n    for (const { n, label } of SIZES) {\n        const categories = cats('Metric', n);\n        const data: Record<string, any>[] = [];\n        for (const c of categories) for (const p of phases) data.push({ Metric: c, Phase: p, Score: randVal(rand, 20, 90) });\n        tests.push({\n            title: `Ranged Dot ▸ Y ×${label}`,\n            description: `Ranged dot plot with ${n} categories on Y`,\n            tags: ['ranged-dot', 'discrete-y', `n${label}`],\n            chartType: 'Ranged Dot Plot',\n            data,\n            fields: [makeField('Metric'), makeField('Phase'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { y: makeEncodingItem('Metric'), x: makeEncodingItem('Score'), color: makeEncodingItem('Phase') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Pie Chart (discrete color)\n// ---------------------------------------------------------------------------\nfunction genPieSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1500);\n\n    for (const { n, label } of SIZES) {\n        const categories = cats('Slice', n);\n        const data = categories.map(c => ({ Slice: c, Share: randVal(rand, 1, 100) }));\n        tests.push({\n            title: `Pie ▸ color ×${label}`,\n            description: `Pie chart with ${n} slices`,\n            tags: ['pie', 'discrete-color', `n${label}`],\n            chartType: 'Pie Chart',\n            data,\n            fields: [makeField('Slice'), makeField('Share')],\n            metadata: buildMetadata(data),\n            encodingMap: { color: makeEncodingItem('Slice'), size: makeEncodingItem('Share') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Radar Chart\n// ---------------------------------------------------------------------------\nfunction genRadarSizing(): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(1600);\n    const entities = cats('E', 3);\n\n    for (const { n, label } of SIZES) {\n        const axes = cats('Axis', n);\n        const data: Record<string, any>[] = [];\n        for (const e of entities) for (const a of axes) data.push({ Metric: a, Entity: e, Score: randVal(rand, 10, 100) });\n        tests.push({\n            title: `Radar ▸ ×${label} axes`,\n            description: `Radar chart with ${n} metric axes × 3 entities`,\n            tags: ['radar', 'discrete-x', `n${label}`],\n            chartType: 'Radar Chart',\n            data,\n            fields: [makeField('Metric'), makeField('Entity'), makeField('Score')],\n            metadata: buildMetadata(data),\n            encodingMap: { x: makeEncodingItem('Metric'), y: makeEncodingItem('Score'), color: makeEncodingItem('Entity') },\n        });\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// Combined export\n// ---------------------------------------------------------------------------\nexport function genDiscreteAxisTests(): TestCase[] {\n    return [\n        ...genBarSizing(),\n        ...genStackedBarSizing(),\n        ...genGroupedBarSizing(),\n        ...genScatterSizing(),\n        ...genLineSizing(),\n        ...genAreaSizing(),\n        ...genLollipopSizing(),\n        ...genHeatmapSizing(),\n        ...genBoxplotSizing(),\n        ...genStripSizing(),\n        ...genBumpSizing(),\n        ...genPyramidSizing(),\n        ...genWaterfallSizing(),\n        ...genRangedDotSizing(),\n        ...genPieSizing(),\n        ...genRadarSizing(),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Type } from './df-types';\nimport { Channel, EncodingItem } from './df-types';\nimport { TestCase, DateFormat, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n// ---------------------------------------------------------------------------\n// Shared helper: generate test cases from date format definitions × chart types\n// ---------------------------------------------------------------------------\nexport function genDateTests(dateFormats: DateFormat[], seed: number): TestCase[] {\n    const tests: TestCase[] = [];\n    const rand = seededRandom(seed);\n\n    const chartConfigs: { chartType: string; needsColor: boolean }[] = [\n        { chartType: 'Bar Chart', needsColor: false },\n        { chartType: 'Line Chart', needsColor: false },\n        { chartType: 'Scatter Plot', needsColor: false },\n        { chartType: 'Area Chart', needsColor: false },\n        { chartType: 'Stacked Bar Chart', needsColor: true },\n    ];\n    const colorCategories = ['Alpha', 'Beta', 'Gamma'];\n\n    for (const fmt of dateFormats) {\n        for (const cfg of chartConfigs) {\n            const data: Record<string, any>[] = [];\n            for (const v of fmt.values) {\n                if (cfg.needsColor) {\n                    for (const cat of colorCategories) {\n                        data.push({ [fmt.fieldName]: v, Value: Math.round(50 + rand() * 500), Category: cat });\n                    }\n                } else {\n                    data.push({ [fmt.fieldName]: v, Value: Math.round(50 + rand() * 500) });\n                }\n            }\n\n            const fields = [makeField(fmt.fieldName), makeField('Value')];\n            const metadata: Record<string, { type: Type; semanticType: string; levels: any[] }> = {\n                [fmt.fieldName]: { type: fmt.expectedType, semanticType: fmt.semanticType, levels: fmt.values },\n                Value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            };\n            const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n                x: makeEncodingItem(fmt.fieldName),\n                y: makeEncodingItem('Value'),\n            };\n\n            if (cfg.needsColor) {\n                fields.push(makeField('Category'));\n                metadata.Category = { type: Type.String, semanticType: 'Category', levels: colorCategories };\n                encodingMap.color = makeEncodingItem('Category');\n            }\n\n            tests.push({\n                title: `${fmt.label} → ${cfg.chartType}`,\n                description: `${fmt.description} (${fmt.values.length} values)`,\n                tags: ['date-format', fmt.semanticType.toLowerCase(), cfg.chartType.toLowerCase().replace(/ /g, '-')],\n                chartType: cfg.chartType,\n                data,\n                fields,\n                metadata,\n                encodingMap,\n            });\n        }\n    }\n    return tests;\n}\n\n// ---------------------------------------------------------------------------\n// 1. Year — all representations\n// ---------------------------------------------------------------------------\nexport function genDateYearTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Year (string)',\n            description: 'Years as 4-digit strings: \"2000\", \"2001\", …',\n            values: Array.from({ length: 12 }, (_, i) => String(2000 + i)),\n            fieldName: 'Year',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Year (number)',\n            description: 'Years as integers: 2000, 2001, …',\n            values: Array.from({ length: 12 }, (_, i) => 2000 + i),\n            fieldName: 'Year',\n            expectedType: Type.Number,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Year (ISO date)',\n            description: 'Years as ISO strings: \"2000-01-01\", \"2001-01-01\", …',\n            values: Array.from({ length: 12 }, (_, i) => `${2000 + i}-01-01`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year (UTC ms)',\n            description: 'Years as UTC timestamps in ms: 946684800000, …',\n            values: Array.from({ length: 12 }, (_, i) => new Date(2000 + i, 0, 1).getTime()),\n            fieldName: 'Timestamp',\n            expectedType: Type.Number,\n            semanticType: 'Timestamp',\n        },\n        {\n            label: 'Year (2-digit string)',\n            description: 'Two-digit years: \"98\", \"99\", \"00\", \"01\", …',\n            values: Array.from({ length: 10 }, (_, i) => String((98 + i) % 100).padStart(2, '0')),\n            fieldName: 'Year',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n        {\n            label: 'Fiscal Year (FY YYYY)',\n            description: 'Fiscal years: \"FY 2018\", \"FY 2019\", …',\n            values: Array.from({ length: 8 }, (_, i) => `FY ${2018 + i}`),\n            fieldName: 'FiscalYear',\n            expectedType: Type.String,\n            semanticType: 'Year',\n        },\n    ], 8801);\n}\n\n// ---------------------------------------------------------------------------\n// 2. Month only\n// ---------------------------------------------------------------------------\nexport function genDateMonthTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Month (English)',\n            description: 'Month short names: \"Jan\", \"Feb\", …',\n            values: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n            fieldName: 'Month',\n            expectedType: Type.String,\n            semanticType: 'Month',\n        },\n        {\n            label: 'Month (full English)',\n            description: 'Full month names: \"January\", \"February\", …',\n            values: ['January', 'February', 'March', 'April', 'May', 'June',\n                'July', 'August', 'September', 'October', 'November', 'December'],\n            fieldName: 'Month',\n            expectedType: Type.String,\n            semanticType: 'Month',\n        },\n        {\n            label: 'Month (number)',\n            description: 'Months as integers: 1, 2, …, 12',\n            values: Array.from({ length: 12 }, (_, i) => i + 1),\n            fieldName: 'Month',\n            expectedType: Type.Number,\n            semanticType: 'Month',\n        },\n    ], 8802);\n}\n\n// ---------------------------------------------------------------------------\n// 3. Year-Month\n// ---------------------------------------------------------------------------\nexport function genDateYearMonthTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Year-Month (YYYY-MM, 1 year)',\n            description: 'Year-month strings within one year: \"2020-01\", …, \"2020-12\"',\n            values: Array.from({ length: 12 }, (_, i) => `2020-${String(i + 1).padStart(2, '0')}`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (YYYY-MM, 3 years)',\n            description: 'Year-month strings spanning 3 years: \"2020-01\", …, \"2022-12\"',\n            values: (() => {\n                const vals: string[] = [];\n                for (let y = 2020; y <= 2022; y++)\n                    for (let m = 1; m <= 12; m++)\n                        vals.push(`${y}-${String(m).padStart(2, '0')}`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (Mon YYYY, 1 year)',\n            description: 'Natural year-month within one year: \"Jan 2020\", …, \"Dec 2020\"',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                return months.map(m => `${m} 2020`);\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Year-Month (Mon YYYY, 5 years)',\n            description: 'Natural year-month spanning 5 years: \"Jan 2018\", …, \"Dec 2022\"',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                const vals: string[] = [];\n                for (let y = 2018; y <= 2022; y++)\n                    for (const m of months) vals.push(`${m} ${y}`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Quarter (Q# YYYY)',\n            description: 'Quarter strings: \"Q1 2020\", \"Q2 2020\", …',\n            values: (() => {\n                const quarters: string[] = [];\n                for (let y = 2018; y <= 2023; y++) {\n                    for (let q = 1; q <= 4; q++) quarters.push(`Q${q} ${y}`);\n                }\n                return quarters;\n            })(),\n            fieldName: 'Quarter',\n            expectedType: Type.String,\n            semanticType: 'Quarter',\n        },\n        {\n            label: 'Week (Wk ##)',\n            description: 'Week labels: \"Wk 01\", \"Wk 02\", …, \"Wk 24\"',\n            values: Array.from({ length: 24 }, (_, i) => `Wk ${String(i + 1).padStart(2, '0')}`),\n            fieldName: 'Week',\n            expectedType: Type.String,\n            semanticType: 'Week',\n        },\n    ], 8803);\n}\n\n// ---------------------------------------------------------------------------\n// 4. Decade\n// ---------------------------------------------------------------------------\nexport function genDateDecadeTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Decade (XXXXs)',\n            description: 'Decades as strings with \"s\": \"1950s\", \"1960s\", …',\n            values: Array.from({ length: 8 }, (_, i) => `${1950 + i * 10}s`),\n            fieldName: 'Decade',\n            expectedType: Type.String,\n            semanticType: 'Decade',\n        },\n        {\n            label: 'Decade (string)',\n            description: 'Decades as plain strings: \"1950\", \"1960\", …',\n            values: Array.from({ length: 8 }, (_, i) => String(1950 + i * 10)),\n            fieldName: 'Decade',\n            expectedType: Type.String,\n            semanticType: 'Decade',\n        },\n        {\n            label: 'Decade (number)',\n            description: 'Decades as integers: 1950, 1960, …',\n            values: Array.from({ length: 8 }, (_, i) => 1950 + i * 10),\n            fieldName: 'Decade',\n            expectedType: Type.Number,\n            semanticType: 'Decade',\n        },\n    ], 8804);\n}\n\n// ---------------------------------------------------------------------------\n// 5. Date / DateTime\n// ---------------------------------------------------------------------------\nexport function genDateDateTimeTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Date (ISO YYYY-MM-DD, 1 year)',\n            description: 'ISO date strings within one year: \"2020-01-15\", \"2020-02-15\", …',\n            values: Array.from({ length: 12 }, (_, i) => `2020-${String(i + 1).padStart(2, '0')}-15`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (ISO YYYY-MM-DD, 3 years)',\n            description: 'ISO date strings spanning 3 years: \"2020-01-15\", …, \"2022-12-15\"',\n            values: (() => {\n                const vals: string[] = [];\n                for (let y = 2020; y <= 2022; y++)\n                    for (let m = 1; m <= 12; m++)\n                        vals.push(`${y}-${String(m).padStart(2, '0')}-15`);\n                return vals;\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (Mon DD YYYY)',\n            description: 'Natural date: \"Jan 15 2020\", \"Feb 15 2020\", …',\n            values: (() => {\n                const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n                return months.map(m => `${m} 15 2020`);\n            })(),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (MM/DD/YYYY)',\n            description: 'US date format: \"01/15/2020\", \"02/15/2020\", …',\n            values: Array.from({ length: 12 }, (_, i) => `${String(i + 1).padStart(2, '0')}/15/2020`),\n            fieldName: 'Date',\n            expectedType: Type.Date,\n            semanticType: 'Date',\n        },\n        {\n            label: 'Date (DD.MM.YYYY)',\n            description: 'European date: \"15.01.2020\", \"15.02.2020\", …',\n            values: Array.from({ length: 12 }, (_, i) => `15.${String(i + 1).padStart(2, '0')}.2020`),\n            fieldName: 'Date',\n            expectedType: Type.String,\n            semanticType: 'Date',\n        },\n        {\n            label: 'DateTime (ISO 8601)',\n            description: 'Full datetime: \"2020-01-01T08:00:00\", …',\n            values: Array.from({ length: 10 }, (_, i) => `2020-01-${String(i + 1).padStart(2, '0')}T${String(8 + i).padStart(2, '0')}:00:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n    ], 8805);\n}\n\n// ---------------------------------------------------------------------------\n// 6. Hours — within a day and across days\n// ---------------------------------------------------------------------------\nexport function genDateHoursTests(): TestCase[] {\n    return genDateTests([\n        {\n            label: 'Hours (same day)',\n            description: 'Hourly data within one day: \"2020-01-15T00:00\", …, \"2020-01-15T23:00\"',\n            values: Array.from({ length: 24 }, (_, i) => `2020-01-15T${String(i).padStart(2, '0')}:00:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n        {\n            label: 'Hours (across days)',\n            description: 'Hourly data across 3 days: \"2020-01-01T00:00\", …',\n            values: Array.from({ length: 24 }, (_, i) => {\n                const day = Math.floor(i / 8) + 1;\n                const hour = i % 8 + 8;\n                return `2020-01-${String(day).padStart(2, '0')}T${String(hour).padStart(2, '0')}:00:00`;\n            }),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n        {\n            label: 'Hours (UTC ms, same day)',\n            description: 'Hourly timestamps in ms for one day',\n            values: Array.from({ length: 24 }, (_, i) => new Date(2020, 0, 15, i).getTime()),\n            fieldName: 'Timestamp',\n            expectedType: Type.Number,\n            semanticType: 'Timestamp',\n        },\n        {\n            label: 'Minutes (same hour)',\n            description: 'Per-minute data within one hour: \"2020-01-15T10:00\", …, \"2020-01-15T10:59\"',\n            values: Array.from({ length: 30 }, (_, i) => `2020-01-15T10:${String(i * 2).padStart(2, '0')}:00`),\n            fieldName: 'DateTime',\n            expectedType: Type.Date,\n            semanticType: 'DateTime',\n        },\n    ], 8806);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Semantic Context Test Cases\n *\n * Each test demonstrates how semantic type annotations improve chart output\n * via the field-context pipeline (vlApplyFieldContext).\n *\n * Every test includes a description explaining what happens WITHOUT the\n * semantic annotation so developers can see the importance of each property.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\n\n// ============================================================================\n// Shared helper data\n// ============================================================================\n\nconst CITIES = ['Seattle', 'Austin', 'Boston', 'Denver', 'Miami'];\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst TEAMS  = ['Alpha', 'Beta', 'Gamma', 'Delta'];\n\nfunction seeded(seed: number) {\n    let s = seed;\n    return () => { s = (s * 16807 + 0) % 2147483647; return s / 2147483647; };\n}\n\n// ============================================================================\n// 1. Revenue formatting  →  axis.format / axis.labelExpr\n//    Semantic type: \"Revenue\"  →  currency format ($1.2M)\n//\n//    WITHOUT this annotation:\n//      Axis labels show raw numbers: 1200000, 2300000, 3500000\n//      No currency symbol, no abbreviation — hard to read large values.\n//\n//    WITH \"Revenue\":\n//      Axis labels show: $1.2M, $2.3M, $3.5M\n//      Currency prefix ($) + SI abbreviation via format + labelExpr.\n// ============================================================================\n\nfunction genRevenueFormatTest(): TestCase {\n    const rand = seeded(42);\n    const data = CITIES.map(city => ({\n        city,\n        revenue: Math.round(500000 + rand() * 4500000),\n    }));\n\n    return {\n        title: 'Revenue Formatting ($)',\n        description:\n            'Semantic type \"Revenue\" with unit \"USD\" adds currency prefix ($) and SI abbreviation to axis labels. ' +\n            'WITHOUT this: axis would show raw numbers like 1200000.',\n        tags: ['semantic', 'format', 'currency', 'revenue'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('city'), makeField('revenue')],\n        metadata: {\n            city:    { type: Type.String, semanticType: 'City',    levels: CITIES },\n            revenue: { type: Type.Number, semanticType: 'Amount', levels: [] },\n        },\n        semanticAnnotations: {\n            revenue: { semanticType: 'Amount', unit: 'USD' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('city'),\n            y: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 2. Percentage formatting + nice=false\n//    Semantic type: \"Percentage\"  →  \".1%\" format, nice: false\n//\n//    WITHOUT this annotation:\n//      Values 0.72, 0.85 shown as plain decimals on axis.\n//      Axis range may extend beyond 1.0 (e.g., to 1.2) due to nice rounding.\n//\n//    WITH \"Percentage\":\n//      Axis labels show \"72%\", \"85%\".\n//      nice=false prevents axis from extending past 100%.\n// ============================================================================\n\nfunction genPercentageFormatTest(): TestCase {\n    const rand = seeded(99);\n    const categories = ['Marketing', 'Sales', 'Engineering', 'Support', 'Design', 'HR'];\n    const data = categories.map(dept => ({\n        department: dept,\n        completion_rate: Math.round((0.40 + rand() * 0.58) * 100) / 100,\n    }));\n\n    return {\n        title: 'Percentage Formatting (%)',\n        description:\n            'Semantic type \"Percentage\" formats axis as \"72%\" instead of 0.72, ' +\n            'and sets nice=false so axis doesn\\'t extend past 100%. ' +\n            'WITHOUT this: axis shows decimal fractions and may overshoot to 1.2.',\n        tags: ['semantic', 'format', 'percentage', 'nice'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('department'), makeField('completion_rate')],\n        metadata: {\n            department:      { type: Type.String, semanticType: 'Category',   levels: categories },\n            completion_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('department'),\n            y: makeEncodingItem('completion_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// 3. Domain constraint + Tick constraint (Rating [1,5])\n//    Semantic type: { semanticType: \"Rating\", intrinsicDomain: [1, 5] }\n//      → scale.domain = [1, 5]\n//      → axis.values = [1, 2, 3, 4, 5]  (integer ticks only)\n//\n//    WITHOUT this annotation:\n//      Axis auto-scales to data range (e.g., 2.3–4.7) — partial range.\n//      Tick marks at fractional values (2.5, 3.0, 3.5) — meaningless for ratings.\n//\n//    WITH \"Rating\" + intrinsicDomain:\n//      Full 1–5 range always visible; only integers 1,2,3,4,5 on axis.\n// ============================================================================\n\nfunction genRatingDomainTest(): TestCase {\n    const rand = seeded(77);\n    const products = ['Widget A', 'Widget B', 'Widget C', 'Widget D', 'Widget E',\n                      'Widget F', 'Widget G', 'Widget H'];\n    const data = products.map(p => ({\n        product: p,\n        rating: Math.round((2.0 + rand() * 2.8) * 10) / 10,\n        reviews: Math.round(10 + rand() * 490),\n    }));\n\n    return {\n        title: 'Rating Domain [1–5] & Integer Ticks',\n        description:\n            'Enriched annotation { semanticType: \"Rating\", intrinsicDomain: [1,5] } ' +\n            'pins the axis to 1–5 with integer-only ticks. ' +\n            'WITHOUT this: axis auto-scales to data range (e.g., 2.3–4.7) ' +\n            'and shows fractional tick marks like 2.5, 3.5.',\n        tags: ['semantic', 'domain', 'ticks', 'rating'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('product'), makeField('rating'), makeField('reviews')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: products },\n            rating:  { type: Type.Number, semanticType: 'Score',   levels: [] },\n            reviews: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        // Enriched annotation for rating — provides intrinsic domain\n        semanticAnnotations: {\n            rating: { semanticType: 'Score', intrinsicDomain: [1, 5] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('reviews'),\n            y: makeEncodingItem('rating'),\n        },\n    };\n}\n\n// ============================================================================\n// 4. Reversed axis (Rank)\n//    Semantic type: \"Rank\"  →  scale.reverse = true\n//\n//    WITHOUT this annotation:\n//      Rank 1 appears at the BOTTOM of the y-axis (lowest numeric value).\n//      Visually misleading — the \"best\" team appears lowest on the chart.\n//\n//    WITH \"Rank\":\n//      Rank 1 at TOP of y-axis. Visual position matches intuitive ranking.\n// ============================================================================\n\nfunction genRankReversedTest(): TestCase {\n    const rand = seeded(55);\n    const data: Record<string, any>[] = [];\n    for (const team of TEAMS) {\n        for (let m = 0; m < 6; m++) {\n            data.push({\n                month: MONTHS[m],\n                team,\n                rank: Math.ceil(rand() * TEAMS.length),\n            });\n        }\n    }\n\n    return {\n        title: 'Rank Reversed Axis',\n        description:\n            'Semantic type \"Rank\" reverses the y-axis so rank 1 (best) appears at the TOP. ' +\n            'WITHOUT this: rank 1 sits at the bottom — first place looks like last place.',\n        tags: ['semantic', 'reversed', 'rank'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('team'), makeField('rank')],\n        metadata: {\n            month: { type: Type.String, semanticType: 'Month',    levels: MONTHS.slice(0, 6) },\n            team:  { type: Type.String, semanticType: 'Category', levels: TEAMS },\n            rank:  { type: Type.Number, semanticType: 'Rank',     levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('month'),\n            y:     makeEncodingItem('rank'),\n            color: makeEncodingItem('team'),\n        },\n    };\n}\n\n// ============================================================================\n// 5. Scale type — log scale for Population\n//    Semantic type: \"Population\"  →  scale.type = \"log\"\n//    Only triggers when data spans ≥ 4 orders of magnitude (10,000×)\n//    AND the semantic type is in the allow-list (Population, GDP, etc.)\n//\n//    WITHOUT this annotation:\n//      Linear scale compresses small settlements into an invisible band\n//      while megacities dominate. Impossible to compare across 4+ orders.\n//\n//    WITH \"Population\":\n//      Log scale spreads values evenly — hamlet (500) and megacity (10M)\n//      are both clearly visible and comparable.\n// ============================================================================\n\nfunction genPopulationLogScaleTest(): TestCase {\n    // 12 places spanning ~20,000× (500 to 10M) to exceed the 10,000× threshold\n    const places = [\n        { place: 'Hamlet A',     population: 500,       area_km2: 1 },\n        { place: 'Hamlet B',     population: 1200,      area_km2: 3 },\n        { place: 'Village A',    population: 3500,      area_km2: 10 },\n        { place: 'Village B',    population: 8000,      area_km2: 18 },\n        { place: 'Small Town',   population: 22000,     area_km2: 40 },\n        { place: 'Town',         population: 65000,     area_km2: 80 },\n        { place: 'Small City',   population: 180000,    area_km2: 150 },\n        { place: 'City',         population: 520000,    area_km2: 300 },\n        { place: 'Large City',   population: 1400000,   area_km2: 550 },\n        { place: 'Metro A',     population: 3200000,   area_km2: 900 },\n        { place: 'Metro B',     population: 5800000,   area_km2: 1400 },\n        { place: 'Megacity',     population: 10000000,  area_km2: 2500 },\n    ];\n\n    return {\n        title: 'Population Log Scale (≥10,000× span)',\n        description:\n            'Semantic type \"Population\" applies log scale when data spans ≥ 4 orders ' +\n            'of magnitude (500 to 10M = 20,000×). Only triggers for allow-listed types. ' +\n            'WITHOUT this: linear scale compresses small values into an invisible band.',\n        tags: ['semantic', 'scaleType', 'log', 'population'],\n        chartType: 'Scatter Plot',\n        data: places,\n        fields: [makeField('place'), makeField('population'), makeField('area_km2')],\n        metadata: {\n            place:      { type: Type.String, semanticType: 'Category',   levels: places.map(p => p.place) },\n            population: { type: Type.Number, semanticType: 'Population', levels: [] },\n            area_km2:   { type: Type.Number, semanticType: 'Quantity',   levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('area_km2'),\n            y: makeEncodingItem('population'),\n        },\n    };\n}\n\n// ============================================================================\n// 6. Interpolation — monotone for Temperature\n//    Semantic type: \"Temperature\"  →  mark.interpolate = \"monotone\"\n//    Also adds \"°C\" suffix via format → labelExpr.\n//\n//    WITHOUT this annotation:\n//      Default linear interpolation creates jagged sawtooth lines between\n//      data points. No unit suffix on axis.\n//\n//    WITH \"Temperature\":\n//      Smooth monotone interpolation preserves local extrema without\n//      overshooting (no false dips below min or above max between points).\n//      Axis labels show \"15°C\", \"22°C\" etc.\n// ============================================================================\n\nfunction genTemperatureInterpolationTest(): TestCase {\n    const data: Record<string, any>[] = [];\n    // Two cities with different seasonal patterns\n    const seattleTemps = [-1, 2, 6, 10, 14, 18, 22, 21, 17, 11, 5, 1];\n    const miamiTemps   = [20, 21, 23, 25, 27, 29, 30, 30, 29, 27, 24, 21];\n\n    for (let i = 0; i < 12; i++) {\n        data.push({ month: MONTHS[i], city: 'Seattle', temperature: seattleTemps[i] });\n        data.push({ month: MONTHS[i], city: 'Miami',   temperature: miamiTemps[i] });\n    }\n\n    return {\n        title: 'Temperature Interpolation (monotone + °C)',\n        description:\n            'Semantic type \"Temperature\" applies monotone interpolation for smooth curves ' +\n            'and adds \"°C\" suffix to axis labels. ' +\n            'WITHOUT this: jagged linear segments between points, no unit on axis.',\n        tags: ['semantic', 'interpolation', 'temperature', 'format'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('city'), makeField('temperature')],\n        metadata: {\n            month:       { type: Type.String, semanticType: 'Month',       levels: MONTHS },\n            city:        { type: Type.String, semanticType: 'City',        levels: ['Seattle', 'Miami'] },\n            temperature: { type: Type.Number, semanticType: 'Temperature', levels: [] },\n        },\n        // Enriched annotation for temperature — unit drives suffix\n        semanticAnnotations: {\n            temperature: { semanticType: 'Temperature', unit: '°C' },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('month'),\n            y:     makeEncodingItem('temperature'),\n            color: makeEncodingItem('city'),\n        },\n    };\n}\n\n// ============================================================================\n// 7. Combined: Revenue + Percentage side by side\n//    Shows that different semantic types on y-axis produce different formatting\n//    even with the same chart template.\n//\n//    WITHOUT annotations:\n//      Both charts show plain numeric axis (0.72 and 3500000).\n//\n//    WITH annotations:\n//      Revenue chart: \"$3.5M\"   Percentage chart: \"72%\"\n// ============================================================================\n\nfunction genRevenueVsPercentTest(): TestCase {\n    const rand = seeded(31);\n    const data = CITIES.map(city => ({\n        city,\n        revenue: Math.round(1000000 + rand() * 4000000),\n        growth_rate: Math.round((0.02 + rand() * 0.28) * 1000) / 1000,\n    }));\n\n    return {\n        title: 'Revenue vs Growth Rate (dual semantics)',\n        description:\n            'Two numeric columns with different semantics on the same data. ' +\n            'Revenue with unit \"USD\" gets \"$\" prefix + SI abbreviation; growth_rate gets \"%\" format. ' +\n            'WITHOUT annotations: both axes show plain numbers.',\n        tags: ['semantic', 'format', 'currency', 'percentage', 'dual'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('city'), makeField('revenue'), makeField('growth_rate')],\n        metadata: {\n            city:        { type: Type.String, semanticType: 'City',       levels: CITIES },\n            revenue:     { type: Type.Number, semanticType: 'Amount',    levels: [] },\n            growth_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            revenue: { semanticType: 'Amount', unit: 'USD' },\n            growth_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 1] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('revenue'),\n            y:     makeEncodingItem('growth_rate'),\n            color: makeEncodingItem('city'),\n        },\n    };\n}\n\n// ============================================================================\n// 8. Score domain [0, 100] with tick constraint\n//    Enriched annotation: { semanticType: \"Score\", intrinsicDomain: [0, 100] }\n//      → scale.domain = [0, 100], axis.tickMinStep = 1\n//\n//    WITHOUT this:\n//      Axis may show 65–92 (auto-scaled to data) with arbitrary tick spacing.\n//\n//    WITH \"Score\" + intrinsicDomain:\n//      Full 0–100 range, giving context that 85 is \"85 out of 100\".\n// ============================================================================\n\nfunction genScoreDomainTest(): TestCase {\n    const rand = seeded(63);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve', 'Frank', 'Grace', 'Hank'];\n    const data = students.map(s => ({\n        student: s,\n        exam_score: Math.round(55 + rand() * 40),\n        study_hours: Math.round(2 + rand() * 18),\n    }));\n\n    return {\n        title: 'Exam Score Domain [0–100]',\n        description:\n            'Enriched annotation { semanticType: \"Score\", intrinsicDomain: [0, 100] } ' +\n            'pins the axis to 0–100, giving full context. ' +\n            'WITHOUT this: axis auto-scales to data range (e.g., 58–94), ' +\n            'losing the \"out of 100\" context.',\n        tags: ['semantic', 'domain', 'score'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('student'), makeField('exam_score'), makeField('study_hours')],\n        metadata: {\n            student:    { type: Type.String, semanticType: 'Category', levels: students },\n            exam_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n            study_hours:{ type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        semanticAnnotations: {\n            exam_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('student'),\n            y: makeEncodingItem('exam_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 15. Rating bar chart — domain [1,5] should NOT extend to zero\n//     Semantic type: { semanticType: \"Rating\", intrinsicDomain: [1, 5] }\n//\n//     The key design question: should a bar chart of ratings include zero?\n//     Most default tools naively force zero on all bar charts. But Rating\n//     is a bounded scale [1, 5] — zero is outside the scale and wastes 20%\n//     of visual space while compressing the meaningful 1-5 differences.\n//\n//     The semantic domain constraint [1, 5] is authoritative and should\n//     clear any auto-computed zero:true from the zero-baseline heuristic.\n//\n//     WITHOUT semantic domain: bar starts at 0, compressing the 1-5 range\n//     WITH semantic domain [1,5]: bars span the full [1,5] range\n// ============================================================================\n\nfunction genRatingBarDomainTest(): TestCase {\n    const rand = seeded(501);\n    const restaurants = ['Sakura Sushi', 'Bella Pasta', 'Taco Loco',\n                         'Zen Noodle', 'Burger Joint', 'Le Bistro'];\n    const data = restaurants.map(r => ({\n        restaurant: r,\n        avg_rating: Math.round((2.5 + rand() * 2.3) * 10) / 10,\n    }));\n\n    return {\n        title: 'Rating Bar — Domain [1,5] vs Zero',\n        description:\n            'Bar chart of ratings with intrinsicDomain [1,5]. The semantic domain ' +\n            'should prevent zero-extension — bars span [1,5] not [0,5]. ' +\n            'WITHOUT this: bar chart forces zero, wasting 20% of space on impossible values.',\n        tags: ['semantic', 'domain', 'zero', 'rating', 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('restaurant'), makeField('avg_rating')],\n        metadata: {\n            restaurant: { type: Type.String, semanticType: 'Category', levels: restaurants },\n            avg_rating: { type: Type.Number, semanticType: 'Score',   levels: [] },\n        },\n        semanticAnnotations: {\n            avg_rating: { semanticType: 'Score', intrinsicDomain: [1, 5] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('restaurant'),\n            y: makeEncodingItem('avg_rating'),\n        },\n    };\n}\n\n// ============================================================================\n// 16. Revenue bar chart — zero baseline IS meaningful\n//     Semantic type: \"Revenue\" (zero-meaningful class)\n//\n//     Revenue is an additive measure where 0 = no revenue. Bar length from\n//     zero communicates proportional magnitude. Including zero is correct.\n//\n//     WITHOUT semantic type: VL may or may not include zero by default\n//     WITH \"Revenue\": zero:true ensures bars start at 0\n// ============================================================================\n\nfunction genRevenueBarZeroTest(): TestCase {\n    const rand = seeded(502);\n    const products = ['Widget A', 'Widget B', 'Widget C', 'Widget D', 'Widget E'];\n    const data = products.map(p => ({\n        product: p,\n        revenue: Math.round(80000 + rand() * 320000),\n    }));\n\n    return {\n        title: 'Revenue Bar — Zero Baseline',\n        description:\n            'Revenue is zero-meaningful: $0 = no revenue. Bar charts must start at zero ' +\n            'to preserve proportional bar length. ' +\n            'WITHOUT this: data-fit might show bars starting at $80K, exaggerating differences.',\n        tags: ['semantic', 'zero', 'revenue', 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('revenue')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: products },\n            revenue: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        semanticAnnotations: {\n            revenue: { semanticType: 'Amount', unit: 'USD' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('product'),\n            y: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 17. Temperature scatter — zero is arbitrary, should NOT include zero\n//     Semantic type: \"Temperature\" (zero-arbitrary class)\n//\n//     0°F / 0°C are arbitrary scale points, not physical absence.\n//     Including zero on a scatter plot of 60–95°F summer temps wastes the\n//     bottom 60% of the canvas.\n//\n//     WITHOUT semantic type: VL default may or may not include zero\n//     WITH \"Temperature\": zero:false, VL nice-rounds to clean bounds\n// ============================================================================\n\nfunction genTemperatureScatterZeroTest(): TestCase {\n    const rand = seeded(503);\n    const days = Array.from({ length: 20 }, (_, i) => `Day ${i + 1}`);\n    const data = days.map(d => ({\n        day: d,\n        high_temp: Math.round(65 + rand() * 30),\n        humidity: Math.round(30 + rand() * 50),\n    }));\n\n    return {\n        title: 'Temperature Scatter — No Zero',\n        description:\n            'Temperature zero (0°F/°C) is an arbitrary scale point. For data in 65–95°F, ' +\n            'including zero wastes 60% of the canvas. zero:false lets VL data-fit with ' +\n            'nice tick rounding. ' +\n            'WITHOUT this: chart might waste space including the irrelevant zero.',\n        tags: ['semantic', 'zero', 'temperature', 'scatter'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('day'), makeField('high_temp'), makeField('humidity')],\n        metadata: {\n            day:       { type: Type.String, semanticType: 'Category',    levels: days },\n            high_temp: { type: Type.Number, semanticType: 'Temperature', levels: [] },\n            humidity:  { type: Type.Number, semanticType: 'Percentage',  levels: [] },\n        },\n        semanticAnnotations: {\n            humidity: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('humidity'),\n            y: makeEncodingItem('high_temp'),\n        },\n    };\n}\n\n// ============================================================================\n// 18. Percentage line — snap-to-bound heuristic\n//     Semantic type: \"Percentage\" → intrinsicDomain [0, 100]\n//\n//     Uses snap-to-bound: if data approaches the theoretical endpoint\n//     (≥90% of max), the axis snaps to it. Data at 40–85% is below the\n//     snap threshold → axis data-fits. Data at 60–97% would snap to 100%.\n//     The zero-baseline contextual logic independently decides whether\n//     to include 0 (bar = yes, line = depends on proximity).\n// ============================================================================\n\nfunction genPercentageLineDomainTest(): TestCase {\n    const rand = seeded(504);\n    const weeks = Array.from({ length: 10 }, (_, i) => `Week ${i + 1}`);\n    const data = weeks.map(w => ({\n        week: w,\n        completion_rate: Math.round(40 + rand() * 45),\n    }));\n\n    return {\n        title: 'Percentage Line — Snap-to-Bound',\n        description:\n            'Completion rates (40–85%) with intrinsicDomain [0, 100]. Data max (85%) is ' +\n            'below the 90% snap threshold, so the axis data-fits rather than forcing 100%. ' +\n            'If data reached 97%, the axis would snap to 100% (stopping at 97% looks arbitrary).',\n        tags: ['semantic', 'domain', 'zero', 'percentage', 'line'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('completion_rate')],\n        metadata: {\n            week:            { type: Type.String, semanticType: 'Category',   levels: weeks },\n            completion_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('week'),\n            y: makeEncodingItem('completion_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// Public generator\n// ============================================================================\n\nexport function genSemanticContextTests(): TestCase[] {\n    return [\n        genRevenueFormatTest(),\n        genPercentageFormatTest(),\n        genRatingDomainTest(),\n        genRankReversedTest(),\n        genPopulationLogScaleTest(),\n        genTemperatureInterpolationTest(),\n        genRevenueVsPercentTest(),\n        genScoreDomainTest(),\n        genProfitSignedCurrencyTest(),\n        genWeightUnitSuffixTest(),\n        genCountStepInterpolationTest(),\n        genLatitudeDomainClampTest(),\n        genPercentageChangeSignedTest(),\n        genMonthCanonicalOrderTest(),\n        genRatingBarDomainTest(),\n        genRevenueBarZeroTest(),\n        genTemperatureScatterZeroTest(),\n        genPercentageLineDomainTest(),\n        genDayOfWeekOrderTest(),\n        genYearFormatTest(),\n        genSentimentDivergingColorTest(),\n        genRevenueSequentialColorTest(),\n        genCorrelationDivergingTest(),\n        genNiceFalseScoreTest(),\n        // --- New tests (25–39) ---\n        genDurationUnitSuffixTest(),\n        genQuarterCanonicalOrderTest(),\n        genCostCurrencyFormatTest(),\n        genDirectionCompassOrderTest(),\n        genAgeGroupOrdinalTest(),\n        genBooleanColorTest(),\n        genLongitudeDomainClampTest(),\n        genIndexOrdinalTest(),\n        genPercentageWholeNumberTest(),\n        genScoreColorDivergingTest(),\n        genPriceEurCurrencyTest(),\n        genYearOrdinalDisambiguationTest(),\n        genProfitColorDivergingTest(),\n        genCountIntegerFormatTest(),\n        genUnregisteredTypeFallbackTest(),\n    ];\n}\n\n// ============================================================================\n// 9. Profit — signed decimal format\n//    Semantic type: \"Profit\"  →  decimal format class\n//\n//    WITHOUT this annotation:\n//      Axis shows raw numbers: 120000, -50000. No sign prefix on positive\n//      values. Hard to tell gains from losses at a glance.\n//\n//    WITH \"Profit\":\n//      Tooltip shows: +120,000, -50,000. Sign always visible in tooltips.\n//      Axis defers to VL defaults. Currency prefix requires unit annotation.\n// ============================================================================\n\nfunction genProfitSignedCurrencyTest(): TestCase {\n    const rand = seeded(111);\n    const quarters = ['Q1-2024', 'Q2-2024', 'Q3-2024', 'Q4-2024',\n                      'Q1-2025', 'Q2-2025', 'Q3-2025', 'Q4-2025'];\n    const data = quarters.map(q => ({\n        quarter: q,\n        profit: Math.round((-200000 + rand() * 600000) / 1000) * 1000,\n    }));\n\n    return {\n        title: 'Profit Signed Decimal',\n        description:\n            'Semantic type \"Profit\" with unit \"USD\" uses decimal format with currency in tooltip. ' +\n            'Sign is always visible in tooltips, making gains vs losses obvious. ' +\n            'WITHOUT this: raw numbers without sign prefix.',\n        tags: ['semantic', 'format', 'decimal', 'profit'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('profit')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Category', levels: quarters },\n            profit:  { type: Type.Number, semanticType: 'Profit',   levels: [] },\n        },\n        semanticAnnotations: {\n            profit: { semanticType: 'Profit', unit: 'USD' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('profit'),\n        },\n    };\n}\n\n// ============================================================================\n// 10. Weight with unit suffix (kg)\n//     Semantic type: \"Weight\" + unit: \"kg\"  →  \"72.5 kg\" on axis\n//\n//     WITHOUT this annotation:\n//       Axis shows bare numbers: 72.5, 85.0. No indication of unit.\n//       User has to look at column name to figure out what these numbers mean.\n//\n//     WITH \"Weight\" + unit:\n//       Axis labels show \"72.5 kg\", \"85.0 kg\". Unit is part of the label.\n// ============================================================================\n\nfunction genWeightUnitSuffixTest(): TestCase {\n    const rand = seeded(202);\n    const athletes = ['Chen', 'Maria', 'James', 'Yuki', 'Priya',\n                      'Lars', 'Fatima', 'Carlos', 'Anna', 'Kwame'];\n    const data = athletes.map(name => ({\n        athlete: name,\n        weight_kg: Math.round((55 + rand() * 50) * 10) / 10,\n        height_cm: Math.round(155 + rand() * 40),\n    }));\n\n    return {\n        title: 'Weight Unit Suffix (kg)',\n        description:\n            'Enriched annotation { semanticType: \"Weight\", unit: \"kg\" } appends \" kg\" ' +\n            'to axis labels. WITHOUT this: bare numbers with no unit context.',\n        tags: ['semantic', 'format', 'unit-suffix', 'weight'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('athlete'), makeField('weight_kg'), makeField('height_cm')],\n        metadata: {\n            athlete:   { type: Type.String, semanticType: 'Category', levels: athletes },\n            weight_kg: { type: Type.Number, semanticType: 'Weight',   levels: [] },\n            height_cm: { type: Type.Number, semanticType: 'Distance', levels: [] },\n        },\n        semanticAnnotations: {\n            weight_kg: { semanticType: 'Weight', unit: 'kg' },\n            height_cm: { semanticType: 'Distance', unit: 'cm' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('height_cm'),\n            y: makeEncodingItem('weight_kg'),\n        },\n    };\n}\n\n// ============================================================================\n// 11. Count — step-after interpolation\n//     Semantic type: \"Count\"  →  interpolation = \"step-after\"\n//\n//     WITHOUT this annotation:\n//       Line chart connects counts with straight diagonal lines, implying\n//       gradual continuous change between data points.\n//\n//     WITH \"Count\":\n//       Step-after interpolation shows flat steps — count stays constant\n//       until the next event, then jumps. Accurate for discrete events.\n// ============================================================================\n\nfunction genCountStepInterpolationTest(): TestCase {\n    const data: Record<string, any>[] = [];\n    const weeks = ['Wk1', 'Wk2', 'Wk3', 'Wk4', 'Wk5', 'Wk6',\n                   'Wk7', 'Wk8', 'Wk9', 'Wk10', 'Wk11', 'Wk12'];\n    const bugCounts   = [3, 7, 12, 8, 15, 22, 18, 11, 9, 14, 6, 4];\n    const featureDone = [1, 2, 4, 6, 7, 8, 10, 13, 15, 16, 18, 20];\n\n    for (let i = 0; i < 12; i++) {\n        data.push({ week: weeks[i], metric: 'Bugs Filed',        count: bugCounts[i] });\n        data.push({ week: weeks[i], metric: 'Features Completed', count: featureDone[i] });\n    }\n\n    return {\n        title: 'Count Step-After Interpolation',\n        description:\n            'Semantic type \"Count\" uses step-after interpolation — count stays ' +\n            'constant then jumps at each data point (discrete events). ' +\n            'WITHOUT this: diagonal lines imply gradual change between weeks.',\n        tags: ['semantic', 'interpolation', 'count', 'step'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('metric'), makeField('count')],\n        metadata: {\n            week:   { type: Type.String, semanticType: 'Category', levels: weeks },\n            metric: { type: Type.String, semanticType: 'Category', levels: ['Bugs Filed', 'Features Completed'] },\n            count:  { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('week'),\n            y:     makeEncodingItem('count'),\n            color: makeEncodingItem('metric'),\n        },\n    };\n}\n\n// ============================================================================\n// 12. Latitude — hard domain [-90, 90] with clamp\n//     Semantic type: \"Latitude\"  →  scale.domain = [-90, 90], clamp = true\n//\n//     WITHOUT this annotation:\n//       Axis auto-scales to data (e.g., 30–60). No indication these are\n//       geographic degrees. Axis could \"nice-round\" to 25–65.\n//\n//     WITH \"Latitude\":\n//       Full -90 to 90 range. Clamp prevents out-of-range rendering.\n//       Shows data in geographic context.\n// ============================================================================\n\nfunction genLatitudeDomainClampTest(): TestCase {\n    const cities = [\n        { city: 'Singapore',  latitude: 1.35,  gdp_per_capita: 65000 },\n        { city: 'Mumbai',     latitude: 19.08, gdp_per_capita: 7200 },\n        { city: 'Cairo',      latitude: 30.04, gdp_per_capita: 3900 },\n        { city: 'Istanbul',   latitude: 41.01, gdp_per_capita: 9500 },\n        { city: 'Paris',      latitude: 48.86, gdp_per_capita: 42000 },\n        { city: 'London',     latitude: 51.51, gdp_per_capita: 46000 },\n        { city: 'Moscow',     latitude: 55.76, gdp_per_capita: 11300 },\n        { city: 'Helsinki',   latitude: 60.17, gdp_per_capita: 49000 },\n        { city: 'Reykjavik',  latitude: 64.13, gdp_per_capita: 52000 },\n        { city: 'Tromsø',     latitude: 69.65, gdp_per_capita: 65000 },\n    ];\n\n    return {\n        title: 'Latitude Hard Domain [-90°, 90°]',\n        description:\n            'Semantic type \"Latitude\" pins axis to [-90, 90] with clamp=true ' +\n            '(hard physical domain). Shows where cities fall in global context. ' +\n            'WITHOUT this: axis auto-scales to data range (1–70), losing context.',\n        tags: ['semantic', 'domain', 'clamp', 'latitude', 'geographic'],\n        chartType: 'Scatter Plot',\n        data: cities,\n        fields: [makeField('city'), makeField('latitude'), makeField('gdp_per_capita')],\n        metadata: {\n            city:           { type: Type.String, semanticType: 'City',     levels: cities.map(c => c.city) },\n            latitude:       { type: Type.Number, semanticType: 'Latitude', levels: [] },\n            gdp_per_capita: { type: Type.Number, semanticType: 'Amount',   levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('gdp_per_capita'),\n            y: makeEncodingItem('latitude'),\n        },\n    };\n}\n\n// ============================================================================\n// 13. Percentage Change — signed percent (+12.3% / -5.1%)\n//     Semantic type: \"PercentageChange\"  →  percent format\n//\n//     WITHOUT this annotation:\n//       Axis shows 0.12, -0.05 — no sign on positive, no % symbol.\n//       Hard to interpret at a glance.\n//\n//     WITH \"PercentageChange\":\n//       Axis shows \"+12.3%\", \"-5.1%\". Sign always visible, % suffix.\n// ============================================================================\n\nfunction genPercentageChangeSignedTest(): TestCase {\n    const rand = seeded(333);\n    const stocks = ['AAPL', 'GOOG', 'MSFT', 'AMZN', 'META',\n                    'TSLA', 'NVDA', 'AMD', 'NFLX', 'DIS'];\n    const data = stocks.map(s => ({\n        stock: s,\n        ytd_change: Math.round((-0.30 + rand() * 0.80) * 1000) / 1000,\n        market_cap_B: Math.round(50 + rand() * 2950),\n    }));\n\n    return {\n        title: 'Percentage Change (signed ±%)',\n        description:\n            'Semantic type \"PercentageChange\" uses percent format. ' +\n            'Sign is always visible, making gains and losses instantly clear. ' +\n            'WITHOUT this: raw decimals like 0.12 or -0.05 with no % symbol.',\n        tags: ['semantic', 'format', 'percent', 'percentage-change'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('stock'), makeField('ytd_change'), makeField('market_cap_B')],\n        metadata: {\n            stock:        { type: Type.String, semanticType: 'Category',         levels: stocks },\n            ytd_change:   { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n            market_cap_B: { type: Type.Number, semanticType: 'Amount',           levels: [] },\n        },\n        semanticAnnotations: {\n            ytd_change: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stock'),\n            y: makeEncodingItem('ytd_change'),\n        },\n    };\n}\n\n// ============================================================================\n// 14. Month canonical ordering\n//     Semantic type: \"Month\" → ordinal sort order preserved\n//\n//     WITHOUT this annotation:\n//       Months sorted alphabetically: Apr, Aug, Dec, Feb, Jan, Jul...\n//       Completely wrong for temporal data.\n//\n//     WITH \"Month\":\n//       Canonical order: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.\n// ============================================================================\n\nfunction genMonthCanonicalOrderTest(): TestCase {\n    const rand = seeded(444);\n    // Deliberately out of order in data to show sorting\n    const shuffledMonths = ['Mar', 'Nov', 'Jul', 'Jan', 'Sep', 'May',\n                            'Apr', 'Dec', 'Feb', 'Oct', 'Jun', 'Aug'];\n    const data = shuffledMonths.map(m => ({\n        month: m,\n        sales: Math.round(10000 + rand() * 40000),\n    }));\n\n    return {\n        title: 'Month Canonical Ordering',\n        description:\n            'Semantic type \"Month\" preserves calendar order (Jan→Dec) regardless ' +\n            'of data insertion order. ' +\n            'WITHOUT this: months sort alphabetically (Apr, Aug, Dec, Feb...).',\n        tags: ['semantic', 'ordering', 'month', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('month'), makeField('sales')],\n        metadata: {\n            month: { type: Type.String, semanticType: 'Month',    levels: shuffledMonths },\n            sales: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('sales'),\n        },\n    };\n}\n\n// ============================================================================\n// 19. Day-of-Week canonical ordering\n//     Semantic type: \"Day\" → canonical Mon–Sun order\n//\n//     WITHOUT this annotation:\n//       Day names sorted alphabetically: Fri, Mon, Sat, Sun, Thu, Tue, Wed.\n//       This destroys the weekly cycle.\n//\n//     WITH \"Day\":\n//       Canonical weekday order: Mon, Tue, Wed, Thu, Fri, Sat, Sun\n//       (or data-matching variant). ordinalSortOrder provides the domain.\n// ============================================================================\n\nfunction genDayOfWeekOrderTest(): TestCase {\n    const rand = seeded(555);\n    // Deliberately shuffled\n    const shuffledDays = ['Thu', 'Mon', 'Sat', 'Wed', 'Fri', 'Tue', 'Sun'];\n    const data = shuffledDays.map(d => ({\n        day: d,\n        visitors: Math.round(200 + rand() * 800),\n    }));\n\n    return {\n        title: 'Day-of-Week Canonical Order',\n        description:\n            'Semantic type \"Day\" preserves weekday order (Mon→Sun) regardless ' +\n            'of data encounter order. ' +\n            'WITHOUT this: days sort alphabetically (Fri, Mon, Sat...).',\n        tags: ['semantic', 'ordering', 'day', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('day'), makeField('visitors')],\n        metadata: {\n            day:      { type: Type.String, semanticType: 'Day',   levels: shuffledDays },\n            visitors: { type: Type.Number, semanticType: 'Count', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('day'),\n            y: makeEncodingItem('visitors'),\n        },\n    };\n}\n\n// ============================================================================\n// 20. Year integer format — no comma separator\n//     Semantic type: \"Year\" → format \"d\" (2024 not \"2,024\")\n//\n//     WITHOUT this annotation:\n//       Numeric years treated as generic numbers → formatted with thousands\n//       separator: \"2,024\" instead of \"2024\". Looks like a decimal value.\n//\n//     WITH \"Year\":\n//       Format class = 'integer', and the pipeline uses bare \"d\" format\n//       for years (without comma grouping). Axis reads: 2020, 2021, 2022...\n// ============================================================================\n\nfunction genYearFormatTest(): TestCase {\n    const years = [2018, 2019, 2020, 2021, 2022, 2023, 2024];\n    const rand = seeded(666);\n    const data = years.map(y => ({\n        year: y,\n        gdp_trillion: Math.round((18 + rand() * 8) * 100) / 100,\n    }));\n\n    return {\n        title: 'Year Format (no comma)',\n        description:\n            'Semantic type \"Year\" uses integer format without comma grouping: ' +\n            '\"2024\" not \"2,024\". ' +\n            'WITHOUT this: years shown as \"2,024\" with thousands separator.',\n        tags: ['semantic', 'format', 'year', 'integer'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('year'), makeField('gdp_trillion')],\n        metadata: {\n            year:         { type: Type.Number, semanticType: 'Year',    levels: years },\n            gdp_trillion: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('year'),\n            y: makeEncodingItem('gdp_trillion'),\n        },\n    };\n}\n\n// ============================================================================\n// 21. Sentiment — diverging color scheme\n//     Semantic type: \"Sentiment\" on color channel → diverging color scheme\n//     with midpoint at 0\n//\n//     WITHOUT this annotation:\n//       Color mapped to a generic sequential palette (e.g., viridis).\n//       Positive and negative sentiment look like arbitrary gradients,\n//       not intuitively split around a neutral center.\n//\n//     WITH \"Sentiment\":\n//       Diverging color scheme (e.g., redblue) centered on 0.\n//       Negative = one hue, positive = another, 0 = neutral white/grey.\n//       scale.domainMid = 0 ensures the midpoint is visually centered.\n// ============================================================================\n\nfunction genSentimentDivergingColorTest(): TestCase {\n    const rand = seeded(777);\n    const products = ['Widget A', 'Widget B', 'Gadget X', 'Gadget Y',\n                      'Tool M', 'Tool N', 'Part P', 'Part Q'];\n    const data = products.map(p => ({\n        product: p,\n        reviews: Math.round(50 + rand() * 450),\n        sentiment: Math.round((-0.8 + rand() * 1.6) * 100) / 100,\n    }));\n\n    return {\n        title: 'Sentiment Diverging Color',\n        description:\n            'Semantic type \"Sentiment\" on the color channel triggers a diverging ' +\n            'color scheme (redblue) with domainMid = 0. Negative sentiment gets ' +\n            'one hue, positive gets another, and zero is neutral. ' +\n            'WITHOUT this: generic sequential palette with no semantic midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'sentiment'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('reviews'), makeField('sentiment')],\n        metadata: {\n            product:   { type: Type.String, semanticType: 'Category',  levels: products },\n            reviews:   { type: Type.Number, semanticType: 'Count',     levels: [] },\n            sentiment: { type: Type.Number, semanticType: 'Sentiment', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('product'),\n            y: makeEncodingItem('reviews'),\n            color: makeEncodingItem('sentiment'),\n        },\n    };\n}\n\n// ============================================================================\n// 22. Revenue sequential color — quantitative color uses sequential scheme\n//     Semantic type: \"Revenue\" on color channel → sequential gold-green scheme\n//\n//     WITHOUT this annotation:\n//       Default sequential palette (viridis). Works but doesn't convey\n//       financial context.\n//\n//     WITH \"Revenue\":\n//       Financial-themed sequential scheme (goldgreen) automatically chosen\n//       for quantitative financial data. Warmer = higher revenue.\n// ============================================================================\n\nfunction genRevenueSequentialColorTest(): TestCase {\n    const rand = seeded(888);\n    const regions = ['North', 'South', 'East', 'West', 'Central'];\n    const data: Record<string, any>[] = [];\n    for (const region of regions) {\n        for (const q of ['Q1', 'Q2', 'Q3', 'Q4']) {\n            data.push({\n                region,\n                quarter: q,\n                revenue: Math.round(100000 + rand() * 900000),\n            });\n        }\n    }\n\n    return {\n        title: 'Revenue Sequential Color',\n        description:\n            'Semantic type \"Revenue\" on the color channel triggers a financial-themed ' +\n            'sequential scheme (goldgreen). Higher revenue → warmer color. ' +\n            'WITHOUT this: default viridis or generic palette with no financial connotation.',\n        tags: ['semantic', 'colorScheme', 'sequential', 'revenue'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('region'), makeField('quarter'), makeField('revenue')],\n        metadata: {\n            region:  { type: Type.String, semanticType: 'Category', levels: regions },\n            quarter: { type: Type.String, semanticType: 'Quarter',  levels: ['Q1', 'Q2', 'Q3', 'Q4'] },\n            revenue: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('region'),\n            y: makeEncodingItem('revenue'),\n            color: makeEncodingItem('revenue'),\n        },\n    };\n}\n\n// ============================================================================\n// 23. Correlation — diverging color + bounded domain [-1, 1]\n//     Semantic type: \"Correlation\" → domain [-1, 1], diverging color,\n//     clamped scale, decimal format\n//\n//     WITHOUT this annotation:\n//       Color scale auto-fits to data range (e.g., [0.12, 0.89]).\n//       No diverging scheme, no fixed [-1,1] bounds, no midpoint centering.\n//\n//     WITH \"Correlation\":\n//       Domain clamped to [-1, 1], diverging color with midpoint at 0,\n//       decimal format (0.85 / -0.42). Full semantic context.\n// ============================================================================\n\nfunction genCorrelationDivergingTest(): TestCase {\n    const rand = seeded(999);\n    const vars = ['GDP', 'Unemployment', 'Inflation', 'Education', 'Health'];\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < vars.length; i++) {\n        for (let j = 0; j < vars.length; j++) {\n            const corr = i === j ? 1.0 : Math.round((-0.9 + rand() * 1.8) * 100) / 100;\n            data.push({\n                var_x: vars[i],\n                var_y: vars[j],\n                correlation: corr,\n            });\n        }\n    }\n\n    return {\n        title: 'Correlation Diverging + Domain',\n        description:\n            'Semantic type \"Correlation\" on color sets a diverging scheme with ' +\n            'midpoint 0 and domain [-1, 1]. Positive correlations appear in one hue, ' +\n            'negative in another. Domain is fixed to the mathematical bounds. ' +\n            'WITHOUT this: auto-fitted color domain, sequential palette, no midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'domain', 'correlation'],\n        chartType: 'Heatmap',\n        data,\n        fields: [makeField('var_x'), makeField('var_y'), makeField('correlation')],\n        metadata: {\n            var_x:       { type: Type.String, semanticType: 'Category',    levels: vars },\n            var_y:       { type: Type.String, semanticType: 'Category',    levels: vars },\n            correlation: { type: Type.Number, semanticType: 'Correlation', levels: [] },\n        },\n        semanticAnnotations: {\n            correlation: { semanticType: 'Correlation', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('var_x'),\n            y: makeEncodingItem('var_y'),\n            color: makeEncodingItem('correlation'),\n        },\n    };\n}\n\n// ============================================================================\n// 24. Nice = false — bounded domain without nice rounding\n//     Semantic type: \"Score\" with domain [0, 100] → nice = false\n//\n//     WITHOUT nice = false:\n//       VL's \"nice\" rounding extends domain [0, 100] to [0, 120] or similar —\n//       wasting space and implying scores > 100 exist.\n//\n//     WITH nice = false (from bounded domainShape):\n//       Axis endpoints stick exactly to [0, 100]. No extension beyond the\n//       intrinsic bounds of the measurement scale.\n// ============================================================================\n\nfunction genNiceFalseScoreTest(): TestCase {\n    const rand = seeded(1010);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve',\n                      'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy'];\n    const data = students.map(s => ({\n        student: s,\n        math_score: Math.round(45 + rand() * 55),\n        science_score: Math.round(30 + rand() * 70),\n    }));\n\n    return {\n        title: 'Nice = false (Score [0-100])',\n        description:\n            'Score\\'s bounded domainShape sets nice = false so VL doesn\\'t ' +\n            'extend the axis beyond [0, 100]. Ticks stop at the intrinsic bounds. ' +\n            'WITHOUT nice = false: VL extends to [0, 120] — implying impossible scores.',\n        tags: ['semantic', 'nice', 'domain', 'score', 'bounded'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('student'), makeField('math_score'), makeField('science_score')],\n        metadata: {\n            student:       { type: Type.String, semanticType: 'Category', levels: students },\n            math_score:    { type: Type.Number, semanticType: 'Score',    levels: [] },\n            science_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n        },\n        semanticAnnotations: {\n            math_score:    { semanticType: 'Score', intrinsicDomain: [0, 100] },\n            science_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('math_score'),\n            y: makeEncodingItem('science_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 25. Duration with unit suffix — additive measure, \"min\" suffix\n//     Semantic type: \"Duration\" + unit: \"min\"  →  \"42 min\" on axis\n//\n//     Duration is an additive measure (durations sum to a total), open domain,\n//     meaningful zero (0 = no time elapsed), and uses unit-suffix format.\n//\n//     WITHOUT this annotation:\n//       Axis shows bare numbers: 42, 85. No time context.\n//       Zero might not be included in axis.\n//\n//     WITH \"Duration\" + unit:\n//       Axis labels show \"42 min\", \"85 min\". Zero baseline included.\n// ============================================================================\n\nfunction genDurationUnitSuffixTest(): TestCase {\n    const rand = seeded(2501);\n    const tasks = ['Setup', 'Build', 'Test', 'Review', 'Deploy',\n                   'Cleanup', 'Backup', 'Sync'];\n    const data = tasks.map(t => ({\n        task: t,\n        duration_min: Math.round(5 + rand() * 115),\n    }));\n\n    return {\n        title: 'Duration Unit Suffix (min)',\n        description:\n            'Semantic type \"Duration\" with unit \"min\" appends \" min\" to axis labels. ' +\n            'Duration is additive (total makes sense) with meaningful zero. ' +\n            'WITHOUT this: bare numbers with no time unit context.',\n        tags: ['semantic', 'format', 'unit-suffix', 'duration', 'zero'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('task'), makeField('duration_min')],\n        metadata: {\n            task:         { type: Type.String, semanticType: 'Category', levels: tasks },\n            duration_min: { type: Type.Number, semanticType: 'Duration', levels: [] },\n        },\n        semanticAnnotations: {\n            duration_min: { semanticType: 'Duration', unit: 'min' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('task'),\n            y: makeEncodingItem('duration_min'),\n        },\n    };\n}\n\n// ============================================================================\n// 26. Quarter canonical order + cyclic behavior\n//     Semantic type: \"Quarter\" → ordinal sort Q1, Q2, Q3, Q4\n//\n//     Quarter is cyclic (Q4 wraps to Q1) and uses ordinal encoding.\n//     The canonical order ensures quarters appear in fiscal sequence.\n//\n//     WITHOUT this annotation:\n//       Quarters sorted alphabetically: Q1, Q2, Q3, Q4 happens to work\n//       but only by coincidence. Real datasets with \"Q4-2024\", \"Q1-2025\"\n//       would break. Also no cyclic semantics for wrap-around analysis.\n//\n//     WITH \"Quarter\":\n//       Guaranteed Q1→Q2→Q3→Q4 order. Cyclic flag enables wrap-around\n//       for cross-year comparisons.\n// ============================================================================\n\nfunction genQuarterCanonicalOrderTest(): TestCase {\n    const rand = seeded(2601);\n    // Deliberately shuffled quarters\n    const shuffledQuarters = ['Q3', 'Q1', 'Q4', 'Q2'];\n    const data: Record<string, any>[] = [];\n    for (const region of ['North', 'South', 'East']) {\n        for (const q of shuffledQuarters) {\n            data.push({\n                quarter: q,\n                region,\n                sales: Math.round(50000 + rand() * 200000),\n            });\n        }\n    }\n\n    return {\n        title: 'Quarter Canonical Order (Q1→Q4)',\n        description:\n            'Semantic type \"Quarter\" sorts Q1→Q2→Q3→Q4 in canonical order ' +\n            'regardless of data encounter order. Quarter is cyclic (Q4→Q1 wraps). ' +\n            'WITHOUT this: alphabetical order happens to work here, but no guarantee ' +\n            'for variant labels or cross-year data.',\n        tags: ['semantic', 'ordering', 'quarter', 'cyclic', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('region'), makeField('sales')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Quarter',  levels: shuffledQuarters },\n            region:  { type: Type.String, semanticType: 'Category', levels: ['North', 'South', 'East'] },\n            sales:   { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('quarter'),\n            y:     makeEncodingItem('sales'),\n            color: makeEncodingItem('region'),\n        },\n    };\n}\n\n// ============================================================================\n// 27. Cost currency format — another currency type (additive)\n//     Semantic type: \"Cost\" → currency prefix ($) + SI abbreviation\n//\n//     Cost shares formatClass='currency' with Revenue/Amount but has\n//     aggRole='additive' — costs sum to a meaningful total.\n//\n//     WITHOUT this annotation:\n//       Axis shows raw numbers: 450000, 1200000. No $ symbol.\n//\n//     WITH \"Cost\":\n//       Axis labels show \"$450K\", \"$1.2M\". Currency + abbreviation.\n// ============================================================================\n\nfunction genCostCurrencyFormatTest(): TestCase {\n    const rand = seeded(2701);\n    const departments = ['Engineering', 'Marketing', 'Sales', 'Support', 'HR', 'Legal'];\n    const data = departments.map(d => ({\n        department: d,\n        annual_cost: Math.round(200000 + rand() * 1800000),\n    }));\n\n    return {\n        title: 'Cost Currency Format ($)',\n        description:\n            'Semantic type \"Cost\" with unit \"USD\" uses currency format ($450K, $1.2M). ' +\n            'Cost is additive — department costs sum to total company cost. ' +\n            'WITHOUT this: plain numbers without currency context.',\n        tags: ['semantic', 'format', 'currency', 'cost'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('department'), makeField('annual_cost')],\n        metadata: {\n            department:  { type: Type.String, semanticType: 'Category', levels: departments },\n            annual_cost: { type: Type.Number, semanticType: 'Amount',     levels: [] },\n        },\n        semanticAnnotations: {\n            annual_cost: { semanticType: 'Amount', unit: 'USD' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('department'),\n            y: makeEncodingItem('annual_cost'),\n        },\n    };\n}\n\n// ============================================================================\n// 28. Direction compass order + cyclic\n//     Semantic type: \"Direction\" → compass order N→NE→E→SE→S→SW→W→NW\n//\n//     Direction is cyclic (NW wraps to N) and uses ordinal/nominal encoding.\n//     The canonical order ensures compass directions appear in clockwise order.\n//\n//     WITHOUT this annotation:\n//       Directions sorted alphabetically: E, N, NE, NW, S, SE, SW, W.\n//       Completely wrong — geographic/compass ordering is destroyed.\n//\n//     WITH \"Direction\":\n//       Canonical clockwise order: N, NE, E, SE, S, SW, W, NW.\n// ============================================================================\n\nfunction genDirectionCompassOrderTest(): TestCase {\n    const rand = seeded(2801);\n    // Deliberately shuffled\n    const shuffledDirs = ['SW', 'N', 'E', 'NW', 'S', 'NE', 'W', 'SE'];\n    const data = shuffledDirs.map(d => ({\n        direction: d,\n        wind_speed: Math.round(5 + rand() * 45),\n    }));\n\n    return {\n        title: 'Direction Compass Order (N→NW)',\n        description:\n            'Semantic type \"Direction\" sorts compass directions in clockwise order ' +\n            '(N→NE→E→SE→S→SW→W→NW). Direction is cyclic (NW→N wraps). ' +\n            'WITHOUT this: alphabetical (E, N, NE, NW...) destroys geographic sense.',\n        tags: ['semantic', 'ordering', 'direction', 'cyclic', 'compass', 'canonical'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('direction'), makeField('wind_speed')],\n        metadata: {\n            direction:  { type: Type.String, semanticType: 'Direction', levels: shuffledDirs },\n            wind_speed: { type: Type.Number, semanticType: 'Quantity',  levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('direction'),\n            y: makeEncodingItem('wind_speed'),\n        },\n    };\n}\n\n// ============================================================================\n// 29. AgeGroup — binned ordinal with inherent order\n//     Semantic type: \"AgeGroup\" → ordinal encoding, sequential color\n//\n//     AgeGroup is a binned type: continuous ages discretized into ranges.\n//     Values have inherent order (18-24 < 25-34 < 35-44...) unlike\n//     pure nominal categories. Uses ordinal encoding.\n//\n//     WITHOUT this annotation:\n//       Age groups treated as nominal — no guaranteed order, potentially\n//       sorted alphabetically which breaks the natural sequence.\n//\n//     WITH \"AgeGroup\":\n//       Ordinal encoding preserves the range order. Color uses sequential\n//       scheme reflecting the ordered nature.\n// ============================================================================\n\nfunction genAgeGroupOrdinalTest(): TestCase {\n    const rand = seeded(2901);\n    const ageGroups = ['18-24', '25-34', '35-44', '45-54', '55-64', '65+'];\n    const data = ageGroups.map(ag => ({\n        age_group: ag,\n        population: Math.round(500000 + rand() * 2000000),\n        avg_income: Math.round(25000 + rand() * 75000),\n    }));\n\n    return {\n        title: 'AgeGroup Binned Ordinal',\n        description:\n            'Semantic type \"AgeGroup\" is a binned ordinal — age ranges have inherent ' +\n            'order (18-24 < 25-34 < ...). Uses ordinal encoding, not nominal. ' +\n            'WITHOUT this: treated as unordered categories, alphabetical sorting.',\n        tags: ['semantic', 'ordinal', 'binned', 'agegroup'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('age_group'), makeField('population'), makeField('avg_income')],\n        metadata: {\n            age_group:  { type: Type.String, semanticType: 'Range', levels: ageGroups },\n            population: { type: Type.Number, semanticType: 'Count',    levels: [] },\n            avg_income: { type: Type.Number, semanticType: 'Amount',   levels: [] },\n        },\n        semanticAnnotations: {\n            age_group: { semanticType: 'Range', sortOrder: ageGroups },\n        },\n        encodingMap: {\n            x: makeEncodingItem('age_group'),\n            y: makeEncodingItem('population'),\n        },\n    };\n}\n\n// ============================================================================\n// 30. Boolean on color — fixed domain, categorical color, 2 values\n//     Semantic type: \"Boolean\" → nominal encoding, fixed domain\n//\n//     Boolean has a fixed domainShape — only 2 values exist (True/False).\n//     Uses nominal encoding and categorical color scheme.\n//\n//     WITHOUT this annotation:\n//       Treated as generic string. No indication of the fixed 2-value nature.\n//\n//     WITH \"Boolean\":\n//       Fixed domain recognized. Categorical color with 2 distinct hues.\n// ============================================================================\n\nfunction genBooleanColorTest(): TestCase {\n    const rand = seeded(3001);\n    const data: Record<string, any>[] = [];\n    for (let i = 0; i < 30; i++) {\n        data.push({\n            customer_id: `C${i + 1}`,\n            purchase_amount: Math.round(20 + rand() * 480),\n            is_member: rand() > 0.5 ? 'True' : 'False',\n        });\n    }\n\n    return {\n        title: 'Boolean Color (True/False)',\n        description:\n            'Semantic type \"Boolean\" on color uses categorical scheme with ' +\n            'fixed 2-value domain. Ideal for binary classification display. ' +\n            'WITHOUT this: treated as generic string, no fixed-domain awareness.',\n        tags: ['semantic', 'color', 'boolean', 'categorical', 'fixed'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('customer_id'), makeField('purchase_amount'), makeField('is_member')],\n        metadata: {\n            customer_id:     { type: Type.String,  semanticType: 'ID',       levels: data.map(d => d.customer_id) },\n            purchase_amount: { type: Type.Number,  semanticType: 'Amount',   levels: [] },\n            is_member:       { type: Type.String,  semanticType: 'Boolean',  levels: ['True', 'False'] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('customer_id'),\n            y:     makeEncodingItem('purchase_amount'),\n            color: makeEncodingItem('is_member'),\n        },\n    };\n}\n\n// ============================================================================\n// 31. Longitude — hard domain [-180, 180] with clamp\n//     Semantic type: \"Longitude\" → scale.domain = [-180, 180], clamp = true\n//\n//     Mirrors the Latitude test (test 12) but for the horizontal coordinate.\n//     Longitude is a fixed geographic domain — values physically cannot\n//     exceed ±180°.\n//\n//     WITHOUT this annotation:\n//       Axis auto-scales to data range. No geographic context.\n//\n//     WITH \"Longitude\":\n//       Full -180 to 180 range. Clamp prevents out-of-range rendering.\n// ============================================================================\n\nfunction genLongitudeDomainClampTest(): TestCase {\n    const cities = [\n        { city: 'Tokyo',      longitude: 139.69, population_M: 13.96 },\n        { city: 'Delhi',      longitude:  77.21, population_M: 32.94 },\n        { city: 'London',     longitude:  -0.12, population_M:  9.00 },\n        { city: 'New York',   longitude: -74.01, population_M:  8.34 },\n        { city: 'São Paulo',  longitude: -46.63, population_M: 12.33 },\n        { city: 'Sydney',     longitude: 151.21, population_M:  5.31 },\n        { city: 'Cairo',      longitude:  31.24, population_M: 21.32 },\n        { city: 'Los Angeles',longitude:-118.24, population_M:  3.90 },\n    ];\n\n    return {\n        title: 'Longitude Hard Domain [-180°, 180°]',\n        description:\n            'Semantic type \"Longitude\" pins axis to [-180, 180] with clamp=true ' +\n            '(hard physical domain). Shows where cities fall in global E-W context. ' +\n            'WITHOUT this: axis scales to data range (-118 to 151), no global frame.',\n        tags: ['semantic', 'domain', 'clamp', 'longitude', 'geographic'],\n        chartType: 'Scatter Plot',\n        data: cities,\n        fields: [makeField('city'), makeField('longitude'), makeField('population_M')],\n        metadata: {\n            city:         { type: Type.String, semanticType: 'City',      levels: cities.map(c => c.city) },\n            longitude:    { type: Type.Number, semanticType: 'Longitude', levels: [] },\n            population_M: { type: Type.Number, semanticType: 'Count',     levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('longitude'),\n            y: makeEncodingItem('population_M'),\n        },\n    };\n}\n\n// ============================================================================\n// 32. ID — nominal unique identifier (sequence numbers, row IDs)\n//     Semantic type: \"ID\" → nominal encoding\n//\n//     Previously \"Index\" — removed because ID already covers row/sequence\n//     numbers, and quantitative index-like measures (Gini, BMI) are just Number.\n//\n//     WITHOUT this annotation:\n//       Treated as generic number → quantitative encoding. Values\n//       like 1, 2, 3 would have fractional ticks and continuous axis.\n//\n//     WITH \"ID\":\n//       Nominal encoding. No aggregation. Used as a unique identifier.\n// ============================================================================\n\nfunction genIndexOrdinalTest(): TestCase {\n    const rand = seeded(3201);\n    const data = Array.from({ length: 10 }, (_, i) => ({\n        trial_number: i + 1,\n        response_time_ms: Math.round(200 + rand() * 800),\n    }));\n\n    return {\n        title: 'ID Sequence Number',\n        description:\n            'Semantic type \"ID\" uses nominal encoding for unique identifiers. ' +\n            'Covers row numbers, sequence numbers, trial IDs. ' +\n            'WITHOUT this: treated as quantitative with fractional ticks.',\n        tags: ['semantic', 'nominal', 'id', 'identifier'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('trial_number'), makeField('response_time_ms')],\n        metadata: {\n            trial_number:    { type: Type.Number, semanticType: 'ID',       levels: [] },\n            response_time_ms:{ type: Type.Number, semanticType: 'Duration', levels: [] },\n        },\n        semanticAnnotations: {\n            response_time_ms: { semanticType: 'Duration', unit: 'ms' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('trial_number'),\n            y: makeEncodingItem('response_time_ms'),\n        },\n    };\n}\n\n// ============================================================================\n// 33. Percentage 0-100 representation (whole numbers)\n//     Semantic type: \"Percentage\" with whole-number data (40, 85, 72)\n//\n//     The format resolver detects 0-100 vs 0-1 representation.\n//     For 0-100: uses data precision format + \"%\" suffix (not d3's .% which\n//     multiplies by 100).\n//\n//     WITHOUT this:\n//       Values 72, 85, 40 shown as plain numbers. No % context.\n//\n//     WITH \"Percentage\" (0-100):\n//       Axis shows \"72%\", \"85%\", \"40%\". Data precision preserved.\n// ============================================================================\n\nfunction genPercentageWholeNumberTest(): TestCase {\n    const rand = seeded(3301);\n    const subjects = ['Math', 'Science', 'English', 'History', 'Art', 'PE'];\n    const data = subjects.map(s => ({\n        subject: s,\n        pass_rate: Math.round(45 + rand() * 50),\n    }));\n\n    return {\n        title: 'Percentage Whole-Number (0-100)',\n        description:\n            'Percentage field with whole-number data (45, 72, 85). Format resolver ' +\n            'detects 0-100 representation and uses \"d\" + \"%\" suffix instead of ' +\n            'd3\\'s .% format (which would multiply by 100, showing \"7200%\"). ' +\n            'WITHOUT this: bare numbers without %. Different from 0-1 test (#2).',\n        tags: ['semantic', 'format', 'percentage', 'whole-number'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('subject'), makeField('pass_rate')],\n        metadata: {\n            subject:   { type: Type.String, semanticType: 'Category',   levels: subjects },\n            pass_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            pass_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('subject'),\n            y: makeEncodingItem('pass_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// 34. Score on color channel — conditional diverging\n//     Semantic type: \"Score\" on color → diverging color when data spans\n//     both sides of the domain midpoint\n//\n//     Score with domain [0, 100] has a midpoint at 50. When data spans\n//     both below and above 50, the color scheme should be diverging\n//     (e.g., below-50 = red, above-50 = blue).\n//\n//     WITHOUT this:\n//       Generic sequential palette. No midpoint awareness.\n//\n//     WITH \"Score\" on color:\n//       Diverging color scheme centered on midpoint 50.\n// ============================================================================\n\nfunction genScoreColorDivergingTest(): TestCase {\n    const rand = seeded(3401);\n    const students = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve',\n                      'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy',\n                      'Karl', 'Laura'];\n    const data = students.map(s => ({\n        student: s,\n        exam_score: Math.round(20 + rand() * 75),\n        study_hours: Math.round(1 + rand() * 30),\n    }));\n\n    return {\n        title: 'Score on Color (Conditional Diverging)',\n        description:\n            'Score with intrinsicDomain [0, 100] on color. Domain midpoint = 50. ' +\n            'Data spans both sides → diverging color scheme centered at 50. ' +\n            'Below-50 = one hue, above-50 = another. ' +\n            'WITHOUT this: sequential palette, no midpoint.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'score', 'conditional'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('student'), makeField('exam_score'), makeField('study_hours')],\n        metadata: {\n            student:    { type: Type.String, semanticType: 'Category', levels: students },\n            exam_score: { type: Type.Number, semanticType: 'Score',    levels: [] },\n            study_hours:{ type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        semanticAnnotations: {\n            exam_score: { semanticType: 'Score', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('study_hours'),\n            y:     makeEncodingItem('student'),\n            color: makeEncodingItem('exam_score'),\n        },\n    };\n}\n\n// ============================================================================\n// 35. Price with EUR currency override\n//     Semantic type: \"Price\" + unit: \"EUR\"  →  \"€15.50\" on axis\n//\n//     Annotation.unit overrides the default $ prefix for currency types.\n//     Price also uses intensive aggRole (unit price averages, doesn't sum)\n//     and always shows 2 decimal places for cents.\n//\n//     WITHOUT this:\n//       Default $ prefix. Or bare numbers with no currency.\n//\n//     WITH \"Price\" + unit: \"EUR\":\n//       Axis labels show \"€15.50\". Euro prefix from CURRENCY_MAP.\n// ============================================================================\n\nfunction genPriceEurCurrencyTest(): TestCase {\n    const rand = seeded(3501);\n    const products = ['Espresso', 'Latte', 'Cappuccino', 'Mocha', 'Americano',\n                      'Macchiato', 'Flat White', 'Cortado'];\n    const data = products.map(p => ({\n        drink: p,\n        price_eur: Math.round((2.50 + rand() * 5.50) * 100) / 100,\n        daily_sales: Math.round(20 + rand() * 180),\n    }));\n\n    return {\n        title: 'Price with EUR Currency Override',\n        description:\n            'Annotation unit \"EUR\" provides an explicit currency symbol, showing \"€3.50\" on axis. ' +\n            'Price is intensive (average makes sense, sum doesn\\'t) with 2 decimal ' +\n            'places for cents. ' +\n            'WITHOUT this: bare numbers with no currency symbol.',\n        tags: ['semantic', 'format', 'currency', 'price', 'unit-override'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('drink'), makeField('price_eur'), makeField('daily_sales')],\n        metadata: {\n            drink:       { type: Type.String, semanticType: 'Category', levels: products },\n            price_eur:   { type: Type.Number, semanticType: 'Price',    levels: [] },\n            daily_sales: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        semanticAnnotations: {\n            price_eur: { semanticType: 'Price', unit: 'EUR' },\n        },\n        encodingMap: {\n            x: makeEncodingItem('drink'),\n            y: makeEncodingItem('price_eur'),\n        },\n    };\n}\n\n// ============================================================================\n// 36. Year temporal vs ordinal disambiguation\n//     Semantic type: \"Year\" with few values (≤6) → ordinal\n//     Semantic type: \"Year\" with many values (>6) → temporal\n//\n//     Year's registry entry has visEncodings: ['temporal', 'ordinal'].\n//     resolveDefaultVisType disambiguates using distinct count:\n//       ≤6 distinct → ordinal (e.g., 3 years: 2022, 2023, 2024)\n//       >6 distinct → temporal (e.g., 20 years trend)\n//\n//     This test uses 4 years → should pick ordinal.\n//     Contrast with test #20 (Year format) which uses 7 years → temporal.\n// ============================================================================\n\nfunction genYearOrdinalDisambiguationTest(): TestCase {\n    const rand = seeded(3601);\n    const years = [2021, 2022, 2023, 2024];\n    const data: Record<string, any>[] = [];\n    for (const y of years) {\n        for (const region of ['North', 'South']) {\n            data.push({\n                year: y,\n                region,\n                revenue: Math.round(500000 + rand() * 1500000),\n            });\n        }\n    }\n\n    return {\n        title: 'Year Ordinal (≤6 Distinct Values)',\n        description:\n            'Year with only 4 distinct values → ordinal encoding (not temporal). ' +\n            'resolveDefaultVisType picks ordinal when distinct ≤ 6. ' +\n            'Contrast with test #20 which uses 7 years → temporal. ' +\n            'WITHOUT disambiguation: always temporal, wasting axis resolution on 4 points.',\n        tags: ['semantic', 'defaultVisType', 'year', 'ordinal', 'disambiguation'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('year'), makeField('region'), makeField('revenue')],\n        metadata: {\n            year:    { type: Type.Number, semanticType: 'Year',     levels: years },\n            region:  { type: Type.String, semanticType: 'Category', levels: ['North', 'South'] },\n            revenue: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('year'),\n            y:     makeEncodingItem('revenue'),\n            color: makeEncodingItem('region'),\n        },\n    };\n}\n\n// ============================================================================\n// 37. Profit on color — signed currency diverging color\n//     Semantic type: \"Profit\" on color → diverging color scheme\n//     centered at 0, decimal format\n//\n//     When Profit is on the color channel instead of axis, the diverging\n//     analysis applies to color: positive = one hue, negative = another,\n//     midpoint at 0.\n//\n//     WITHOUT this:\n//       Sequential palette for color. No sign awareness. Losses and gains\n//       blend into the same gradient.\n//\n//     WITH \"Profit\" on color:\n//       Diverging scheme with domainMid = 0. (+) green, (-) red conceptually.\n// ============================================================================\n\nfunction genProfitColorDivergingTest(): TestCase {\n    const rand = seeded(3701);\n    const divisions = ['Product A', 'Product B', 'Product C', 'Product D',\n                       'Product E', 'Product F'];\n    const data = divisions.map(d => ({\n        product: d,\n        revenue: Math.round(100000 + rand() * 500000),\n        profit: Math.round(-80000 + rand() * 220000),\n    }));\n\n    return {\n        title: 'Profit on Color (Diverging)',\n        description:\n            'Profit on color channel triggers diverging color scheme (midpoint 0). ' +\n            'Positive profit → one hue, negative → another, making P&L obvious. ' +\n            'WITHOUT this: sequential gradient, losses and gains look alike.',\n        tags: ['semantic', 'colorScheme', 'diverging', 'profit', 'decimal'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('product'), makeField('revenue'), makeField('profit')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category', levels: divisions },\n            revenue: { type: Type.Number, semanticType: 'Amount',  levels: [] },\n            profit:  { type: Type.Number, semanticType: 'Profit',   levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('product'),\n            y:     makeEncodingItem('revenue'),\n            color: makeEncodingItem('profit'),\n        },\n    };\n}\n\n// ============================================================================\n// 38. Count integer format — comma grouping\n//     Semantic type: \"Count\" → integer format with comma grouping (,d)\n//\n//     Count uses format class 'integer' → \",d\" format for axis labels.\n//     This ensures tick marks are at whole numbers (no fractional counts)\n//     and large counts show thousands separators (1,234 not 1234).\n//\n//     Also tests aggregationDefault = 'sum' (additive measure — counts\n//     of subgroups sum to the total).\n//\n//     WITHOUT this:\n//       Generic number format. Fractional ticks possible (1.5 items?).\n//       No comma grouping on large values.\n//\n//     WITH \"Count\":\n//       Integer-only ticks with comma grouping. Meaningful zero.\n// ============================================================================\n\nfunction genCountIntegerFormatTest(): TestCase {\n    const rand = seeded(3801);\n    const categories = ['Electronics', 'Clothing', 'Food', 'Books', 'Toys', 'Sports'];\n    const data = categories.map(c => ({\n        category: c,\n        item_count: Math.round(500 + rand() * 9500),\n    }));\n\n    return {\n        title: 'Count Integer Format (,d)',\n        description:\n            'Semantic type \"Count\" uses integer format \",d\" — comma grouping ' +\n            'with integer-only ticks (no fractional counts). Count is additive: ' +\n            'sub-counts sum to total. ' +\n            'WITHOUT this: fractional ticks (1,500.5?) and no commas.',\n        tags: ['semantic', 'format', 'integer', 'count', 'aggregation'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('category'), makeField('item_count')],\n        metadata: {\n            category:   { type: Type.String, semanticType: 'Category', levels: categories },\n            item_count: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('category'),\n            y: makeEncodingItem('item_count'),\n        },\n    };\n}\n\n// ============================================================================\n// 39. Unregistered semantic type — fallback to data-driven behavior\n//     Semantic type: \"CustomMetric\" (not in registry)\n//\n//     When a semantic type is not registered, the system falls back to\n//     data-driven inference: if values are numeric → quantitative encoding,\n//     aggregationDefault = 'sum', zeroClass = 'meaningful'.\n//\n//     This tests that unregistered types don't crash and behave sensibly.\n//\n//     WITHOUT this (before fallback was added):\n//       Unknown types → nominal encoding even for numeric data.\n//\n//     WITH fallback:\n//       Numeric data → quantitative, sensible defaults applied.\n// ============================================================================\n\nfunction genUnregisteredTypeFallbackTest(): TestCase {\n    const rand = seeded(3901);\n    const items = ['Item A', 'Item B', 'Item C', 'Item D', 'Item E', 'Item F'];\n    const data = items.map(item => ({\n        item,\n        custom_metric: Math.round(100 + rand() * 900),\n    }));\n\n    return {\n        title: 'Unregistered Type Fallback',\n        description:\n            'Semantic type \"CustomMetric\" is NOT in the registry. Falls back to ' +\n            'data-driven inference: numeric data → quantitative encoding, ' +\n            'aggregationDefault = sum, zeroClass = meaningful. ' +\n            'Tests that unknown types don\\'t crash and behave sensibly.',\n        tags: ['semantic', 'fallback', 'unregistered', 'data-driven'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('item'), makeField('custom_metric')],\n        metadata: {\n            item:          { type: Type.String, semanticType: 'Category',     levels: items },\n            custom_metric: { type: Type.Number, semanticType: 'CustomMetric', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('item'),\n            y: makeEncodingItem('custom_metric'),\n        },\n    };\n}\n\n// ############################################################################\n// SNAP-TO-BOUND TESTS\n//\n// Demonstrate the snap-to-bound heuristic for Percentage and PercentageChange.\n// Each bound snaps independently when data reaches within 25% of the\n// intrinsic range from that edge. Data exceeding a bound never snaps.\n// ############################################################################\n\n// ============================================================================\n// S1. Percentage — data far from both bounds → no snap\n//     Data 35–65%, threshold=25. Neither end close → axis data-fits.\n// ============================================================================\n\nfunction genSnapPctNoSnapTest(): TestCase {\n    const rand = seeded(7001);\n    const weeks = Array.from({ length: 8 }, (_, i) => `Week ${i + 1}`);\n    const data = weeks.map(w => ({\n        week: w,\n        usage: Math.round(35 + rand() * 30),\n    }));\n\n    return {\n        title: 'Snap: Pct 35–65% → no snap',\n        description:\n            'Usage data ranges 35–65%. Both ends are far from 0 and 100 ' +\n            '(threshold = 25% of range = 25), so no snap occurs. ' +\n            'Axis data-fits to show detail in the 35–65% band.',\n        tags: ['semantic', 'snap', 'percentage', 'no-snap'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('week'), makeField('usage')],\n        metadata: {\n            week:  { type: Type.String, semanticType: 'Category',   levels: weeks },\n            usage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            usage: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('week'),\n            y: makeEncodingItem('usage'),\n        },\n    };\n}\n\n// ============================================================================\n// S2. Percentage — data near upper bound only → snap max to 100\n//     Data 60–97%, 97 within threshold of 100 → domainMax=100.\n//     Lower end (60) far from 0 → no snap min.\n// ============================================================================\n\nfunction genSnapPctMaxOnlyTest(): TestCase {\n    const rand = seeded(7002);\n    const depts = ['Engineering', 'Marketing', 'Sales', 'Support', 'Design', 'Legal'];\n    const data = depts.map(d => ({\n        dept: d,\n        completion: Math.round(60 + rand() * 37),\n    }));\n\n    return {\n        title: 'Snap: Pct 84–96% → snap max 100',\n        description:\n            'Completion data reaches 96%. Since 96 is within 25 (threshold = 25% of 100) ' +\n            'of 100, the upper bound snaps to 100%. Lower end (84%) is far from 0 → ' +\n            'no snap. Shows domainMax=100 while the lower end auto-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-max'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('dept'), makeField('completion')],\n        metadata: {\n            dept:       { type: Type.String, semanticType: 'Category',   levels: depts },\n            completion: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            completion: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('dept'),\n            y: makeEncodingItem('completion'),\n        },\n    };\n}\n\n// ============================================================================\n// S3. Percentage — data near lower bound only → snap min to 0\n//     Data 2–25%, 2 within threshold of 0 → domainMin=0.\n//     Upper end (25) far from 100 → no snap max.\n// ============================================================================\n\nfunction genSnapPctMinOnlyTest(): TestCase {\n    const rand = seeded(7003);\n    const items = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];\n    const data = items.map(item => ({\n        item,\n        error_rate: Math.round(2 + rand() * 23),\n    }));\n\n    return {\n        title: 'Snap: Pct 4–20% → snap min 0',\n        description:\n            'Error rates range 4–20%. Since 4 is within 25 (threshold = 25% of 100) ' +\n            'of 0, the lower bound snaps to 0%. Upper end (20%) is far from 100 → ' +\n            'no snap. Shows domainMin=0 while the upper end auto-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-min'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('item'), makeField('error_rate')],\n        metadata: {\n            item:       { type: Type.String, semanticType: 'Category',   levels: items },\n            error_rate: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            error_rate: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('item'),\n            y: makeEncodingItem('error_rate'),\n        },\n    };\n}\n\n// ============================================================================\n// S4. Percentage — data near both bounds → snap both [0, 100]\n//     Data 3–95%, both ends close → full [0, 100] domain.\n// ============================================================================\n\nfunction genSnapPctBothTest(): TestCase {\n    const rand = seeded(7004);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const data = months.map((m, i) => ({\n        month: m,\n        capacity: Math.round(3 + (i / 11) * 87 + rand() * 5),\n    }));\n\n    return {\n        title: 'Snap: Pct 3–95% → snap both [0,100]',\n        description:\n            'Capacity ranges 3–95%. Both 3 (within 25 of 0) and 95 (within 25 of 100) ' +\n            'trigger snap, producing the full [0, 100] domain. Natural for data that ' +\n            'spans nearly the entire percentage range.',\n        tags: ['semantic', 'snap', 'percentage', 'snap-both'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('capacity')],\n        metadata: {\n            month:    { type: Type.String, semanticType: 'Month',      levels: months },\n            capacity: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            capacity: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('capacity'),\n        },\n    };\n}\n\n// ============================================================================\n// S5. Percentage — data exceeds upper bound → no snap\n//     Data 30–130%, 130 exceeds 100 → no snap on either end.\n//     (30 is also far from 0.)\n// ============================================================================\n\nfunction genSnapPctExceedTest(): TestCase {\n    const rand = seeded(7005);\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const data = quarters.map(q => ({\n        quarter: q,\n        growth: Math.round(30 + rand() * 100),\n    }));\n\n    return {\n        title: 'Snap: Pct 30–130% → no snap (exceeds)',\n        description:\n            'Growth data ranges 30–130%. The max (130) exceeds the intrinsic upper ' +\n            'bound (100), so no snap — VL auto-extends. The min (30) is also far from 0. ' +\n            'Axis data-fits to the actual data range.',\n        tags: ['semantic', 'snap', 'percentage', 'exceed'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('growth')],\n        metadata: {\n            quarter: { type: Type.String, semanticType: 'Category',   levels: quarters },\n            growth:  { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            growth: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('growth'),\n        },\n    };\n}\n\n// ============================================================================\n// S6. PercentageChange — small range near zero → no snap\n//     Data -3% to +5%, both far from ±100% → axis data-fits.\n// ============================================================================\n\nfunction genSnapPctChangeNoSnapTest(): TestCase {\n    const rand = seeded(7006);\n    const stocks = ['AAPL', 'GOOG', 'MSFT', 'AMZN', 'META', 'NVDA', 'TSLA'];\n    const data = stocks.map(s => ({\n        stock: s,\n        daily_change: Math.round((-0.03 + rand() * 0.08) * 1000) / 1000,\n    }));\n\n    return {\n        title: 'Snap: PctChange ±3–5% → no snap',\n        description:\n            'Daily stock changes range -3% to +5%. Both ends are far from ±1 ' +\n            '(threshold = 0.25 per side), so no snap. Axis data-fits around the small range. ' +\n            'Contextual zero-baseline still includes 0 for bar marks.',\n        tags: ['semantic', 'snap', 'percentage-change', 'no-snap'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('stock'), makeField('daily_change')],\n        metadata: {\n            stock:        { type: Type.String, semanticType: 'Category',         levels: stocks },\n            daily_change: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            daily_change: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('stock'),\n            y: makeEncodingItem('daily_change'),\n        },\n    };\n}\n\n// ============================================================================\n// S7. PercentageChange — near negative bound → snap min to -1\n//     Data -0.96 to +0.25, -0.96 within 0.25 (25% of 1) of -1 → snap min=-1.\n// ============================================================================\n\nfunction genSnapPctChangeMinTest(): TestCase {\n    const data = [\n        { sector: 'Tech',       ytd_return: -0.96 },\n        { sector: 'Energy',     ytd_return: -0.42 },\n        { sector: 'Finance',    ytd_return: -0.71 },\n        { sector: 'Healthcare', ytd_return:  0.25 },\n        { sector: 'Retail',     ytd_return: -0.55 },\n        { sector: 'Telecom',    ytd_return: -0.83 },\n    ];\n    const sectors = data.map(d => d.sector);\n\n    return {\n        title: 'Snap: PctChange -96% to +25% → snap min -100%',\n        description:\n            'Sector returns range -96% to +25%. The min (-0.96) is within 0.25 (threshold = ' +\n            '25% of distance 1 from zero to -1) of -1, so the lower bound snaps to -100%. ' +\n            'Upper end (+25%) is far from +100% → no snap. Shows domainMin=-1 with ' +\n            'auto-fit upper end.',\n        tags: ['semantic', 'snap', 'percentage-change', 'snap-min'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('sector'), makeField('ytd_return')],\n        metadata: {\n            sector:     { type: Type.String, semanticType: 'Category',         levels: sectors },\n            ytd_return: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            ytd_return: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('sector'),\n            y: makeEncodingItem('ytd_return'),\n        },\n    };\n}\n\n// ============================================================================\n// S8. PercentageChange — near both bounds → snap both [-1, 1]\n//     Data -0.95 to +0.93, both within 0.25 (25% of per-side distance 1) → full [-1, 1].\n// ============================================================================\n\nfunction genSnapPctChangeBothTest(): TestCase {\n    const data = [\n        { strategy: 'Strategy A', performance: -0.95 },\n        { strategy: 'Strategy B', performance: -0.30 },\n        { strategy: 'Strategy C', performance:  0.15 },\n        { strategy: 'Strategy D', performance: -0.60 },\n        { strategy: 'Strategy E', performance:  0.48 },\n        { strategy: 'Strategy F', performance:  0.93 },\n    ];\n    const strategies = data.map(d => d.strategy);\n\n    return {\n        title: 'Snap: PctChange ±95–93% → snap both [-1,1]',\n        description:\n            'Strategy performance ranges -95% to +93%. Both -0.95 (within 0.25 of -1) ' +\n            'and +0.93 (within 0.25 of +1) trigger snap (threshold = 25% of each side\\'s ' +\n            'distance from zero = 0.25), producing the full [-1, 1] domain.',\n        tags: ['semantic', 'snap', 'percentage-change', 'snap-both'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('strategy'), makeField('performance')],\n        metadata: {\n            strategy:    { type: Type.String, semanticType: 'Category',         levels: strategies },\n            performance: { type: Type.Number, semanticType: 'PercentageChange', levels: [] },\n        },\n        semanticAnnotations: {\n            performance: { semanticType: 'PercentageChange', intrinsicDomain: [-1, 1] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('strategy'),\n            y: makeEncodingItem('performance'),\n        },\n    };\n}\n\n// ============================================================================\n// S9. Stacked bar — percentages sum to ~100% per group → keep snap\n//     Individual values 30–40%, each group has 3 series summing to ~98%.\n//     Individual values are far from 100% (no individual snap), but the stacked\n//     totals (~98%) are within 25% of 100 → re-snap fires domainMax=100.\n// ============================================================================\n\nfunction genSnapStackedSumNear100Test(): TestCase {\n    const categories = ['Alpha', 'Beta', 'Gamma', 'Delta'];\n    const series = ['Part A', 'Part B', 'Part C'];\n    // Each group's parts sum to ~97–99%\n    const groupTotals: Record<string, number[]> = {\n        'Alpha': [35, 30, 33],   // sum = 98\n        'Beta':  [40, 28, 30],   // sum = 98\n        'Gamma': [32, 35, 30],   // sum = 97\n        'Delta': [38, 27, 34],   // sum = 99\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ category: cat, series: s, share: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈100% → snap max 100',\n        description:\n            'Stacked bar with 3 series per group. Individual values range 27–40% (far from 100, ' +\n            'no individual snap), but stacked totals per group are 97–99%. Since 99 is within ' +\n            '25 (threshold) of 100, the stacked-total re-snap fires → domainMax=100. ' +\n            'This keeps the axis at a natural percentage ceiling.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'sum-near-bound'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('category'), makeField('share'), makeField('series')],\n        metadata: {\n            category: { type: Type.String, semanticType: 'Category',   levels: categories },\n            series:   { type: Type.String, semanticType: 'Category',   levels: series },\n            share:    { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            share: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('category'),\n            y: makeEncodingItem('share'),\n            color: makeEncodingItem('series'),\n        },\n    };\n}\n\n// ============================================================================\n// S10. Stacked bar — percentages sum to ~150% per group → skip snap\n//      Individual values 30–60%, but 3 series stack to ~150%.\n//      Totals exceed intrinsic upper bound (100) → skip domain constraint.\n// ============================================================================\n\nfunction genSnapStackedSumExceedsTest(): TestCase {\n    const categories = ['East', 'West', 'North', 'South'];\n    const series = ['Source X', 'Source Y', 'Source Z'];\n    // Each group's parts sum to ~140–160%\n    const groupTotals: Record<string, number[]> = {\n        'East':  [55, 48, 42],   // sum = 145\n        'West':  [60, 50, 45],   // sum = 155\n        'North': [45, 52, 43],   // sum = 140\n        'South': [58, 55, 47],   // sum = 160\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ region: cat, source: s, overlap_pct: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈150% → no snap (exceeds)',\n        description:\n            'Stacked bar with 3 overlapping percentage sources per region. Individual values ' +\n            'range 42–60%, but stacked totals are 140–160% — exceeding the intrinsic upper ' +\n            'bound of 100%. Domain constraint is skipped so VL auto-extends the axis.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'sum-exceeds'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('region'), makeField('overlap_pct'), makeField('source')],\n        metadata: {\n            region:      { type: Type.String, semanticType: 'Category',   levels: categories },\n            source:      { type: Type.String, semanticType: 'Category',   levels: series },\n            overlap_pct: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            overlap_pct: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('region'),\n            y: makeEncodingItem('overlap_pct'),\n            color: makeEncodingItem('source'),\n        },\n    };\n}\n\n// ============================================================================\n// S11. Stacked bar — individual values snap, totals fit → keep snap\n//      Individual values 80–95% (near 100, snap fires individually).\n//      Stacked totals ~270% exceed 100, but the individual snap already\n//      fired — this test verifies the stacked-total check correctly\n//      overrides it: totals 270% > 100 → skip domain constraint.\n// ============================================================================\n\nfunction genSnapStackedIndividualSnapButTotalsExceedTest(): TestCase {\n    const categories = ['Jan', 'Feb', 'Mar', 'Apr'];\n    const series = ['Metric 1', 'Metric 2', 'Metric 3'];\n    // Individual values 80–95% (all snap individually), but sum ~270%\n    const groupTotals: Record<string, number[]> = {\n        'Jan': [92, 88, 85],   // sum = 265\n        'Feb': [95, 90, 87],   // sum = 272\n        'Mar': [91, 93, 84],   // sum = 268\n        'Apr': [94, 89, 91],   // sum = 274\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ month: cat, metric: s, score: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct indiv snap but sum>100% → skip',\n        description:\n            'Individual scores range 84–95% — close to 100%, so snap fires on individual ' +\n            'values. But when stacked (3 metrics per month), totals reach 265–274%. Since ' +\n            'totals exceed intrinsic bound (100), the stacked-total check overrides → ' +\n            'domain constraint is skipped, VL auto-extends.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'individual-snap-override'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('month'), makeField('score'), makeField('metric')],\n        metadata: {\n            month:  { type: Type.String, semanticType: 'Category',   levels: categories },\n            metric: { type: Type.String, semanticType: 'Category',   levels: series },\n            score:  { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            score: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('score'),\n            color: makeEncodingItem('metric'),\n        },\n    };\n}\n\n// ============================================================================\n// S12. Stacked bar — individual values 30–50%, totals far from 100% → no snap\n//      Individual values are mid-range (no individual snap).\n//      Stacked totals ~58–70%, also far from 100% → no re-snap either.\n//      Axis should data-fit.\n// ============================================================================\n\nfunction genSnapStackedTotalsFarFromBoundTest(): TestCase {\n    const categories = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const series = ['Channel A', 'Channel B'];\n    // Each group sums to ~58–70%\n    const groupTotals: Record<string, number[]> = {\n        'Q1': [30, 28],   // sum = 58\n        'Q2': [35, 30],   // sum = 65\n        'Q3': [28, 32],   // sum = 60\n        'Q4': [38, 32],   // sum = 70\n    };\n\n    const data: Record<string, any>[] = [];\n    for (const cat of categories) {\n        const parts = groupTotals[cat];\n        series.forEach((s, i) => {\n            data.push({ quarter: cat, channel: s, coverage: parts[i] });\n        });\n    }\n\n    return {\n        title: 'Snap: Stacked Pct sum≈58–70% → no snap',\n        description:\n            'Stacked bar with 2 series per quarter. Individual values range 28–38% ' +\n            '(far from 100%, no individual snap). Stacked totals are 58–70% — also ' +\n            'far from 100% (threshold = 25). No snap fires on either individual values ' +\n            'or stacked totals. Axis data-fits.',\n        tags: ['semantic', 'snap', 'percentage', 'stacked', 'no-snap'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('quarter'), makeField('coverage'), makeField('channel')],\n        metadata: {\n            quarter:  { type: Type.String, semanticType: 'Category',   levels: categories },\n            channel:  { type: Type.String, semanticType: 'Category',   levels: series },\n            coverage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            coverage: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('quarter'),\n            y: makeEncodingItem('coverage'),\n            color: makeEncodingItem('channel'),\n        },\n    };\n}\n\n/**\n * Generate all snap-to-bound test cases.\n *\n * Demonstrates the snap-to-bound heuristic for Percentage [0,100]\n * and PercentageChange [-1,1]. Each bound snaps independently when\n * data reaches within 25% of the effective side range from that edge.\n * For zero-straddling domains (lo < 0 < hi), each side's threshold is\n * computed relative to its distance from zero, not the full range.\n */\nexport function genSnapToBoundTests(): TestCase[] {\n    return [\n        genSnapPctNoSnapTest(),\n        genSnapPctMaxOnlyTest(),\n        genSnapPctMinOnlyTest(),\n        genSnapPctBothTest(),\n        genSnapPctExceedTest(),\n        genSnapPctChangeNoSnapTest(),\n        genSnapPctChangeMinTest(),\n        genSnapPctChangeBothTest(),\n        genSnapStackedSumNear100Test(),\n        genSnapStackedSumExceedsTest(),\n        genSnapStackedIndividualSnapButTotalsExceedTest(),\n        genSnapStackedTotalsFarFromBoundTest(),\n    ];\n}\n\n// ############################################################################\n// SEMANTIC TYPE FALLBACK TESTS\n//\n// Demonstrate that the compiler handles wrong or overly generic semantic type\n// annotations gracefully. Each test uses data that is identical (or similar)\n// to a normal gallery example but deliberately assigns incorrect or\n// \"Unknown\" semantic types. The compiler should fall back via the type\n// hierarchy and produce a sensible chart from physical data characteristics.\n// ############################################################################\n\n// ============================================================================\n// F1. Grouped Bar — revenue labeled as \"Count\"\n//     Revenue should be \"Amount\" (gets $ prefix, sum aggregation). Labeled\n//     as \"Count\" instead — a plausible mistake since both are numeric measures.\n//     Loses currency formatting; gets integer formatting instead.\n// ============================================================================\n\nfunction genFallbackGroupedBarCountForRevenueTest(): TestCase {\n    const rand = seeded(8001);\n    const cities = ['Seattle', 'Austin', 'Boston', 'Denver', 'Miami'];\n    const segments = ['Online', 'Retail', 'Wholesale'];\n    const data: Record<string, any>[] = [];\n    for (const city of cities) {\n        for (const seg of segments) {\n            data.push({ city, segment: seg, revenue: Math.round(100000 + rand() * 900000) });\n        }\n    }\n\n    return {\n        title: 'Fallback: Grouped Bar — Count for Revenue',\n        description:\n            'Revenue should be \"Amount\" (currency prefix $, SI abbreviation) but is ' +\n            'labeled \"Count\" — a common near-miss since both are numeric measures. ' +\n            'The compiler accepts \"Count\" (it is a valid numeric type) but applies ' +\n            'integer formatting instead of currency formatting. Compare with the ' +\n            'Revenue Formatting test to see what \"Amount\" adds.',\n        tags: ['semantic', 'fallback', 'near-miss', 'grouped-bar', 'currency'],\n        chartType: 'Grouped Bar Chart',\n        data,\n        fields: [makeField('city'), makeField('segment'), makeField('revenue')],\n        metadata: {\n            city:    { type: Type.String, semanticType: 'City',     levels: cities },\n            segment: { type: Type.String, semanticType: 'Category', levels: segments },\n            revenue: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('city'),\n            y:     makeEncodingItem('revenue'),\n            group: makeEncodingItem('segment'),\n        },\n    };\n}\n\n// ============================================================================\n// F2. Grouped Bar — quarters labeled as \"Month\"\n//     Quarters (\"Q1\"–\"Q4\") should be \"Quarter\" but labeled \"Month\" instead.\n//     Both are temporal granules, so this is a plausible near-miss. The\n//     compiler may apply month canonical ordering (Jan–Dec) which doesn't\n//     match the data; it falls back when values don't parse as months.\n// ============================================================================\n\nfunction genFallbackGroupedBarMonthForQuarterTest(): TestCase {\n    const rand = seeded(8002);\n    const departments = ['Engineering', 'Marketing', 'Sales', 'Support'];\n    const quarters = ['Q1', 'Q2', 'Q3', 'Q4'];\n    const data: Record<string, any>[] = [];\n    for (const dept of departments) {\n        for (const q of quarters) {\n            data.push({ department: dept, quarter: q, headcount: Math.round(20 + rand() * 80) });\n        }\n    }\n\n    return {\n        title: 'Fallback: Grouped Bar — Month for Quarter',\n        description:\n            'Quarter values (\"Q1\"–\"Q4\") should be \"Quarter\" but labeled \"Month\". ' +\n            'Both are temporal granules — a plausible confusion. The compiler detects ' +\n            'that \"Q1\" doesn\\'t parse as a month name, so Month\\'s canonical ordering ' +\n            '(Jan–Dec) cannot apply. It falls back along the hierarchy: Month → ' +\n            'DateGranule → Temporal, then to data-driven ordering.',\n        tags: ['semantic', 'fallback', 'near-miss', 'grouped-bar', 'temporal'],\n        chartType: 'Grouped Bar Chart',\n        data,\n        fields: [makeField('department'), makeField('quarter'), makeField('headcount')],\n        metadata: {\n            department: { type: Type.String, semanticType: 'Category', levels: departments },\n            quarter:    { type: Type.String, semanticType: 'Month',    levels: quarters },\n            headcount:  { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('department'),\n            y:     makeEncodingItem('headcount'),\n            group: makeEncodingItem('quarter'),\n        },\n    };\n}\n\n// ============================================================================\n// F3. Heatmap — days labeled as \"Category\", hours labeled as \"Category\"\n//     Day-of-week (\"Mon\"–\"Fri\") should be \"Day\" for canonical ordering;\n//     hour slots should be \"Hour\". Both labeled as generic \"Category\" instead.\n//     Chart renders correctly but loses canonical Mon–Fri / 9am–5pm ordering.\n// ============================================================================\n\nfunction genFallbackHeatmapCategoryForDayTest(): TestCase {\n    const rand = seeded(8003);\n    const rows = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];\n    const cols = Array.from({ length: 24 }, (_, hour) => `${hour.toString().padStart(2, '0')}:00`);\n    const data: Record<string, any>[] = [];\n    for (const r of rows) {\n        for (const c of cols) {\n            data.push({ day: r, hour: c, activity: Math.round(rand() * 100) });\n        }\n    }\n\n    return {\n        title: 'Fallback: Heatmap — Category for Day/Hour',\n        description:\n            'Day-of-week and hour-of-day are both labeled \"Category\" instead of \"Day\" ' +\n            'and \"Hour\". This is a common near-miss — the LLM treats temporal labels ' +\n            'as generic categories. The chart renders correctly, but loses the canonical ' +\n            'Mon–Fri and 00:00–23:00 ordering that \"Day\" and \"Hour\" would provide.',\n        tags: ['semantic', 'fallback', 'near-miss', 'heatmap', 'ordering'],\n        chartType: 'Heatmap',\n        data,\n        fields: [makeField('day'), makeField('hour'), makeField('activity')],\n        metadata: {\n            day:      { type: Type.String, semanticType: 'Category', levels: rows },\n            hour:     { type: Type.String, semanticType: 'Category', levels: cols },\n            activity: { type: Type.Number, semanticType: 'Score',    levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('hour'),\n            y:     makeEncodingItem('day'),\n            color: makeEncodingItem('activity'),\n        },\n    };\n}\n\n// ============================================================================\n// F4. Heatmap — sales labeled as \"Percentage\"\n//     Sales values (50–500) should be \"Amount\" but labeled \"Percentage\",\n//     which expects 0–100 or 0–1 range. The compiler applies percentage\n//     formatting (\"50%\"–\"500%\") which is wrong, but the chart still renders.\n//     The compiler detects the values are way outside [0, 1], so no snap\n//     fires, but the \"%\" suffix persists.\n// ============================================================================\n\nfunction genFallbackHeatmapPercentageForSalesTest(): TestCase {\n    const rand = seeded(8004);\n    const products = ['Widget', 'Gadget', 'Gizmo', 'Doohickey'];\n    const regions = ['North', 'South', 'East', 'West'];\n    const data: Record<string, any>[] = [];\n    for (const p of products) {\n        for (const r of regions) {\n            data.push({ product: p, region: r, sales: Math.round(50 + rand() * 450) });\n        }\n    }\n\n    return {\n        title: 'Fallback: Heatmap — Percentage for Sales',\n        description:\n            'Sales (50–500) labeled as \"Percentage\" instead of \"Amount\". A plausible ' +\n            'mistake when the LLM confuses revenue share with revenue. The compiler ' +\n            'applies percentage formatting, which adds a \"%\" suffix to axis labels. ' +\n            'Values are way outside the expected [0, 1] or [0, 100] range, so snap ' +\n            'doesn\\'t fire, but the formatting is misleading.',\n        tags: ['semantic', 'fallback', 'near-miss', 'heatmap', 'format'],\n        chartType: 'Heatmap',\n        data,\n        fields: [makeField('product'), makeField('region'), makeField('sales')],\n        metadata: {\n            product: { type: Type.String, semanticType: 'Category',   levels: products },\n            region:  { type: Type.String, semanticType: 'Category',   levels: regions },\n            sales:   { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            sales: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('region'),\n            y:     makeEncodingItem('product'),\n            color: makeEncodingItem('sales'),\n        },\n    };\n}\n\n// ============================================================================\n// F5. Line Chart — months labeled as \"Category\"\n//     Month names (\"Jan\"–\"Dec\") should be \"Month\" for canonical ordering.\n//     Labeled as \"Category\" instead — the chart renders but months may\n//     appear in alphabetical or data order, not Jan→Dec order.\n// ============================================================================\n\nfunction genFallbackLineCategoryForMonthTest(): TestCase {\n    const rand = seeded(8005);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const data = months.map(m => ({\n        month: m,\n        signups: Math.round(50 + rand() * 200),\n    }));\n\n    return {\n        title: 'Fallback: Line — Category for Month',\n        description:\n            'Month names (\"Jan\"–\"Dec\") should be \"Month\" for canonical Jan→Dec ordering, ' +\n            'but labeled \"Category\". A very common LLM near-miss. The chart renders but ' +\n            'months may appear in data-insertion or alphabetical order rather than the ' +\n            'natural calendar order. Compare with the Month Canonical Order test.',\n        tags: ['semantic', 'fallback', 'near-miss', 'line', 'ordering'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('signups')],\n        metadata: {\n            month:   { type: Type.String, semanticType: 'Category', levels: months },\n            signups: { type: Type.Number, semanticType: 'Count',    levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('signups'),\n        },\n    };\n}\n\n// ============================================================================\n// F6. Line Chart — temperature labeled as \"Quantity\"\n//     Temperature should be \"Temperature\" (diverging detection, °C suffix).\n//     Labeled as \"Quantity\" instead — a sibling under the Physical T1 family.\n//     Loses the potential diverging color and degree formatting.\n// ============================================================================\n\nfunction genFallbackLineQuantityForTemperatureTest(): TestCase {\n    const rand = seeded(8006);\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const data = months.map(m => ({\n        month: m,\n        temperature: Math.round(-5 + rand() * 40),\n    }));\n\n    return {\n        title: 'Fallback: Line — Quantity for Temperature',\n        description:\n            'Temperature (°C) labeled as \"Quantity\" instead of \"Temperature\". Both are ' +\n            'under the Physical T1 family, so this is a sibling near-miss. The compiler ' +\n            'treats it as a generic physical measure: no °C suffix formatting, no ' +\n            'freezing-point diverging detection. The chart shape is correct but loses ' +\n            'the temperature-specific formatting and semantic cues.',\n        tags: ['semantic', 'fallback', 'near-miss', 'line', 'format', 'diverging'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('month'), makeField('temperature')],\n        metadata: {\n            month:       { type: Type.String, semanticType: 'Month',    levels: months },\n            temperature: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            x: makeEncodingItem('month'),\n            y: makeEncodingItem('temperature'),\n        },\n    };\n}\n\n// ============================================================================\n// F7. Area Chart — user counts labeled as \"Amount\"\n//     User counts should be \"Count\" (integer formatting, no currency prefix).\n//     Labeled as \"Amount\" instead — gets currency prefix ($) and SI\n//     abbreviation, which is misleading for a user count metric.\n// ============================================================================\n\nfunction genFallbackAreaAmountForCountTest(): TestCase {\n    const rand = seeded(8007);\n    const quarters = ['Q1 2023', 'Q2 2023', 'Q3 2023', 'Q4 2023',\n                      'Q1 2024', 'Q2 2024', 'Q3 2024', 'Q4 2024'];\n    const channels = ['Web', 'Mobile', 'Desktop'];\n    const data: Record<string, any>[] = [];\n    for (const q of quarters) {\n        for (const ch of channels) {\n            data.push({ period: q, channel: ch, users: Math.round(1000 + rand() * 9000) });\n        }\n    }\n\n    return {\n        title: 'Fallback: Area — Amount for Count',\n        description:\n            'User counts labeled as \"Amount\" instead of \"Count\". Both are numeric ' +\n            'measures with sum aggregation and meaningful zero, so the chart shape is ' +\n            'correct. But \"Amount\" still suggests a generic amount-style presentation, ' +\n            'typically abbreviated as \"5.2K\" rather than formatted as a plain count ' +\n            'like \"5,200 users\", which is a worse fit for this field.',\n        tags: ['semantic', 'fallback', 'near-miss', 'area', 'format', 'currency'],\n        chartType: 'Area Chart',\n        data,\n        fields: [makeField('period'), makeField('channel'), makeField('users')],\n        metadata: {\n            period:  { type: Type.String, semanticType: 'Category', levels: quarters },\n            channel: { type: Type.String, semanticType: 'Category', levels: channels },\n            users:   { type: Type.Number, semanticType: 'Amount',   levels: [] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('period'),\n            y:     makeEncodingItem('users'),\n            color: makeEncodingItem('channel'),\n        },\n    };\n}\n\n// ============================================================================\n// F8. Scatter Plot — score labeled as \"Percentage\"\n//     Exam scores (0–100) labeled as \"Percentage\" instead of \"Score\".\n//     Both have similar ranges, but \"Percentage\" adds \"%\" suffix and\n//     snap-to-bound behavior, while \"Score\" uses integer ticks with\n//     a fixed [0, 100] domain. The chart still renders, but axis\n//     labels show \"85%\" instead of \"85\".\n// ============================================================================\n\nfunction genFallbackScatterPercentageForScoreTest(): TestCase {\n    const rand = seeded(8008);\n    const teams = ['Alpha', 'Beta', 'Gamma', 'Delta'];\n    const data: Record<string, any>[] = [];\n    for (const team of teams) {\n        for (let i = 0; i < 15; i++) {\n            data.push({\n                team,\n                study_hours: Math.round(2 + rand() * 18),\n                exam_score: Math.round(55 + rand() * 40),\n            });\n        }\n    }\n\n    return {\n        title: 'Fallback: Scatter — Percentage for Score',\n        description:\n            'Exam scores (55–95) labeled as \"Percentage\" instead of \"Score\". Both have ' +\n            'similar numeric ranges, making this a very plausible LLM mistake. ' +\n            '\"Percentage\" adds \"%\" suffix (showing \"85%\" instead of \"85\") and applies ' +\n            'percentage snap-to-bound behavior. \"Score\" would use integer ticks and a ' +\n            'clean [0, 100] domain without \"%\" formatting.',\n        tags: ['semantic', 'fallback', 'near-miss', 'scatter', 'format', 'domain'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('team'), makeField('study_hours'), makeField('exam_score')],\n        metadata: {\n            team:       { type: Type.String, semanticType: 'Category',   levels: teams },\n            study_hours: { type: Type.Number, semanticType: 'Count',     levels: [] },\n            exam_score: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        semanticAnnotations: {\n            exam_score: { semanticType: 'Percentage', intrinsicDomain: [0, 100] },\n        },\n        encodingMap: {\n            x:     makeEncodingItem('study_hours'),\n            y:     makeEncodingItem('exam_score'),\n            color: makeEncodingItem('team'),\n        },\n    };\n}\n\n// ============================================================================\n// Public generator: Semantic Fallback Tests\n// ============================================================================\n\nexport function genSemanticFallbackTests(): TestCase[] {\n    return [\n        genFallbackGroupedBarCountForRevenueTest(),\n        genFallbackGroupedBarMonthForQuarterTest(),\n        genFallbackHeatmapCategoryForDayTest(),\n        genFallbackHeatmapPercentageForSalesTest(),\n        genFallbackLineCategoryForMonthTest(),\n        genFallbackLineQuantityForTemperatureTest(),\n        genFallbackAreaAmountForCountTest(),\n        genFallbackScatterPercentageForScoreTest(),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Geographic gallery generators — Vega-Lite maps.\n *\n * Two generic chart types, each rendering US or World geography. Scope is\n * chosen by the `region` chart property; when left at its 'auto' default it is\n * inferred from the data (preferring the US). These gallery examples set\n * `region` *explicitly* (us / world) so each tile is unambiguous, even though\n * the same data would auto-detect the same frame.\n *\n *   - Map (bubble): a geoshape base with circles positioned by\n *     longitude/latitude and sized/coloured by a measure.\n *   - Choropleth: each region of the base TopoJSON filled by a measure, joined\n *     via the `id` channel. Rows carry ordinary place *names* (state/country);\n *     the choropleth gazetteer resolves those (or USPS / ISO codes) to the\n *     numeric feature ids in Vega's `us-10m.json` / `world-110m.json`.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\n\n// ---------------------------------------------------------------------------\n// Bubble-map data: city, longitude, latitude, metro population (millions)\n// ---------------------------------------------------------------------------\n\nconst WORLD_CITIES: Array<[string, number, number, number]> = [\n    ['Tokyo', 139.69, 35.68, 37.4],\n    ['Delhi', 77.10, 28.70, 32.9],\n    ['Shanghai', 121.47, 31.23, 29.2],\n    ['Dhaka', 90.41, 23.81, 23.2],\n    ['São Paulo', -46.63, -23.55, 22.6],\n    ['Mexico City', -99.13, 19.43, 22.3],\n    ['Cairo', 31.24, 30.04, 22.2],\n    ['Beijing', 116.41, 39.90, 21.7],\n    ['Mumbai', 72.88, 19.08, 21.3],\n    ['Osaka', 135.50, 34.69, 19.0],\n    ['New York', -74.01, 40.71, 18.9],\n    ['Karachi', 67.01, 24.86, 17.2],\n    ['Istanbul', 28.98, 41.01, 16.0],\n    ['Lagos', 3.38, 6.52, 15.9],\n    ['Buenos Aires', -58.38, -34.60, 15.4],\n    ['Moscow', 37.62, 55.75, 12.6],\n    ['Los Angeles', -118.24, 34.05, 12.4],\n    ['Paris', 2.35, 48.86, 11.1],\n    ['Jakarta', 106.85, -6.21, 11.1],\n    ['Lima', -77.04, -12.05, 11.0],\n    ['Bangkok', 100.50, 13.76, 10.9],\n    ['Seoul', 126.98, 37.57, 9.9],\n    ['Johannesburg', 28.05, -26.20, 9.6],\n    ['London', -0.13, 51.51, 9.5],\n    ['Sydney', 151.21, -33.87, 5.3],\n];\n\nconst US_CITIES: Array<[string, number, number, number]> = [\n    ['New York', -74.01, 40.71, 18.9],\n    ['Los Angeles', -118.24, 34.05, 12.4],\n    ['Chicago', -87.63, 41.88, 9.3],\n    ['Dallas', -96.80, 32.78, 7.6],\n    ['Houston', -95.37, 29.76, 7.1],\n    ['Washington', -77.04, 38.91, 6.3],\n    ['Philadelphia', -75.17, 39.95, 6.2],\n    ['Atlanta', -84.39, 33.75, 6.1],\n    ['Miami', -80.19, 25.76, 6.1],\n    ['Phoenix', -112.07, 33.45, 4.9],\n    ['Boston', -71.06, 42.36, 4.9],\n    ['San Francisco', -122.42, 37.77, 4.7],\n    ['Seattle', -122.33, 47.61, 4.0],\n    ['Minneapolis', -93.27, 44.98, 3.7],\n    ['Denver', -104.99, 39.74, 2.9],\n];\n\nfunction bubbleMapCase(\n    chartType: string,\n    region: 'us' | 'world',\n    title: string,\n    description: string,\n    cities: Array<[string, number, number, number]>,\n): TestCase {\n    const data = cities.map(([city, lon, lat, pop]) => ({ city, lon, lat, pop }));\n    return {\n        title,\n        description,\n        tags: ['map', 'geographic', 'bubble', 'gallery'],\n        chartType,\n        chartProperties: { region },\n        data,\n        fields: [makeField('city'), makeField('lon'), makeField('lat'), makeField('pop')],\n        metadata: {\n            city: { type: Type.String, semanticType: 'City', levels: [] },\n            lon: { type: Type.Number, semanticType: 'Longitude', levels: [] },\n            lat: { type: Type.Number, semanticType: 'Latitude', levels: [] },\n            pop: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            longitude: makeEncodingItem('lon'),\n            latitude: makeEncodingItem('lat'),\n            size: makeEncodingItem('pop'),\n            color: makeEncodingItem('pop'),\n        },\n    };\n}\n\nexport function genMapTests(): TestCase[] {\n    return [\n        bubbleMapCase(\n            'Map',\n            'us',\n            'US metro areas',\n            'One circle per US metro area, placed by longitude/latitude and '\n            + 'sized + coloured by population (millions). The region property is '\n            + 'set to US, so the map uses an albersUsa frame.',\n            US_CITIES,\n        ),\n        bubbleMapCase(\n            'Map',\n            'world',\n            'World metro areas',\n            'One circle per metropolitan area, placed by longitude/latitude and '\n            + 'sized + coloured by population (millions). The region property is '\n            + 'set to World, so the map uses an Equal-Earth frame.',\n            WORLD_CITIES,\n        ),\n    ];\n}\n\n// ---------------------------------------------------------------------------\n// Choropleth data\n// ---------------------------------------------------------------------------\n\n// US states: name, 2020 population (millions). The choropleth gazetteer maps\n// the name (or a USPS code / FIPS id) to the numeric feature id in us-10m.json.\nconst US_STATES: Array<[string, number]> = [\n    ['Alabama', 5.02], ['Alaska', 0.73], ['Arizona', 7.15], ['Arkansas', 3.01],\n    ['California', 39.54], ['Colorado', 5.77], ['Connecticut', 3.61], ['Delaware', 0.99],\n    ['District of Columbia', 0.69], ['Florida', 21.54], ['Georgia', 10.71], ['Hawaii', 1.46],\n    ['Idaho', 1.84], ['Illinois', 12.81], ['Indiana', 6.79], ['Iowa', 3.19],\n    ['Kansas', 2.94], ['Kentucky', 4.51], ['Louisiana', 4.66], ['Maine', 1.36],\n    ['Maryland', 6.18], ['Massachusetts', 7.03], ['Michigan', 10.08], ['Minnesota', 5.71],\n    ['Mississippi', 2.96], ['Missouri', 6.15], ['Montana', 1.08], ['Nebraska', 1.96],\n    ['Nevada', 3.10], ['New Hampshire', 1.38], ['New Jersey', 9.29], ['New Mexico', 2.12],\n    ['New York', 20.20], ['North Carolina', 10.44], ['North Dakota', 0.78], ['Ohio', 11.80],\n    ['Oklahoma', 3.96], ['Oregon', 4.24], ['Pennsylvania', 13.00], ['Rhode Island', 1.10],\n    ['South Carolina', 5.12], ['South Dakota', 0.89], ['Tennessee', 6.91], ['Texas', 29.15],\n    ['Utah', 3.27], ['Vermont', 0.64], ['Virginia', 8.63], ['Washington', 7.71],\n    ['West Virginia', 1.79], ['Wisconsin', 5.89], ['Wyoming', 0.58],\n];\n\n// World countries: name, 2023 population (millions). The choropleth gazetteer\n// maps the name (or an ISO alpha-2 / alpha-3 / numeric code) to the numeric\n// feature id in world-110m.json.\nconst WORLD_COUNTRIES: Array<[string, number]> = [\n    ['China', 1410], ['India', 1428], ['United States', 339], ['Indonesia', 277],\n    ['Pakistan', 240], ['Nigeria', 223], ['Brazil', 216], ['Bangladesh', 173],\n    ['Russia', 144], ['Mexico', 128], ['Ethiopia', 126], ['Japan', 124],\n    ['Philippines', 117], ['Egypt', 112], ['DR Congo', 102], ['Vietnam', 98],\n    ['Iran', 89], ['Turkey', 85], ['Germany', 84], ['Thailand', 71],\n    ['United Kingdom', 67], ['France', 68], ['South Africa', 60], ['Italy', 59],\n    ['Kenya', 55], ['Colombia', 52], ['Spain', 47], ['Argentina', 46],\n    ['Algeria', 45], ['Canada', 39], ['Poland', 38], ['Ukraine', 37],\n    ['Saudi Arabia', 37], ['Morocco', 37], ['Peru', 34], ['Australia', 26],\n    ['Kazakhstan', 19], ['Chile', 19], ['Sweden', 10], ['Norway', 5.5],\n];\n\nfunction choroplethCase(\n    chartType: string,\n    region: 'us' | 'world',\n    title: string,\n    description: string,\n    placeType: 'State' | 'Country',\n    rows: Array<[string, number]>,\n): TestCase {\n    const regionField = placeType === 'State' ? 'state' : 'country';\n    const data = rows.map(([region, value]) => ({ [regionField]: region, value }));\n    return {\n        title,\n        description,\n        tags: ['map', 'geographic', 'choropleth', 'gallery'],\n        chartType,\n        chartProperties: { region },\n        data,\n        fields: [makeField(regionField), makeField('value')],\n        metadata: {\n            [regionField]: { type: Type.String, semanticType: placeType, levels: [] },\n            value: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: {\n            id: makeEncodingItem(regionField),\n            color: makeEncodingItem('value'),\n        },\n    };\n}\n\nexport function genChoroplethTests(): TestCase[] {\n    return [\n        choroplethCase(\n            'Choropleth',\n            'us',\n            'US states',\n            'Each US state filled by its 2020 population (millions). The region '\n            + 'property is set to US. Rows carry plain state names; the gazetteer '\n            + 'resolves them (or USPS codes / FIPS ids) to the us-10m.json '\n            + 'TopoJSON feature ids.',\n            'State',\n            US_STATES,\n        ),\n        choroplethCase(\n            'Choropleth',\n            'world',\n            'World countries',\n            'Each country filled by its 2023 population (millions). The region '\n            + 'property is set to World. Rows carry plain country names; the '\n            + 'gazetteer resolves them (or ISO alpha-2/alpha-3 codes) to the '\n            + 'world-110m.json TopoJSON feature ids.',\n            'Country',\n            WORLD_COUNTRIES,\n        ),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gallery generators for two project/BI chart types — Vega-Lite.\n *\n *   - Gantt: one horizontal bar per task, spanning its start → end dates, with\n *     colour grouping tasks into project phases.\n *   - Bullet: one row per item, a measured value bar compared against a target\n *     marker (tick). Items share a common unit so the bars are comparable on a\n *     single axis.\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { realGanttCases, realBulletCases } from './real-world-tests';\n\n// ---------------------------------------------------------------------------\n// Gantt — a software release schedule\n// ---------------------------------------------------------------------------\n\nconst RELEASE_PLAN: Array<[string, string, string, string]> = [\n    // task, start, end, phase\n    ['Requirements', '2024-01-01', '2024-01-22', 'Plan'],\n    ['Design', '2024-01-15', '2024-02-12', 'Plan'],\n    ['Backend', '2024-02-05', '2024-04-01', 'Build'],\n    ['Frontend', '2024-02-19', '2024-04-15', 'Build'],\n    ['Integration', '2024-04-01', '2024-04-29', 'Build'],\n    ['QA & Testing', '2024-04-15', '2024-05-20', 'Verify'],\n    ['Beta', '2024-05-06', '2024-06-03', 'Verify'],\n    ['Launch', '2024-06-03', '2024-06-17', 'Release'],\n];\n\n// A denser pipeline measured on a *numeric* time axis (elapsed seconds), with\n// several overlapping stages. This exercises the quantitative x/x2 path (no zero\n// anchor) and a higher task count than the dated release plan above.\nconst CI_PIPELINE: Array<[string, number, number, string]> = [\n    // stage, start (s), end (s), group\n    ['Checkout', 0, 8, 'Setup'],\n    ['Install deps', 8, 72, 'Setup'],\n    ['Lint', 72, 110, 'Check'],\n    ['Type check', 72, 128, 'Check'],\n    ['Unit tests', 128, 205, 'Test'],\n    ['Integration tests', 205, 320, 'Test'],\n    ['Build', 320, 372, 'Build'],\n    ['Bundle', 372, 410, 'Build'],\n    ['Docker image', 410, 465, 'Package'],\n    ['Deploy staging', 465, 500, 'Deploy'],\n];\n\nexport function genGanttTests(): TestCase[] {\n    const data = RELEASE_PLAN.map(([task, start, end, phase]) => ({ task, start, end, phase }));\n    const pipeline = CI_PIPELINE.map(([stage, start, end, group]) => ({ stage, start, end, group }));\n    return [\n        {\n            title: 'Project schedule',\n            description:\n                'One horizontal bar per task, spanning its start and end dates. '\n                + 'Bars are coloured by project phase and tasks are ordered by '\n                + 'start date, so the timeline reads top-to-bottom in chronological '\n                + 'order. The interval lives on x/x2, so the time axis is not '\n                + 'anchored at zero.',\n            tags: ['gantt', 'timeline', 'temporal', 'range', 'gallery'],\n            chartType: 'Gantt Chart',\n            data,\n            fields: [makeField('task'), makeField('start'), makeField('end'), makeField('phase')],\n            metadata: {\n                task: { type: Type.String, semanticType: 'Category', levels: [] },\n                start: { type: Type.Date, semanticType: 'Date', levels: [] },\n                end: { type: Type.Date, semanticType: 'Date', levels: [] },\n                phase: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('task'),\n                x: makeEncodingItem('start'),\n                x2: makeEncodingItem('end'),\n                color: makeEncodingItem('phase'),\n            },\n        },\n        {\n            title: 'CI pipeline run',\n            description:\n                'A build pipeline on a numeric time axis (elapsed seconds) rather '\n                + 'than dates. Ten stages, several running in parallel, are coloured '\n                + 'by stage group and ordered by start time. Because start/end are '\n                + 'quantities the axis still floats off zero to frame the run.',\n            tags: ['gantt', 'timeline', 'quantitative', 'range', 'dense', 'gallery'],\n            chartType: 'Gantt Chart',\n            data: pipeline,\n            fields: [makeField('stage'), makeField('start'), makeField('end'), makeField('group')],\n            metadata: {\n                stage: { type: Type.String, semanticType: 'Category', levels: [] },\n                start: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                end: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                group: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('stage'),\n                x: makeEncodingItem('start'),\n                x2: makeEncodingItem('end'),\n                color: makeEncodingItem('group'),\n            },\n        },\n        ...realGanttCases(),\n    ];\n}\n\n// ---------------------------------------------------------------------------\n// Bullet — quarterly sales by rep against quota (same unit, $K)\n// ---------------------------------------------------------------------------\n\nconst SALES_VS_QUOTA: Array<[string, number, number]> = [\n    // rep, sales ($K), quota ($K)\n    ['Anna', 284, 300],\n    ['Ben', 172, 150],\n    ['Carla', 248, 220],\n    ['Diego', 305, 280],\n    ['Eve', 198, 250],\n    ['Frank', 226, 210],\n];\n\n// A denser bullet on a different domain and magnitude: store revenue ($K)\n// against an annual target, twelve stores, with a mix of stores above and below\n// their target so both status colours and the per-row quarter bands are visible.\nconst STORE_REVENUE: Array<[string, number, number]> = [\n    // store, revenue ($K), target ($K)\n    ['Seattle', 612, 540],\n    ['Portland', 388, 420],\n    ['Denver', 470, 470],\n    ['Austin', 845, 720],\n    ['Chicago', 503, 560],\n    ['Boston', 266, 350],\n    ['Atlanta', 591, 500],\n    ['Miami', 432, 480],\n    ['Phoenix', 358, 300],\n    ['Dallas', 707, 650],\n    ['Detroit', 214, 320],\n    ['Newark', 489, 460],\n];\n\nexport function genBulletTests(): TestCase[] {\n    const data = SALES_VS_QUOTA.map(([rep, sales, quota]) => ({ rep, sales, quota }));\n    const stores = STORE_REVENUE.map(([store, revenue, target]) => ({ store, revenue, target }));\n    return [\n        {\n            title: 'Sales vs quota',\n            description:\n                'One row per sales rep: a value bar for quarterly sales ($K) with '\n                + 'a tick marking the rep\\u2019s quota. The value bar reads as '\n                + 'length from zero, and the target tick sits a little taller so it '\n                + 'stands out as a reference marker.',\n            tags: ['bullet', 'kpi', 'target', 'gallery'],\n            chartType: 'Bullet Chart',\n            data,\n            fields: [makeField('rep'), makeField('sales'), makeField('quota')],\n            metadata: {\n                rep: { type: Type.String, semanticType: 'Category', levels: [] },\n                sales: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                quota: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('rep'),\n                x: makeEncodingItem('sales'),\n                goal: makeEncodingItem('quota'),\n            },\n        },\n        {\n            title: 'Store revenue vs target',\n            description:\n                'A denser bullet: twelve stores compared against an annual revenue '\n                + 'target ($K). Stores at or above target read in the meets-target '\n                + 'colour, those below in the below-target colour, and the muted '\n                + 'grey bands behind each bar mark quarters of that store\\u2019s own '\n                + 'target so partial progress is easy to gauge.',\n            tags: ['bullet', 'kpi', 'target', 'dense', 'gallery'],\n            chartType: 'Bullet Chart',\n            data: stores,\n            fields: [makeField('store'), makeField('revenue'), makeField('target')],\n            metadata: {\n                store: { type: Type.String, semanticType: 'Category', levels: [] },\n                revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                target: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                y: makeEncodingItem('store'),\n                x: makeEncodingItem('revenue'),\n                goal: makeEncodingItem('target'),\n            },\n        },\n        ...realBulletCases(),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Synthetic **game operations** panel for a three-phase gallery story:\n * (1) overview — line + regional grouped bar on MAU; (2) change — monthly waterfall + game×month heatmap;\n * (3) composition — ECharts sunburst region → gameType → game (Dec totalUsers).\n *\n * **Detail rows**: Period × Game × Region; `period` is `2025-01` … `2025-12`; ≤24 games, 6 `gameType` values; regions N|E|S|W.\n * MAU stocks use {@link OMNI_VIZ_STOCK_SCALE} so monthly net-add and MAU views stay in a comparable visual range.\n * Net-add seasonality follows {@link narrativeMonthFlowMultiplier} (calendar month): 1–2 increase step-up; 3–5 decrease\n * easing; 6–8 increase fading; 9–10 decrease easing; 11–12 increase.\n */\n\nexport interface OmniVizRow {\n    /** Year-month `YYYY-MM` (2025-01 … 2025-12) */\n    period: string;\n    game: string;\n    gameType: string;\n    /** Net new (may be negative) */\n    newUsers: number;\n    /** End-of-month MAU stock */\n    totalUsers: number;\n    region: (typeof OMNI_VIZ_REGIONS)[number];\n}\n\nexport const OMNI_VIZ_MONTHS = [\n    '2025-01', '2025-02', '2025-03', '2025-04', '2025-05', '2025-06',\n    '2025-07', '2025-08', '2025-09', '2025-10', '2025-11', '2025-12',\n] as const;\n\nexport const OMNI_VIZ_REGIONS = ['N', 'E', 'S', 'W'] as const;\n\nexport const OMNI_VIZ_GAME_TYPES = [\n    'Mobile Casual',\n    'Mobile Midcore',\n    'PC / Client',\n    'Console',\n    'Cross-platform',\n    'Web / Mini-game',\n] as const;\n\nexport const OMNI_VIZ_GAME_ORDER = [\n    'Starforge Tactics',\n    'Neon Drift 2049',\n    'Pocket Kingdoms',\n    'Azure Legends',\n    'Dustwind Arena',\n    'Circuit Breakers',\n    'Moonlit Odyssey',\n    'Granite & Glyphs',\n    'Velvet Racing Club',\n    'Echoes of Athera',\n    'Snack Stack Saga',\n    'Ironbound Front',\n    'Sakura Stage Live',\n    'Deepline Submarine',\n    'Pixel Farmers Co-op',\n    'Void Choir Online',\n    'Metro Hustle',\n    'Coral Reef Builder',\n    'Blade Symphony X',\n    'Quiet Hours VR',\n    'Turbo Kart Universe',\n    'Guildfall Chronicles',\n    'Match-3 Museum',\n    'Northwind Survival',\n] as const;\n\n/**\n * Pull down initial MAU so portfolio stock views sit closer to **monthly net-add** magnitudes;\n * otherwise MAU totals can dwarf increase/decrease bars when they share a linear axis.\n */\nconst OMNI_VIZ_STOCK_SCALE = 0.1;\n/** Floor for MAU after net flow (keep small when stock scale is low). */\nconst OMNI_VIZ_MAU_FLOOR = 150;\n\n/**\n * Additive shift per row: `(narrative - 1) * this`. Raw `rawFlow` stays **too positive on average** even when\n * narrative below 1, so monthly sum(newUsers) rarely went negative and the ECharts waterfall showed no red decrease.\n * This anchors the portfolio to the intended month direction while keeping per-cell noise.\n */\n/** Larger ⇒ waterfall **decrease** (and **increase**) steps are taller on the shared Y axis. */\nconst OMNI_VIZ_NARRATIVE_ANCHOR_PER_UNIT = 15200;\n\n/** Fraction of detail cells that take an extra random net-loss bump (stable hash — reproducible). */\nconst OMNI_VIZ_RANDOM_CELL_NEG_P = 0.17;\n/** Fraction of months where every row gets an extra portfolio slump (stable hash per YYYY-MM). */\nconst OMNI_VIZ_RANDOM_MONTH_SLUMP_P = 0.26;\n\n/**\n * Month-of-year shape for **portfolio net adds** (multiplies per-cell raw flow; 1 = neutral).\n * 1–2：increase 逐渐变大；3–5：decrease 逐渐减小（跌幅逐月缓和）；6–8：increase 逐渐减小（增幅逐月减弱）；\n * 9–10：decrease 逐渐减小；11–12：increase。\n */\nfunction narrativeMonthFlowMultiplier(monthNum: number): number {\n    switch (monthNum) {\n        case 1: return 1.06;\n        case 2: return 1.16; // 二月高于一月，increase 逐月变大\n        case 3: return 0.56; // 3–5 下跌，跌幅逐月减小（乘子逐月抬高、靠近 1）\n        case 4: return 0.68;\n        case 5: return 0.80;\n        case 6: return 1.22; // 6–8 上涨，增幅逐月减小（乘子逐月降低，仍大于 1）\n        case 7: return 1.12;\n        case 8: return 1.04;\n        case 9: return 0.58; // 9–10 下跌，跌幅逐月减小\n        case 10: return 0.74;\n        case 11: return 1.08; // 11–12 increase\n        case 12: return 1.14;\n        default: return 1;\n    }\n}\n\nconst GAME_TYPE_BY_GAME: Record<(typeof OMNI_VIZ_GAME_ORDER)[number], (typeof OMNI_VIZ_GAME_TYPES)[number]> = {\n    'Starforge Tactics': 'PC / Client',\n    'Neon Drift 2049': 'Console',\n    'Pocket Kingdoms': 'Mobile Casual',\n    'Azure Legends': 'Cross-platform',\n    'Dustwind Arena': 'PC / Client',\n    'Circuit Breakers': 'Console',\n    'Moonlit Odyssey': 'Cross-platform',\n    'Granite & Glyphs': 'PC / Client',\n    'Velvet Racing Club': 'Console',\n    'Echoes of Athera': 'Mobile Midcore',\n    'Snack Stack Saga': 'Mobile Casual',\n    'Ironbound Front': 'Mobile Midcore',\n    'Sakura Stage Live': 'Mobile Casual',\n    'Deepline Submarine': 'Web / Mini-game',\n    'Pixel Farmers Co-op': 'Web / Mini-game',\n    'Void Choir Online': 'PC / Client',\n    'Metro Hustle': 'Mobile Midcore',\n    'Coral Reef Builder': 'Mobile Casual',\n    'Blade Symphony X': 'Console',\n    'Quiet Hours VR': 'PC / Client',\n    'Turbo Kart Universe': 'Cross-platform',\n    'Guildfall Chronicles': 'Mobile Midcore',\n    'Match-3 Museum': 'Mobile Casual',\n    'Northwind Survival': 'Cross-platform',\n};\n\nfunction stable01(key: string): number {\n    let h = 2166136261;\n    for (let i = 0; i < key.length; i += 1) {\n        h ^= key.charCodeAt(i);\n        h = Math.imul(h, 16777619);\n    }\n    return (h >>> 0) / 2 ** 32;\n}\n\nfunction regionScale(region: (typeof OMNI_VIZ_REGIONS)[number]): number {\n    switch (region) {\n        case 'N': return 1.22;\n        case 'E': return 1.15;\n        case 'S': return 0.95;\n        case 'W': return 0.78;\n        default: return 1;\n    }\n}\n\nfunction gamePopularity(game: (typeof OMNI_VIZ_GAME_ORDER)[number]): number {\n    const u = stable01(`pop|${game}`);\n    return 0.55 + u * 0.95;\n}\n\nfunction buildRows(): OmniVizRow[] {\n    const out: OmniVizRow[] = [];\n    const stock = new Map<string, number>();\n\n    for (const game of OMNI_VIZ_GAME_ORDER) {\n        const gameType = GAME_TYPE_BY_GAME[game];\n        const pop = gamePopularity(game);\n        for (const region of OMNI_VIZ_REGIONS) {\n            const k = `${game}\\0${region}`;\n            const u0 = stable01(`base|${k}`);\n            const baseMau = Math.round(\n                (9000 + u0 * 52000) * pop * regionScale(region) * OMNI_VIZ_STOCK_SCALE,\n            );\n            stock.set(k, baseMau);\n        }\n    }\n\n    for (const period of OMNI_VIZ_MONTHS) {\n        const monthNum = Number(period.slice(5, 7));\n        const narrative = narrativeMonthFlowMultiplier(monthNum);\n\n        for (const game of OMNI_VIZ_GAME_ORDER) {\n            const gameType = GAME_TYPE_BY_GAME[game];\n            const pop = gamePopularity(game);\n            for (const region of OMNI_VIZ_REGIONS) {\n                const k = `${game}\\0${region}`;\n                const keyNu = `${period}|${k}`;\n                const u = stable01(keyNu);\n                const u2 = stable01(`nu2|${keyNu}`);\n                const uVol = stable01(`vol|${keyNu}`);\n\n                // Wider baseline swing; seasonality amplified.\n                const rawFlow =\n                    (-350 + u * 5200)\n                    * pop\n                    * regionScale(region)\n                    * narrative\n                    * (gameType.includes('Mobile') ? 1.1 : gameType.includes('Web') ? 0.82 : 1);\n\n                // Per-cell volatility burst: dull months vs hot months (deterministic).\n                const vol = uVol < 0.1 ? 0.38 + u * 0.22 : uVol > 0.9 ? 1.55 + u * 0.95 : 0.62 + u2 * 1.05;\n\n                let newUsers = Math.round(rawFlow * vol - 250);\n\n                // Severe churn / outage-style months\n                if (u2 < 0.065) {\n                    newUsers -= Math.round(2200 + u * 11000);\n                }\n                // Launch-hype / campaign spike months\n                if (u2 > 0.935) {\n                    newUsers += Math.round(3200 + u * 14000);\n                }\n\n                newUsers += Math.round((narrative - 1) * OMNI_VIZ_NARRATIVE_ANCHOR_PER_UNIT);\n\n                // Random-style negatives on any month (not only narrative below 1): churn / campaign end / noise.\n                if (stable01(`cellNeg|${keyNu}`) < OMNI_VIZ_RANDOM_CELL_NEG_P) {\n                    newUsers -= Math.round(420 + stable01(`cellNegAmt|${keyNu}`) * 5200);\n                }\n                if (stable01(`monthSlump|${period}`) < OMNI_VIZ_RANDOM_MONTH_SLUMP_P) {\n                    newUsers -= Math.round(580 + stable01(`monthSlumpAmt|${period}`) * 3600);\n                }\n\n                const prev = stock.get(k) ?? 0;\n                const next = Math.max(OMNI_VIZ_MAU_FLOOR, prev + newUsers);\n                const actualDelta = next - prev;\n                stock.set(k, next);\n\n                out.push({\n                    period,\n                    game,\n                    gameType,\n                    newUsers: actualDelta,\n                    totalUsers: next,\n                    region,\n                });\n            }\n        }\n    }\n    return out;\n}\n\nexport const OMNI_VIZ_ROWS: OmniVizRow[] = buildRows();\n\nexport const OMNI_VIZ_LEVELS = {\n    games: [...OMNI_VIZ_GAME_ORDER],\n    gameTypes: [...OMNI_VIZ_GAME_TYPES],\n    regions: [...OMNI_VIZ_REGIONS],\n    months: [...OMNI_VIZ_MONTHS],\n    periodStarts: [...OMNI_VIZ_MONTHS],\n} as const;\n\nconst DEC_PERIOD = OMNI_VIZ_MONTHS[OMNI_VIZ_MONTHS.length - 1];\n\nexport function omniVizDetailTable(): Record<string, unknown>[] {\n    return OMNI_VIZ_ROWS.map(r => ({ ...r }));\n}\n\nfunction sortByGame(a: Record<string, unknown>, b: Record<string, unknown>): number {\n    const ia = OMNI_VIZ_GAME_ORDER.indexOf(String(a.game) as (typeof OMNI_VIZ_GAME_ORDER)[number]);\n    const ib = OMNI_VIZ_GAME_ORDER.indexOf(String(b.game) as (typeof OMNI_VIZ_GAME_ORDER)[number]);\n    return (ia < 0 ? 999 : ia) - (ib < 0 ? 999 : ib);\n}\n\n/**\n * Phase 1 — Line: facet region; x = month; y = totalUsers (sum of MAU across games in each gameType bucket); color = gameType.\n * Different apps spike on different months → visible as diverging multi-series lines per panel.\n */\nexport function omniVizLineTable(): Record<string, unknown>[] {\n    const sums = new Map<string, number>();\n    for (const r of OMNI_VIZ_ROWS) {\n        const key = `${r.region}\\0${r.period}\\0${r.gameType}`;\n        sums.set(key, (sums.get(key) ?? 0) + r.totalUsers);\n    }\n    const out: Record<string, unknown>[] = [];\n    for (const [key, totalUsers] of sums) {\n        const [region, period, gameType] = key.split('\\0');\n        out.push({ region, period, gameType, totalUsers });\n    }\n    return out.sort((a, b) =>\n        String(a.region).localeCompare(String(b.region))\n        || String(a.period).localeCompare(String(b.period))\n        || String(a.gameType).localeCompare(String(b.gameType)),\n    );\n}\n\n/**\n * Phase 1 — Grouped bar: x = month; y = sum(totalUsers) across all regions/games; color & group = gameType.\n */\nexport function omniVizGroupedBarRegionGameTypeTable(): Record<string, unknown>[] {\n    const sums = new Map<string, number>();\n    for (const r of OMNI_VIZ_ROWS) {\n        const k = `${r.period}\\0${r.gameType}`;\n        sums.set(k, (sums.get(k) ?? 0) + r.totalUsers);\n    }\n    const out: Record<string, unknown>[] = [];\n    for (const [k, totalUsers] of sums) {\n        const [period, gameType] = k.split('\\0');\n        out.push({ period, gameType, totalUsers });\n    }\n    return out.sort((a, b) =>\n        String(a.period).localeCompare(String(b.period))\n        || String(a.gameType).localeCompare(String(b.gameType)),\n    );\n}\n\n/**\n * Phase 2 — Waterfall: monthly portfolio net newUsers by period.\n *\n * The Waterfall template auto-infers the first period as start, the last period\n * as end, and the middle periods as deltas when no explicit Type column exists.\n */\nexport function omniVizWaterfallTable(): Record<string, unknown>[] {\n    const monthly = new Map<string, number>();\n    for (const r of OMNI_VIZ_ROWS) {\n        monthly.set(r.period, (monthly.get(r.period) ?? 0) + r.newUsers);\n    }\n    return OMNI_VIZ_MONTHS.map(period => ({\n        period,\n        newUsers: monthly.get(period) ?? 0,\n    }));\n}\n\n/**\n * Phase 2 — Heatmap: x = game, y = month, color = newUsers (summed over regions).\n */\nexport function omniVizHeatmapGameMonthTable(): Record<string, unknown>[] {\n    const sums = new Map<string, number>();\n    for (const r of OMNI_VIZ_ROWS) {\n        const k = `${r.game}\\0${r.period}`;\n        sums.set(k, (sums.get(k) ?? 0) + r.newUsers);\n    }\n    const out: Record<string, unknown>[] = [];\n    for (const [k, newUsers] of sums) {\n        const [game, period] = k.split('\\0');\n        out.push({ game, period, newUsers });\n    }\n    return out.sort((a, b) =>\n        sortByGame({ game: a.game }, { game: b.game })\n        || String(a.period).localeCompare(String(b.period)),\n    );\n}\n\n/**\n * Phase 3 — Sunburst (ECharts): region → gameType → game; leaf size = Dec totalUsers (composition).\n */\nexport function omniVizSunburstTable(): Record<string, unknown>[] {\n    const out: Record<string, unknown>[] = [];\n    for (const r of OMNI_VIZ_ROWS) {\n        if (r.period !== DEC_PERIOD) continue;\n        out.push({\n            region: r.region,\n            gameType: r.gameType,\n            game: r.game,\n            totalUsers: r.totalUsers,\n        });\n    }\n    return out.sort((a, b) =>\n        String(a.region).localeCompare(String(b.region))\n        || String(a.gameType).localeCompare(String(b.gameType))\n        || sortByGame({ game: a.game }, { game: b.game }),\n    );\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Omni game-ops gallery — three-phase narrative (overview → change → composition).\n * TripleChart: Vega-Lite + ECharts + Chart.js. Sunburst is ECharts-first (no native VL sunburst).\n */\n\nimport { Type } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport type { SemanticAnnotation } from '../core/field-semantics';\nimport {\n    OMNI_VIZ_LEVELS,\n    omniVizGroupedBarRegionGameTypeTable,\n    omniVizHeatmapGameMonthTable,\n    omniVizLineTable,\n    omniVizSunburstTable,\n    omniVizWaterfallTable,\n} from './omni-viz-dataset';\n\nconst META: Record<string, { type: Type; semanticType: string; levels: any[] }> = {\n    period: { type: Type.String, semanticType: 'YearMonth', levels: [...OMNI_VIZ_LEVELS.periodStarts] },\n    game: { type: Type.String, semanticType: 'Category', levels: [...OMNI_VIZ_LEVELS.games] },\n    gameType: { type: Type.String, semanticType: 'Category', levels: [...OMNI_VIZ_LEVELS.gameTypes] },\n    newUsers: { type: Type.Number, semanticType: 'Profit', levels: [] },\n    totalUsers: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n    region: { type: Type.String, semanticType: 'Category', levels: [...OMNI_VIZ_LEVELS.regions] },\n};\n\nconst HEATMAP_NEW_USERS_ANNOTATION: SemanticAnnotation = {\n    /** Signed net flow → diverging color with meaningful zero (see color-decisions). */\n    semanticType: 'Profit',\n};\n\nexport function genOmniVizLineTests(): TestCase[] {\n    const data = omniVizLineTable();\n    return [{\n        title: 'Phase 1 — Line: MAU trend by month × gameType (facet region)',\n        description:\n            'Overview: column = region (N/E/S/W); x = month; y = totalUsers (summed across games in each gameType); color = gameType. '\n            + 'Spikes differ by type (e.g. mobile summer lift vs PC patch months) — compare panels.',\n        tags: ['omni-viz', 'phase-1', 'line', 'facet', 'gallery', 'game-ops'],\n        chartType: 'Line Chart',\n        data,\n        fields: [\n            makeField('period'),\n            makeField('totalUsers'),\n            makeField('gameType'),\n            makeField('region'),\n        ],\n        metadata: {\n            period: META.period,\n            totalUsers: META.totalUsers,\n            gameType: META.gameType,\n            region: META.region,\n        },\n        encodingMap: {\n            column: makeEncodingItem('region'),\n            x: makeEncodingItem('period', { dtype: 'temporal' }),\n            y: makeEncodingItem('totalUsers'),\n            color: makeEncodingItem('gameType'),\n        },\n    }];\n}\n\nexport function genOmniVizGroupedBarTests(): TestCase[] {\n    const data = omniVizGroupedBarRegionGameTypeTable();\n    return [{\n        title: 'Phase 1 — Grouped bar: MAU by month × gameType',\n        description:\n            'Same story, monthly lens: x = month; y = sum(totalUsers) across all regions/games; color = gameType; group = gameType.',\n        tags: ['omni-viz', 'phase-1', 'grouped-bar', 'gallery', 'game-ops'],\n        chartType: 'Grouped Bar Chart',\n        data,\n        fields: [makeField('period'), makeField('totalUsers'), makeField('gameType')],\n        metadata: {\n            period: META.period,\n            totalUsers: META.totalUsers,\n            gameType: META.gameType,\n        },\n        encodingMap: {\n            x: makeEncodingItem('period', { dtype: 'temporal' }),\n            y: makeEncodingItem('totalUsers'),\n            color: makeEncodingItem('gameType'),\n            group: makeEncodingItem('gameType'),\n        },\n    }];\n}\n\nexport function genOmniVizWaterfallTests(): TestCase[] {\n    const data = omniVizWaterfallTable();\n    return [{\n        title: 'Phase 2 — Waterfall: monthly portfolio net newUsers',\n        description:\n            'Change: x = period; y = monthly sum(newUsers) across all games/regions. '\n            + 'No explicit type column: the Waterfall template treats first period as start, last period as end, and middle periods as deltas.',\n        tags: ['omni-viz', 'phase-2', 'waterfall', 'gallery', 'game-ops'],\n        chartType: 'Waterfall Chart',\n        data,\n        fields: [makeField('period'), makeField('newUsers')],\n        metadata: {\n            period: META.period,\n            newUsers: META.newUsers,\n        },\n        encodingMap: {\n            x: makeEncodingItem('period', { dtype: 'temporal' }),\n            y: makeEncodingItem('newUsers'),\n        },\n    }];\n}\n\nexport function genOmniVizHeatmapTests(): TestCase[] {\n    const data = omniVizHeatmapGameMonthTable();\n    return [{\n        title: 'Phase 2 — Heatmap: net newUsers by game × month',\n        description:\n            'Change: x = game; y = month; color = newUsers (net adds summed over regions). '\n            + 'Diverging scale centered at 0 (red/blue). Vega-Lite rect + ECharts heatmap + Chart.js row.',\n        tags: ['omni-viz', 'phase-2', 'heatmap', 'gallery', 'game-ops'],\n        chartType: 'Heatmap',\n        data,\n        fields: [makeField('game'), makeField('period'), makeField('newUsers')],\n        metadata: {\n            game: META.game,\n            period: META.period,\n            newUsers: META.newUsers,\n        },\n        encodingMap: {\n            x: makeEncodingItem('period', { dtype: 'temporal' }),\n            y: makeEncodingItem('game'),\n            color: makeEncodingItem('newUsers'),\n        },\n        chartProperties: { colorScheme: 'redblue' },\n        semanticAnnotations: { newUsers: HEATMAP_NEW_USERS_ANNOTATION },\n    }];\n}\n\nexport function genOmniVizSunburstTests(): TestCase[] {\n    const data = omniVizSunburstTable();\n    return [{\n        title: 'Phase 3 — Sunburst: MAU composition (region → gameType → game)',\n        description:\n            'Composition: hierarchy region → gameType → game; size = totalUsers on the latest month (Dec). '\n            + 'Vega-Lite has no first-class sunburst; ECharts (middle panel) carries this view. '\n            + 'Left: VL assembly fallback; right: Chart.js where supported.',\n        tags: ['omni-viz', 'phase-3', 'sunburst', 'echarts', 'gallery', 'game-ops'],\n        chartType: 'Sunburst Chart',\n        data,\n        fields: [makeField('region'), makeField('gameType'), makeField('game'), makeField('totalUsers')],\n        metadata: {\n            region: META.region,\n            gameType: META.gameType,\n            game: META.game,\n            totalUsers: META.totalUsers,\n        },\n        encodingMap: {\n            color: makeEncodingItem('region'),\n            group: makeEncodingItem('gameType'),\n            detail: makeEncodingItem('game'),\n            size: makeEncodingItem('totalUsers'),\n        },\n    }];\n}\n\n/** Keys in `TEST_GENERATORS` for the Omni gallery (charts only; data table chip is separate). */\nexport const GALLERY_OMNI_VIZ_GENERATOR_KEYS = [\n    'Omni: Line',\n    'Omni: Grouped Bar',\n    'Omni: Waterfall',\n    'Omni: Heatmap',\n    'Omni: Sunburst',\n] as const;\n\nexport const OMNI_VIZ_GALLERY_DATA_TABLE_ENTRY = 'Omni: Data Table Preview' as const;\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Static Series Gallery Examples\n *\n * Demonstrates the static series feature (array-valued encodings) across\n * multiple chart types and data scenarios. These examples use wide-format\n * data where multiple columns represent different measures.\n */\n\nimport type { ChartAssemblyInput } from '../core/types';\n\n// ---------------------------------------------------------------------------\n// Datasets (wide-format)\n// ---------------------------------------------------------------------------\n\n/** Monthly sales performance — two measure columns */\nconst MONTHLY_SALES_DATA = [\n    { Month: '2024-01-01', Revenue: 125000, Expenses: 89000 },\n    { Month: '2024-02-01', Revenue: 138000, Expenses: 92000 },\n    { Month: '2024-03-01', Revenue: 155000, Expenses: 95000 },\n    { Month: '2024-04-01', Revenue: 142000, Expenses: 88000 },\n    { Month: '2024-05-01', Revenue: 168000, Expenses: 97000 },\n    { Month: '2024-06-01', Revenue: 175000, Expenses: 101000 },\n    { Month: '2024-07-01', Revenue: 162000, Expenses: 98000 },\n    { Month: '2024-08-01', Revenue: 189000, Expenses: 105000 },\n    { Month: '2024-09-01', Revenue: 195000, Expenses: 108000 },\n    { Month: '2024-10-01', Revenue: 210000, Expenses: 112000 },\n    { Month: '2024-11-01', Revenue: 225000, Expenses: 118000 },\n    { Month: '2024-12-01', Revenue: 248000, Expenses: 125000 },\n];\n\n/** Quarterly KPIs — three measure columns */\nconst QUARTERLY_KPIS_DATA = [\n    { Quarter: 'Q1 2023', NPS: 72, CSAT: 85, CES: 68 },\n    { Quarter: 'Q2 2023', NPS: 75, CSAT: 87, CES: 71 },\n    { Quarter: 'Q3 2023', NPS: 68, CSAT: 82, CES: 65 },\n    { Quarter: 'Q4 2023', NPS: 79, CSAT: 89, CES: 74 },\n    { Quarter: 'Q1 2024', NPS: 81, CSAT: 91, CES: 77 },\n    { Quarter: 'Q2 2024', NPS: 84, CSAT: 90, CES: 79 },\n    { Quarter: 'Q3 2024', NPS: 82, CSAT: 92, CES: 80 },\n    { Quarter: 'Q4 2024', NPS: 88, CSAT: 94, CES: 83 },\n];\n\n/** Weather comparison — temperatures from multiple cities */\nconst WEATHER_DATA = [\n    { Date: '2024-06-01', Seattle: 18, Portland: 20, SanFrancisco: 16, LosAngeles: 24 },\n    { Date: '2024-06-15', Seattle: 21, Portland: 23, SanFrancisco: 17, LosAngeles: 26 },\n    { Date: '2024-07-01', Seattle: 24, Portland: 27, SanFrancisco: 18, LosAngeles: 28 },\n    { Date: '2024-07-15', Seattle: 27, Portland: 30, SanFrancisco: 19, LosAngeles: 30 },\n    { Date: '2024-08-01', Seattle: 26, Portland: 29, SanFrancisco: 18, LosAngeles: 29 },\n    { Date: '2024-08-15', Seattle: 25, Portland: 28, SanFrancisco: 18, LosAngeles: 28 },\n    { Date: '2024-09-01', Seattle: 22, Portland: 25, SanFrancisco: 19, LosAngeles: 27 },\n    { Date: '2024-09-15', Seattle: 19, Portland: 21, SanFrancisco: 18, LosAngeles: 25 },\n];\n\n/** Stock comparison — closing prices for tech companies */\nconst STOCK_DATA = [\n    { Day: '2024-11-01', MSFT: 375, GOOG: 140, AMZN: 185 },\n    { Day: '2024-11-04', MSFT: 378, GOOG: 142, AMZN: 188 },\n    { Day: '2024-11-05', MSFT: 382, GOOG: 138, AMZN: 190 },\n    { Day: '2024-11-06', MSFT: 380, GOOG: 141, AMZN: 187 },\n    { Day: '2024-11-07', MSFT: 385, GOOG: 145, AMZN: 192 },\n    { Day: '2024-11-08', MSFT: 390, GOOG: 148, AMZN: 195 },\n    { Day: '2024-11-11', MSFT: 388, GOOG: 146, AMZN: 193 },\n    { Day: '2024-11-12', MSFT: 392, GOOG: 150, AMZN: 198 },\n    { Day: '2024-11-13', MSFT: 395, GOOG: 152, AMZN: 200 },\n    { Day: '2024-11-14', MSFT: 398, GOOG: 149, AMZN: 197 },\n    { Day: '2024-11-15', MSFT: 402, GOOG: 155, AMZN: 205 },\n];\n\n/** Annual metrics — area chart use case */\nconst ANNUAL_METRICS_DATA = [\n    { Year: '2019', OnlineRevenue: 45000, InStoreRevenue: 120000, WholesaleRevenue: 78000 },\n    { Year: '2020', OnlineRevenue: 85000, InStoreRevenue: 72000, WholesaleRevenue: 65000 },\n    { Year: '2021', OnlineRevenue: 110000, InStoreRevenue: 95000, WholesaleRevenue: 82000 },\n    { Year: '2022', OnlineRevenue: 135000, InStoreRevenue: 108000, WholesaleRevenue: 90000 },\n    { Year: '2023', OnlineRevenue: 160000, InStoreRevenue: 115000, WholesaleRevenue: 95000 },\n    { Year: '2024', OnlineRevenue: 190000, InStoreRevenue: 120000, WholesaleRevenue: 100000 },\n];\n\n// ---------------------------------------------------------------------------\n// Gallery examples — each is a ready-to-use ChartAssemblyInput\n// ---------------------------------------------------------------------------\n\n/** Simple two-series line chart — Revenue vs Expenses */\nexport const STATIC_SERIES_LINE_BASIC: ChartAssemblyInput = {\n    data: { values: MONTHLY_SALES_DATA },\n    semantic_types: {\n        Month: 'Date',\n        Revenue: 'Quantity',\n        Expenses: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Line Chart',\n        encodings: {\n            x: { field: 'Month' },\n            y: [{ field: 'Revenue' }, { field: 'Expenses' }],\n        },\n        baseSize: { width: 600, height: 380 },\n    },\n    field_display_names: {\n        Revenue: 'Revenue ($)',\n        Expenses: 'Expenses ($)',\n    },\n};\n\n/** Three-metric KPI dashboard line chart */\nexport const STATIC_SERIES_LINE_THREE_KPIS: ChartAssemblyInput = {\n    data: { values: QUARTERLY_KPIS_DATA },\n    semantic_types: {\n        Quarter: 'Category',\n        NPS: 'Quantity',\n        CSAT: 'Quantity',\n        CES: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Line Chart',\n        encodings: {\n            x: { field: 'Quarter' },\n            y: [{ field: 'NPS' }, { field: 'CSAT' }, { field: 'CES' }],\n        },\n        baseSize: { width: 600, height: 380 },\n    },\n    field_display_names: {\n        NPS: 'Net Promoter Score',\n        CSAT: 'Customer Satisfaction',\n        CES: 'Customer Effort Score',\n    },\n};\n\n/** Four-city temperature comparison (many series) */\nexport const STATIC_SERIES_LINE_MANY_SERIES: ChartAssemblyInput = {\n    data: { values: WEATHER_DATA },\n    semantic_types: {\n        Date: 'Date',\n        Seattle: 'Quantity',\n        Portland: 'Quantity',\n        SanFrancisco: 'Quantity',\n        LosAngeles: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Line Chart',\n        encodings: {\n            x: { field: 'Date' },\n            y: [\n                { field: 'Seattle' },\n                { field: 'Portland' },\n                { field: 'SanFrancisco' },\n                { field: 'LosAngeles' },\n            ],\n        },\n        baseSize: { width: 650, height: 400 },\n    },\n    field_display_names: {\n        SanFrancisco: 'San Francisco',\n        LosAngeles: 'Los Angeles',\n    },\n};\n\n/** Stock price comparison — dotted line variant */\nexport const STATIC_SERIES_DOTTED_LINE_STOCKS: ChartAssemblyInput = {\n    data: { values: STOCK_DATA },\n    semantic_types: {\n        Day: 'Date',\n        MSFT: 'Quantity',\n        GOOG: 'Quantity',\n        AMZN: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Dotted Line Chart',\n        encodings: {\n            x: { field: 'Day' },\n            y: [{ field: 'MSFT' }, { field: 'GOOG' }, { field: 'AMZN' }],\n        },\n        baseSize: { width: 600, height: 380 },\n    },\n    field_display_names: {\n        MSFT: 'Microsoft',\n        GOOG: 'Alphabet',\n        AMZN: 'Amazon',\n    },\n};\n\n/** Stacked area chart — revenue channels over time */\nexport const STATIC_SERIES_AREA_STACKED: ChartAssemblyInput = {\n    data: { values: ANNUAL_METRICS_DATA },\n    semantic_types: {\n        Year: 'Year',\n        OnlineRevenue: 'Quantity',\n        InStoreRevenue: 'Quantity',\n        WholesaleRevenue: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Area Chart',\n        encodings: {\n            x: { field: 'Year' },\n            y: [\n                { field: 'OnlineRevenue' },\n                { field: 'InStoreRevenue' },\n                { field: 'WholesaleRevenue' },\n            ],\n        },\n        baseSize: { width: 600, height: 380 },\n    },\n    field_display_names: {\n        OnlineRevenue: 'Online',\n        InStoreRevenue: 'In-Store',\n        WholesaleRevenue: 'Wholesale',\n    },\n};\n\n/** Scatter plot with static series — Revenue vs Expenses with labeled points */\nexport const STATIC_SERIES_SCATTER: ChartAssemblyInput = {\n    data: { values: MONTHLY_SALES_DATA },\n    semantic_types: {\n        Month: 'Date',\n        Revenue: 'Quantity',\n        Expenses: 'Quantity',\n    },\n    chart_spec: {\n        chartType: 'Scatter Plot',\n        encodings: {\n            x: { field: 'Month' },\n            y: [{ field: 'Revenue' }, { field: 'Expenses' }],\n        },\n        baseSize: { width: 600, height: 380 },\n    },\n};\n\n// ---------------------------------------------------------------------------\n// Collected gallery examples list\n// ---------------------------------------------------------------------------\n\nexport const STATIC_SERIES_GALLERY_EXAMPLES = [\n    { label: 'Revenue vs Expenses (Line)', input: STATIC_SERIES_LINE_BASIC },\n    { label: 'KPI Dashboard (3 metrics)', input: STATIC_SERIES_LINE_THREE_KPIS },\n    { label: 'City Temperatures (4 series)', input: STATIC_SERIES_LINE_MANY_SERIES },\n    { label: 'Stock Comparison (Dotted Line)', input: STATIC_SERIES_DOTTED_LINE_STOCKS },\n    { label: 'Revenue Channels (Stacked Area)', input: STATIC_SERIES_AREA_STACKED },\n    { label: 'Measures as Scatter', input: STATIC_SERIES_SCATTER },\n];\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Fixed regional survey dataset for the Chart Gallery tab.\n * Source columns: season, region, city, percentage, count, attitude, rank\n */\n\nexport interface RegionalSurveyRow {\n    /** Unix timestamp (seconds) */\n    season: number;\n    /** Stable categorical / temporal label for axes */\n    seasonLabel: string;\n    region: string;\n    city: string;\n    /** 0–100 */\n    percentage: number;\n    count: number;\n    attitude: string;\n    rank: number;\n}\n\nfunction labelFromUnixSec(sec: number): string {\n    return new Date(sec * 1000).toISOString().slice(0, 10);\n}\n\n/** Parsed rows (percentages as numbers). */\nexport const REGIONAL_SURVEY_ROWS: RegionalSurveyRow[] = [\n    { season: 1735689600, seasonLabel: labelFromUnixSec(1735689600), region: 'N', city: 'City A', percentage: 85, count: 1250, attitude: 'strongly agree', rank: 1 },\n    { season: 1735689600, seasonLabel: labelFromUnixSec(1735689600), region: 'E', city: 'City B', percentage: 78, count: 2100, attitude: 'agree', rank: 2 },\n    { season: 1735689600, seasonLabel: labelFromUnixSec(1735689600), region: 'S', city: 'City C', percentage: 65, count: 1540, attitude: 'agree', rank: 4 },\n    { season: 1735689600, seasonLabel: labelFromUnixSec(1735689600), region: 'W', city: 'City D', percentage: 42, count: 890, attitude: 'neutral', rank: 8 },\n    { season: 1743465600, seasonLabel: labelFromUnixSec(1743465600), region: 'N', city: 'City E', percentage: 55, count: 920, attitude: 'agree', rank: 6 },\n    { season: 1743465600, seasonLabel: labelFromUnixSec(1743465600), region: 'E', city: 'City F', percentage: 92, count: 1780, attitude: 'strongly agree', rank: 1 },\n    { season: 1743465600, seasonLabel: labelFromUnixSec(1743465600), region: 'S', city: 'City G', percentage: 88, count: 1950, attitude: 'strongly agree', rank: 2 },\n    { season: 1743465600, seasonLabel: labelFromUnixSec(1743465600), region: 'W', city: 'City H', percentage: 30, count: 1100, attitude: 'disagree', rank: 12 },\n    { season: 1751241600, seasonLabel: labelFromUnixSec(1751241600), region: 'N', city: 'City I', percentage: 15, count: 320, attitude: 'strongly disagree', rank: 20 },\n    { season: 1751241600, seasonLabel: labelFromUnixSec(1751241600), region: 'E', city: 'City J', percentage: 60, count: 880, attitude: 'agree', rank: 7 },\n    { season: 1751241600, seasonLabel: labelFromUnixSec(1751241600), region: 'S', city: 'City K', percentage: 72, count: 640, attitude: 'agree', rank: 5 },\n    { season: 1751241600, seasonLabel: labelFromUnixSec(1751241600), region: 'W', city: 'City L', percentage: 48, count: 760, attitude: 'neutral', rank: 9 },\n    { season: 1759017600, seasonLabel: labelFromUnixSec(1759017600), region: 'N', city: 'City M', percentage: 35, count: 540, attitude: 'disagree', rank: 15 },\n    { season: 1759017600, seasonLabel: labelFromUnixSec(1759017600), region: 'E', city: 'City N', percentage: 81, count: 1420, attitude: 'strongly agree', rank: 3 },\n    { season: 1759017600, seasonLabel: labelFromUnixSec(1759017600), region: 'S', city: 'City O', percentage: 58, count: 430, attitude: 'agree', rank: 10 },\n    { season: 1759017600, seasonLabel: labelFromUnixSec(1759017600), region: 'W', city: 'City P', percentage: 66, count: 720, attitude: 'agree', rank: 6 },\n    { season: 1766793600, seasonLabel: labelFromUnixSec(1766793600), region: 'N', city: 'City Q', percentage: 25, count: 310, attitude: 'disagree', rank: 18 },\n    { season: 1766793600, seasonLabel: labelFromUnixSec(1766793600), region: 'E', city: 'City R', percentage: 70, count: 980, attitude: 'agree', rank: 5 },\n    { season: 1766793600, seasonLabel: labelFromUnixSec(1766793600), region: 'S', city: 'City S', percentage: 44, count: 520, attitude: 'neutral', rank: 11 },\n    { season: 1766793600, seasonLabel: labelFromUnixSec(1766793600), region: 'W', city: 'City T', percentage: 20, count: 150, attitude: 'strongly disagree', rank: 19 },\n];\n\nconst SEASON_LABELS = [...new Set(REGIONAL_SURVEY_ROWS.map(r => r.seasonLabel))].sort();\nconst REGIONS = ['N', 'E', 'S', 'W'] as const;\nconst CITIES = [...new Set(REGIONAL_SURVEY_ROWS.map(r => r.city))];\nconst ATTITUDES = [...new Set(REGIONAL_SURVEY_ROWS.map(r => r.attitude))];\n\n/** Table shape expected by assemblers (`Record<string, unknown>[]`). */\nexport function regionalSurveyTable(): Record<string, unknown>[] {\n    return REGIONAL_SURVEY_ROWS.map(r => ({ ...r }));\n}\n\nexport const REGIONAL_SURVEY_AXIS_LEVELS = {\n    seasonLabels: SEASON_LABELS,\n    regions: [...REGIONS],\n    cities: CITIES,\n    attitudes: ATTITUDES,\n} as const;\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gallery test cases: regional survey dataset × each Chart.js–aligned chart family.\n * Rendered with Vega-Lite + ECharts + Chart.js (TripleChart).\n */\n\nimport { Type } from '../test-data/df-types';\nimport { TestCase, makeField, makeEncodingItem } from '../test-data/types';\nimport {\n    REGIONAL_SURVEY_ROWS,\n    regionalSurveyTable,\n    REGIONAL_SURVEY_AXIS_LEVELS,\n} from './regional-survey-data';\n\nconst META_BASE: Record<string, { type: Type; semanticType: string; levels: any[] }> = {\n    seasonLabel: {\n        type: Type.String,\n        semanticType: 'Date',\n        levels: [...REGIONAL_SURVEY_AXIS_LEVELS.seasonLabels],\n    },\n    region: {\n        type: Type.String,\n        semanticType: 'Category',\n        levels: [...REGIONAL_SURVEY_AXIS_LEVELS.regions],\n    },\n    city: {\n        type: Type.String,\n        semanticType: 'Category',\n        levels: [...REGIONAL_SURVEY_AXIS_LEVELS.cities],\n    },\n    percentage: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n    count: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n    attitude: {\n        type: Type.String,\n        semanticType: 'Category',\n        levels: [...REGIONAL_SURVEY_AXIS_LEVELS.attitudes],\n    },\n    rank: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n};\n\nfunction radarByRegionWave(): Record<string, unknown>[] {\n    return REGIONAL_SURVEY_ROWS.map(r => ({\n        Wave: r.seasonLabel,\n        Score: r.percentage,\n        Region: r.region,\n    }));\n}\n\nfunction pieByRegionTotals(): Record<string, unknown>[] {\n    const sums = new Map<string, number>();\n    for (const r of REGIONAL_SURVEY_ROWS) {\n        sums.set(r.region, (sums.get(r.region) ?? 0) + r.count);\n    }\n    return REGIONAL_SURVEY_AXIS_LEVELS.regions.map(region => ({\n        Region: region,\n        Total: sums.get(region) ?? 0,\n    }));\n}\n\nfunction roseByRegionAvgPct(): Record<string, unknown>[] {\n    const acc = new Map<string, { sum: number; n: number }>();\n    for (const r of REGIONAL_SURVEY_ROWS) {\n        const cur = acc.get(r.region) ?? { sum: 0, n: 0 };\n        cur.sum += r.percentage;\n        cur.n += 1;\n        acc.set(r.region, cur);\n    }\n    return REGIONAL_SURVEY_AXIS_LEVELS.regions.map(region => {\n        const cur = acc.get(region)!;\n        return { Direction: region, AvgPct: Math.round((cur.sum / cur.n) * 10) / 10 };\n    });\n}\n\nexport function genGalleryRegionalSurveyScatterTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Scatter — count × % (by region)',\n        description: 'Regional survey: sample size vs approval %, colored by compass region.',\n        tags: ['gallery', 'survey', 'scatter'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('count'), makeField('percentage'), makeField('region')],\n        metadata: {\n            count: META_BASE.count,\n            percentage: META_BASE.percentage,\n            region: META_BASE.region,\n        },\n        encodingMap: {\n            x: makeEncodingItem('count'),\n            y: makeEncodingItem('percentage'),\n            color: makeEncodingItem('region'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyLineTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Line — % over survey waves (by region)',\n        description: 'Multi-series line: x = wave date, y = %, color = region.',\n        tags: ['gallery', 'survey', 'line', 'multi-series'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('seasonLabel'), makeField('percentage'), makeField('region')],\n        metadata: {\n            seasonLabel: META_BASE.seasonLabel,\n            percentage: META_BASE.percentage,\n            region: META_BASE.region,\n        },\n        encodingMap: {\n            x: makeEncodingItem('seasonLabel'),\n            y: makeEncodingItem('percentage'),\n            color: makeEncodingItem('region'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyBarTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Bar — city × count',\n        description: 'One bar per city in the panel.',\n        tags: ['gallery', 'survey', 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('city'), makeField('count')],\n        metadata: { city: META_BASE.city, count: META_BASE.count },\n        encodingMap: { x: makeEncodingItem('city'), y: makeEncodingItem('count') },\n    }];\n}\n\nexport function genGalleryRegionalSurveyStackedBarTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Stacked bar — wave × count (by region)',\n        description: 'Stacked counts per survey wave, colored by region.',\n        tags: ['gallery', 'survey', 'stacked-bar'],\n        chartType: 'Stacked Bar Chart',\n        data,\n        fields: [makeField('seasonLabel'), makeField('count'), makeField('region')],\n        metadata: {\n            seasonLabel: META_BASE.seasonLabel,\n            count: META_BASE.count,\n            region: META_BASE.region,\n        },\n        encodingMap: {\n            x: makeEncodingItem('seasonLabel'),\n            y: makeEncodingItem('count'),\n            color: makeEncodingItem('region'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyGroupedBarTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Grouped bar — region × % (by wave)',\n        description: 'Side-by-side bars: region on x, % on y, grouped by wave.',\n        tags: ['gallery', 'survey', 'grouped-bar'],\n        chartType: 'Grouped Bar Chart',\n        data,\n        fields: [makeField('region'), makeField('percentage'), makeField('seasonLabel')],\n        metadata: {\n            region: META_BASE.region,\n            percentage: META_BASE.percentage,\n            seasonLabel: META_BASE.seasonLabel,\n        },\n        encodingMap: {\n            x: makeEncodingItem('region'),\n            y: makeEncodingItem('percentage'),\n            group: makeEncodingItem('seasonLabel'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyAreaTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Area — count over waves (by region)',\n        description: 'Stacked area: survey wave vs count, colored by region.',\n        tags: ['gallery', 'survey', 'area', 'stacked'],\n        chartType: 'Area Chart',\n        data,\n        fields: [makeField('seasonLabel'), makeField('count'), makeField('region')],\n        metadata: {\n            seasonLabel: META_BASE.seasonLabel,\n            count: META_BASE.count,\n            region: META_BASE.region,\n        },\n        encodingMap: {\n            x: makeEncodingItem('seasonLabel'),\n            y: makeEncodingItem('count'),\n            color: makeEncodingItem('region'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyPieTests(): TestCase[] {\n    const data = pieByRegionTotals();\n    return [{\n        title: 'Flint: Pie — total count by region',\n        description: 'Aggregated respondent counts summed across all waves.',\n        tags: ['gallery', 'survey', 'pie'],\n        chartType: 'Pie Chart',\n        data,\n        fields: [makeField('Region'), makeField('Total')],\n        metadata: {\n            Region: META_BASE.region,\n            Total: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n        },\n        encodingMap: { color: makeEncodingItem('Region'), size: makeEncodingItem('Total') },\n    }];\n}\n\nexport function genGalleryRegionalSurveyHistogramTests(): TestCase[] {\n    const data = regionalSurveyTable();\n    return [{\n        title: 'Flint: Histogram — distribution of %',\n        description: 'Approval percentage across all city-wave rows.',\n        tags: ['gallery', 'survey', 'histogram'],\n        chartType: 'Histogram',\n        data,\n        fields: [makeField('percentage')],\n        metadata: { percentage: META_BASE.percentage },\n        encodingMap: { x: makeEncodingItem('percentage') },\n    }];\n}\n\nexport function genGalleryRegionalSurveyRadarTests(): TestCase[] {\n    const data = radarByRegionWave();\n    const waves = REGIONAL_SURVEY_AXIS_LEVELS.seasonLabels;\n    return [{\n        title: 'Flint: Radar — regions × waves (% )',\n        description: 'Each region is a series; each spoke is a survey wave.',\n        tags: ['gallery', 'survey', 'radar'],\n        chartType: 'Radar Chart',\n        data,\n        fields: [makeField('Wave'), makeField('Score'), makeField('Region')],\n        metadata: {\n            Wave: { type: Type.String, semanticType: 'Date', levels: [...waves] },\n            Score: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n            Region: META_BASE.region,\n        },\n        encodingMap: {\n            x: makeEncodingItem('Wave'),\n            y: makeEncodingItem('Score'),\n            color: makeEncodingItem('Region'),\n        },\n    }];\n}\n\nexport function genGalleryRegionalSurveyRoseTests(): TestCase[] {\n    const data = roseByRegionAvgPct();\n    return [{\n        title: 'Flint: Rose — mean % by region',\n        description: 'Polar bars: N/E/S/W with average approval % across waves.',\n        tags: ['gallery', 'survey', 'rose'],\n        chartType: 'Rose Chart',\n        data,\n        fields: [makeField('Direction'), makeField('AvgPct')],\n        metadata: {\n            Direction: { type: Type.String, semanticType: 'Category', levels: [...REGIONAL_SURVEY_AXIS_LEVELS.regions] },\n            AvgPct: { type: Type.Number, semanticType: 'Percentage', levels: [] },\n        },\n        encodingMap: { x: makeEncodingItem('Direction'), y: makeEncodingItem('AvgPct') },\n        chartProperties: { alignment: 'center' },\n    }];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Gallery test cases for BI-style chart prototypes (Vega-Lite only).\n *\n * KPI Card contract\n * ─────────────────\n * One row per tile. Channels:\n *   - `metric` (required) → caption\n *   - `value`  (required) → big number (numeric or pre-formatted string)\n *   - `goal`   (optional) → comparison value (numeric or string)\n *\n * Formatting is delegated to upstream data transformation. The template\n * applies only a trivial `toLocaleString` default to numeric values.\n * For currency / SI / percent formatting, format the column upstream\n * and pass strings.\n *\n * Progress bar appears when both `value` and `goal` are finite numbers.\n * Otherwise the goal renders as a small \"Goal: <goal>\" line.\n */\n\nimport { Type } from '../test-data/df-types';\nimport { TestCase, makeField, makeEncodingItem } from '../test-data/types';\nimport { realKpiCases } from '../test-data/real-world-tests';\n\nexport function genGalleryKpiCardTests(): TestCase[] {\n    return [\n        // ── Single tile, numeric ──────────────────────────────────────────\n        {\n            title: 'KPI: Single tile (Numeric)',\n            description:\n                'One row, only `value` bound. Caption defaults to the value field name. ' +\n                'Numeric value rendered via `toLocaleString`.',\n            tags: ['gallery', 'bi', 'kpi'],\n            chartType: 'KPI Card',\n            data: [{ Revenue: 1_184_320 }],\n            fields: [makeField('Revenue')],\n            metadata: {\n                Revenue: { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: { value: makeEncodingItem('Revenue') },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Single tile, pre-formatted string ─────────────────────────────\n        {\n            title: 'KPI: Single tile (pre-formatted string)',\n            description:\n                'Agent formatted upstream. Template renders verbatim.',\n            tags: ['gallery', 'bi', 'kpi', 'preformatted'],\n            chartType: 'KPI Card',\n            data: [{ Metric: 'Revenue', Display: '$1.18M' }],\n            fields: [makeField('Metric'), makeField('Display')],\n            metadata: {\n                Metric:  { type: Type.String, semanticType: 'Category', levels: [] },\n                Display: { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Display'),\n            },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Multi-tile, numeric ───────────────────────────────────────────\n        {\n            title: 'KPI: Multi-tile (Numeric quantities)',\n            description:\n                'Four tiles, plain numeric values with default `toLocaleString`.',\n            tags: ['gallery', 'bi', 'kpi', 'multi-metric'],\n            chartType: 'KPI Card',\n            data: [\n                { Metric: 'Active Users',  Value: 12_402 },\n                { Metric: 'New Signups',   Value:  1_182 },\n                { Metric: 'Churn',         Value:    214 },\n                { Metric: 'Power Users',   Value:    876 },\n            ],\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value:  { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Value'),\n            },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Multi-tile, pre-formatted heterogeneous ───────────────────────\n        {\n            title: 'KPI: Multi-tile (heterogeneous, pre-formatted)',\n            description:\n                'Per-tile units handled by the agent formatting each `Value` ' +\n                'upstream. Template renders verbatim.',\n            tags: ['gallery', 'bi', 'kpi', 'multi-metric', 'preformatted'],\n            chartType: 'KPI Card',\n            data: [\n                { Metric: 'Revenue',  Value: '$1.23M'  },\n                { Metric: 'Orders',   Value: '5,682'   },\n                { Metric: 'Avg Cart', Value: '$217.45' },\n                { Metric: 'Refunds',  Value: '312'     },\n            ],\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value:  { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Value'),\n            },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Multi-tile with numeric goal (progress bar) ───────────────────\n        {\n            title: 'KPI: With goal (progress bar)',\n            description:\n                'Both value and goal are numeric → small \"X% of goal\" line + ' +\n                'progress bar beneath the big number.',\n            tags: ['gallery', 'bi', 'kpi', 'goal', 'progress'],\n            chartType: 'KPI Card',\n            data: [\n                { Metric: 'Q1 Revenue', Value: 1_184_320, Goal: 1_500_000 },\n                { Metric: 'Signups',    Value:     1_182, Goal:     2_000 },\n                { Metric: 'NPS',        Value:        47, Goal:        60 },\n                { Metric: 'Stretch',    Value:       128, Goal:       100 }, // overshoot\n            ],\n            fields: [makeField('Metric'), makeField('Value'), makeField('Goal')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value:  { type: Type.Number, semanticType: 'Quantity', levels: [] },\n                Goal:   { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Value'),\n                goal:   makeEncodingItem('Goal'),\n            },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Multi-tile with string goal (no progress bar) ─────────────────\n        {\n            title: 'KPI: With goal (string, no progress bar)',\n            description:\n                'String value or string goal → progress bar suppressed; ' +\n                'goal renders as a \"Goal: …\" line.',\n            tags: ['gallery', 'bi', 'kpi', 'goal'],\n            chartType: 'KPI Card',\n            data: [\n                { Metric: 'Revenue',  Value: '$1.18M', Goal: '$1.50M' },\n                { Metric: 'Headcount',Value: '142',    Goal: '160'    },\n            ],\n            fields: [makeField('Metric'), makeField('Value'), makeField('Goal')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value:  { type: Type.String, semanticType: 'Category', levels: [] },\n                Goal:   { type: Type.String, semanticType: 'Category', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Value'),\n                goal:   makeEncodingItem('Goal'),\n            },\n            chartProperties: { layout: 'horizontal' },\n        },\n\n        // ── Vertical layout ───────────────────────────────────────────────\n        {\n            title: 'KPI: Vertical layout',\n            description: 'Same data as multi-tile numeric, stacked vertically.',\n            tags: ['gallery', 'bi', 'kpi', 'multi-metric', 'vertical'],\n            chartType: 'KPI Card',\n            data: [\n                { Metric: 'Active Users',  Value: 12_402 },\n                { Metric: 'New Signups',   Value:  1_182 },\n                { Metric: 'Churn',         Value:    214 },\n                { Metric: 'Power Users',   Value:    876 },\n            ],\n            fields: [makeField('Metric'), makeField('Value')],\n            metadata: {\n                Metric: { type: Type.String, semanticType: 'Category', levels: [] },\n                Value:  { type: Type.Number, semanticType: 'Quantity', levels: [] },\n            },\n            encodingMap: {\n                metric: makeEncodingItem('Metric'),\n                value:  makeEncodingItem('Value'),\n            },\n            chartProperties: { layout: 'vertical' },\n        },\n        ...realKpiCases(),\n    ];\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Curated *faceted* (small-multiples) examples for the main chart types.\n *\n * Unlike the exhaustive stress cases in `facet-tests.ts`, these are a single,\n * clean, realistic column-faceted example per main chart type (bar, line,\n * scatter, area). They are appended to the corresponding gallery generators so\n * every main chart type advertises a small-multiples variant, and they are\n * pinned by `selectVariants` so the faceted tile always appears on the wall.\n */\n\nimport { Type } from './df-types';\nimport { Channel, EncodingItem } from './df-types';\nimport { TestCase, makeField, makeEncodingItem } from './types';\nimport { seededRandom } from './generators';\n\n/** Shared tag set so the gallery can detect + pin these examples. */\nconst FACET_TAGS = ['facet', 'gallery-facet', 'column'];\n\nfunction meta(type: Type, semanticType: string, levels: any[] = []) {\n    return { type, semanticType, levels };\n}\n\n/**\n * Column-faceted bar — sales by segment, one small panel per region.\n * Six regions laid out in a fixed 2-column grid (`facetColumns: 2`) → a 2×3\n * small-multiples grid, so the gallery advertises faceting *and* how Flint\n * shrinks each sub-panel to fit.\n */\nexport function galleryFacetBarExample(): TestCase {\n    const rand = seededRandom(4201);\n    const regions = ['North', 'Central', 'South', 'East', 'West', 'Pacific'];\n    const segments = ['Consumer', 'Corporate', 'Home Office', 'Reseller'];\n    const data: any[] = [];\n    for (const region of regions) {\n        for (const segment of segments) {\n            data.push({ Segment: segment, Sales: Math.round(40 + rand() * 360), Region: region });\n        }\n    }\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n        x: makeEncodingItem('Segment'),\n        y: makeEncodingItem('Sales'),\n        column: makeEncodingItem('Region'),\n    };\n    return {\n        title: 'Sales by segment, faceted by region',\n        description: 'Small-multiples bar chart — one panel per region in a 2-column grid (column facet).',\n        tags: [...FACET_TAGS, 'bar'],\n        chartType: 'Bar Chart',\n        data,\n        fields: [makeField('Segment'), makeField('Sales'), makeField('Region')],\n        metadata: {\n            Segment: meta(Type.String, 'Category', segments),\n            Sales: meta(Type.Number, 'Amount'),\n            Region: meta(Type.String, 'Category', regions),\n        },\n        encodingMap,\n        chartProperties: { facetColumns: 2 },\n    };\n}\n\n/**\n * Wrap-faceted line — full-year (12-month) revenue trend, one panel per region.\n * Ten regions wrap into a 5×2 small-multiples grid rather than a single\n * side-by-side strip, exercising column-facet wrapping. The `minSubplotSize`\n * option keeps each panel wide enough for the 12 monthly points to stay legible,\n * which is what drives the wrap into multiple rows.\n */\nexport function galleryFacetLineExample(): TestCase {\n    const rand = seededRandom(4202);\n    const regions = ['North', 'South', 'East', 'West', 'Central', 'Pacific', 'Mountain', 'Atlantic', 'Gulf', 'Midwest'];\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n    const data: any[] = [];\n    for (const region of regions) {\n        let value = 60 + rand() * 60;\n        for (const month of months) {\n            value = Math.max(20, value + (rand() - 0.4) * 35);\n            data.push({ Month: month, Revenue: Math.round(value), Region: region });\n        }\n    }\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n        x: makeEncodingItem('Month'),\n        y: makeEncodingItem('Revenue'),\n        column: makeEncodingItem('Region'),\n    };\n    return {\n        title: 'Monthly revenue, faceted by region',\n        description: 'Wrapped small-multiples line chart — a 12-month trend panel per region, wrapping into a 5×2 grid (column facet).',\n        tags: [...FACET_TAGS, 'line', 'wrap'],\n        chartType: 'Line Chart',\n        data,\n        fields: [makeField('Month'), makeField('Revenue'), makeField('Region')],\n        metadata: {\n            Month: meta(Type.String, 'Month', months),\n            Revenue: meta(Type.Number, 'Quantity'),\n            Region: meta(Type.String, 'Category', regions),\n        },\n        encodingMap,\n        assembleOptions: { minSubplotSize: 180 },\n    };\n}\n\n/**\n * Column-faceted scatter — height vs. weight, one panel per group.\n */\nexport function galleryFacetScatterExample(): TestCase {\n    const rand = seededRandom(4203);\n    const groups = ['Group A', 'Group B', 'Group C'];\n    const data: any[] = [];\n    for (const group of groups) {\n        const base = 150 + rand() * 25;\n        for (let i = 0; i < 22; i++) {\n            const height = Math.round(base + (rand() - 0.5) * 40);\n            const weight = Math.round(height * (0.4 + rand() * 0.18));\n            data.push({ Height: height, Weight: weight, Group: group });\n        }\n    }\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n        x: makeEncodingItem('Height'),\n        y: makeEncodingItem('Weight'),\n        column: makeEncodingItem('Group'),\n    };\n    return {\n        title: 'Height vs. weight, faceted by group',\n        description: 'Small-multiples scatter plot — one panel per group (column facet).',\n        tags: [...FACET_TAGS, 'scatter'],\n        chartType: 'Scatter Plot',\n        data,\n        fields: [makeField('Height'), makeField('Weight'), makeField('Group')],\n        metadata: {\n            Height: meta(Type.Number, 'Value'),\n            Weight: meta(Type.Number, 'Value'),\n            Group: meta(Type.String, 'Category', groups),\n        },\n        encodingMap,\n    };\n}\n\n/**\n * Column-faceted area — monthly visits, one panel per acquisition channel.\n */\nexport function galleryFacetAreaExample(): TestCase {\n    const rand = seededRandom(4204);\n    const channels = ['Organic', 'Paid', 'Referral'];\n    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'];\n    const data: any[] = [];\n    for (const channel of channels) {\n        let value = 200 + rand() * 200;\n        for (const month of months) {\n            value = Math.max(60, value + (rand() - 0.4) * 120);\n            data.push({ Month: month, Visits: Math.round(value), Channel: channel });\n        }\n    }\n    const encodingMap: Partial<Record<Channel, EncodingItem>> = {\n        x: makeEncodingItem('Month'),\n        y: makeEncodingItem('Visits'),\n        column: makeEncodingItem('Channel'),\n    };\n    return {\n        title: 'Monthly visits, faceted by channel',\n        description: 'Small-multiples area chart — one panel per acquisition channel (column facet).',\n        tags: [...FACET_TAGS, 'area'],\n        chartType: 'Area Chart',\n        data,\n        fields: [makeField('Month'), makeField('Visits'), makeField('Channel')],\n        metadata: {\n            Month: meta(Type.String, 'Month', months),\n            Visits: meta(Type.Number, 'Quantity'),\n            Channel: meta(Type.String, 'Category', channels),\n        },\n        encodingMap,\n    };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Barrel export for chart test-data generators.\n *\n * Re-exports every generator plus the shared types,\n * and exposes the master TEST_GENERATORS map and GALLERY_SECTIONS config.\n */\n\n// Shared types & helpers\nexport type { TestCase, DateFormat } from './types';\nexport { makeField, makeEncodingItem, inferType, buildMetadata } from './types';\n\n// Utilities\nexport { seededRandom, genDates, genMonths, genYears, genNaturalDates, genCategories, genRandomNames, genMeasure } from './generators';\n\n// Chart-type generators\nexport { genScatterTests, genRegressionTests } from './scatter-tests';\nexport { genBarTests, genStackedBarTests, genGroupedBarTests } from './bar-tests';\nexport { genHistogramTests, genBoxplotTests, genDensityTests, genStripPlotTests } from './distribution-tests';\nexport { genDensityContourTests } from './density-2d-tests';\nexport { genViolinTests } from './violin-tests';\nexport { genLineTests } from './line-tests';\nexport { genSparklineTests } from './sparkline-tests';\nexport { genBumpChartTests } from './line-area-tests';\nexport { genSlopeTests, genEChartsSlopeTests, genChartJsSlopeTests } from './slope-tests';\nexport { genConnectedScatterTests, genEChartsConnectedScatterTests, genChartJsConnectedScatterTests } from './connected-scatter-tests';\nexport { genAreaTests, genStreamgraphTests } from './area-tests';\nexport { genRangeAreaTests, genEChartsRangeAreaTests, genChartJsRangeAreaTests } from './range-area-tests';\nexport { genEcdfTests, genEChartsEcdfTests, genChartJsEcdfTests } from './ecdf-tests';\nexport {\n    genHeatmapTests, genPieTests, genRangedDotPlotTests, genLollipopTests,\n    genWaterfallTests, genBarTableTests, genCandlestickTests, genRadarTests, genPyramidTests,\n    genRoseTests,\n} from './specialized-tests';\nexport { FACET_SIZES, DISCRETE_SIZES, genFacetColumnTests, genFacetRowTests, genFacetColRowTests, genFacetSmallTests, genFacetWrapTests, genFacetClipTests, genFacetOverflowedColTests, genFacetOverflowedColRowTests, genFacetOverflowedRowTests, genFacetDenseLineTests } from './facet-tests';\nexport { genOverflowTests, genElasticityTests } from './stress-tests';\nexport { genGasPressureTests } from './gas-pressure-tests';\nexport { genLineAreaStretchTests } from './line-area-stretch-tests';\nexport { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests, genEChartsCalendarTests, genEChartsParallelTests, genEChartsGraphTests, genEChartsTreeTests } from './echarts-tests';\nexport { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests, genChartJsBubbleTests, genChartJsDoughnutTests, genChartJsComboTests } from './chartjs-tests';\nexport { genPlotlyCoreTests, genPlotlyFacetTests } from './plotly-tests';\nexport { genDiscreteAxisTests } from './discrete-axis-tests';\nexport { genDateTests, genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDecadeTests, genDateDateTimeTests, genDateHoursTests } from './date-tests';\nexport { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests';\nexport { genMapTests, genChoroplethTests } from './map-tests';\nexport { genGanttTests, genBulletTests } from './gantt-bullet-tests';\nexport {\n    OMNI_VIZ_ROWS,\n    OMNI_VIZ_LEVELS,\n    OMNI_VIZ_MONTHS,\n    OMNI_VIZ_REGIONS,\n    OMNI_VIZ_GAME_TYPES,\n    OMNI_VIZ_GAME_ORDER,\n    omniVizDetailTable,\n    omniVizGroupedBarRegionGameTypeTable,\n    omniVizHeatmapGameMonthTable,\n    omniVizLineTable,\n    omniVizSunburstTable,\n    omniVizWaterfallTable,\n    type OmniVizRow,\n} from './omni-viz-dataset';\nexport {\n    genOmniVizGroupedBarTests,\n    genOmniVizLineTests,\n    genOmniVizHeatmapTests,\n    genOmniVizSunburstTests,\n    genOmniVizWaterfallTests,\n    GALLERY_OMNI_VIZ_GENERATOR_KEYS,\n    OMNI_VIZ_GALLERY_DATA_TABLE_ENTRY,\n} from './omni-viz-tests';\n\nexport {\n    STATIC_SERIES_GALLERY_EXAMPLES,\n    STATIC_SERIES_LINE_BASIC,\n    STATIC_SERIES_LINE_THREE_KPIS,\n    STATIC_SERIES_LINE_MANY_SERIES,\n    STATIC_SERIES_DOTTED_LINE_STOCKS,\n    STATIC_SERIES_AREA_STACKED,\n    STATIC_SERIES_SCATTER,\n} from './static-series-tests';\n\n// ---------------------------------------------------------------------------\n// Master TEST_GENERATORS map\n// ---------------------------------------------------------------------------\nimport { TestCase } from './types';\n\nimport { genScatterTests, genRegressionTests } from './scatter-tests';\nimport { genBarTests, genStackedBarTests, genGroupedBarTests, galleryBarSizingShowcase } from './bar-tests';\nimport { genHistogramTests, genBoxplotTests, genDensityTests, genStripPlotTests } from './distribution-tests';\nimport { genDensityContourTests } from './density-2d-tests';\nimport { genViolinTests } from './violin-tests';\nimport { genMapTests, genChoroplethTests } from './map-tests';\nimport { genGanttTests, genBulletTests } from './gantt-bullet-tests';\nimport { genLineTests } from './line-tests';\nimport { genSparklineTests } from './sparkline-tests';\nimport { genBumpChartTests } from './line-area-tests';\nimport { genSlopeTests, genEChartsSlopeTests, genChartJsSlopeTests } from './slope-tests';\nimport { genConnectedScatterTests, genEChartsConnectedScatterTests, genChartJsConnectedScatterTests } from './connected-scatter-tests';\nimport { genAreaTests, genStreamgraphTests } from './area-tests';\nimport { genRangeAreaTests, genEChartsRangeAreaTests, genChartJsRangeAreaTests } from './range-area-tests';\nimport { genEcdfTests, genEChartsEcdfTests, genChartJsEcdfTests } from './ecdf-tests';\nimport {\n    genHeatmapTests, genPieTests, genDonutTests, genRangedDotPlotTests, genLollipopTests,\n    genWaterfallTests, genBarTableTests, genCandlestickTests, genRadarTests, genPyramidTests,\n    genRoseTests,\n} from './specialized-tests';\nimport { genFacetColumnTests, genFacetRowTests, genFacetColRowTests, genFacetSmallTests, genFacetWrapTests, genFacetClipTests, genFacetOverflowedColTests, genFacetOverflowedColRowTests, genFacetOverflowedRowTests, genFacetDenseLineTests } from './facet-tests';\nimport { genOverflowTests, genElasticityTests } from './stress-tests';\nimport { genGasPressureTests } from './gas-pressure-tests';\nimport { genLineAreaStretchTests } from './line-area-stretch-tests';\nimport { genDiscreteAxisTests } from './discrete-axis-tests';\nimport { genDateYearTests, genDateMonthTests, genDateYearMonthTests, genDateDecadeTests, genDateDateTimeTests, genDateHoursTests } from './date-tests';\nimport { genSemanticContextTests, genSnapToBoundTests } from './semantic-tests';\nimport { genEChartsScatterTests, genEChartsLineTests, genEChartsBarTests, genEChartsStackedBarTests, genEChartsGroupedBarTests, genEChartsStressTests, genEChartsAreaTests, genEChartsPieTests, genEChartsHeatmapTests, genEChartsHistogramTests, genEChartsBoxplotTests, genEChartsRadarTests, genEChartsCandlestickTests, genEChartsStreamgraphTests, genEChartsFacetSmallTests, genEChartsFacetWrapTests, genEChartsFacetClipTests, genEChartsRoseTests, genEChartsGaugeTests, genEChartsFunnelTests, genEChartsTreemapTests, genEChartsSunburstTests, genEChartsSankeyTests, genEChartsUniqueStressTests, genEChartsCalendarTests, genEChartsParallelTests, genEChartsGraphTests, genEChartsTreeTests } from './echarts-tests';\nimport { genChartJsScatterTests, genChartJsLineTests, genChartJsBarTests, genChartJsStackedBarTests, genChartJsGroupedBarTests, genChartJsAreaTests, genChartJsPieTests, genChartJsHistogramTests, genChartJsRadarTests, genChartJsStressTests, genChartJsRoseTests, genChartJsBubbleTests, genChartJsDoughnutTests, genChartJsComboTests } from './chartjs-tests';\nimport { genPlotlyCoreTests, genPlotlyFacetTests } from './plotly-tests';\nimport {\n    genGalleryRegionalSurveyScatterTests,\n    genGalleryRegionalSurveyLineTests,\n    genGalleryRegionalSurveyBarTests,\n    genGalleryRegionalSurveyStackedBarTests,\n    genGalleryRegionalSurveyGroupedBarTests,\n    genGalleryRegionalSurveyAreaTests,\n    genGalleryRegionalSurveyPieTests,\n    genGalleryRegionalSurveyHistogramTests,\n    genGalleryRegionalSurveyRadarTests,\n    genGalleryRegionalSurveyRoseTests,\n} from '../gallery/regional-survey-tests';\nimport { genGalleryKpiCardTests } from '../gallery/bi-tests';\nimport {\n    genOmniVizGroupedBarTests,\n    genOmniVizLineTests,\n    genOmniVizHeatmapTests,\n    genOmniVizSunburstTests,\n    genOmniVizWaterfallTests,\n} from './omni-viz-tests';\nimport {\n    galleryFacetBarExample,\n    galleryFacetLineExample,\n    galleryFacetScatterExample,\n    galleryFacetAreaExample,\n} from './gallery-facet-tests';\n\n/** All test generators mapped by chart group */\nexport const TEST_GENERATORS: Record<string, () => TestCase[]> = {\n    'Scatter Plot': () => [...genScatterTests(), galleryFacetScatterExample()],\n    'Regression': genRegressionTests,\n    'Bar Chart': () => [...genBarTests(), galleryBarSizingShowcase(), galleryFacetBarExample()],\n    'Stacked Bar Chart': genStackedBarTests,\n    'Grouped Bar Chart': genGroupedBarTests,\n    'Histogram': genHistogramTests,\n    'Heatmap': genHeatmapTests,\n    'Line Chart': () => [...genLineTests(), galleryFacetLineExample()],\n    'Sparkline': genSparklineTests,\n    'Bump Chart': genBumpChartTests,\n    'Slope Chart': genSlopeTests,\n    'Connected Scatter Plot': genConnectedScatterTests,\n    'Boxplot': genBoxplotTests,\n    'Violin Plot': genViolinTests,\n    'Pie Chart': genPieTests,\n    'Donut Chart': genDonutTests,\n    'Ranged Dot Plot': genRangedDotPlotTests,\n    'Area Chart': () => [...genAreaTests(), galleryFacetAreaExample()],\n    'Streamgraph': genStreamgraphTests,\n    'Range Area Chart': genRangeAreaTests,\n    'ECDF Plot': genEcdfTests,\n    'Lollipop Chart': genLollipopTests,\n    'Density Plot': genDensityTests,\n    'Density Contour': genDensityContourTests,\n    'Candlestick Chart': genCandlestickTests,\n    'Waterfall Chart': genWaterfallTests,\n    'Bar Table': genBarTableTests,\n    'Strip Plot': genStripPlotTests,\n    'Radar Chart': genRadarTests,\n    'Pyramid Chart': genPyramidTests,\n    'Rose Chart': genRoseTests,\n    'Map': genMapTests,\n    'Choropleth': genChoroplethTests,\n    'Gantt Chart': genGanttTests,\n    'Bullet Chart': genBulletTests,\n    'Facet: Columns': genFacetColumnTests,\n    'Facet: Rows': genFacetRowTests,\n    'Facet: Cols+Rows': genFacetColRowTests,\n    'Facet: Small': genFacetSmallTests,\n    'Facet: Wrap': genFacetWrapTests,\n    'Facet: Clip': genFacetClipTests,\n    'Facet: Overflowed Col': genFacetOverflowedColTests,\n    'Facet: Overflowed Col+Row': genFacetOverflowedColRowTests,\n    'Facet: Overflowed Row': genFacetOverflowedRowTests,\n    'Facet: Dense Line': genFacetDenseLineTests,\n    'Overflow': genOverflowTests,\n    'Elasticity & Stretch': genElasticityTests,\n    'Dates: Year': genDateYearTests,\n    'Dates: Month': genDateMonthTests,\n    'Dates: Year-Month': genDateYearMonthTests,\n    'Dates: Decade': genDateDecadeTests,\n    'Dates: Date/DateTime': genDateDateTimeTests,\n    'Dates: Hours': genDateHoursTests,\n    'Discrete Axis Sizing': genDiscreteAxisTests,\n    'Gas Pressure (§2)': genGasPressureTests,\n    'Line/Area Stretch': genLineAreaStretchTests,\n    'Semantic Context': genSemanticContextTests,\n    'Snap-to-Bound': genSnapToBoundTests,\n    'ECharts: Scatter': () => [...genEChartsScatterTests(), galleryFacetScatterExample()],\n    'ECharts: Line': () => [...genEChartsLineTests(), galleryFacetLineExample()],\n    'ECharts: Bar': () => [...genEChartsBarTests(), galleryFacetBarExample()],\n    'ECharts: Stacked Bar': genEChartsStackedBarTests,\n    'ECharts: Grouped Bar': genEChartsGroupedBarTests,\n    'ECharts: Area': () => [...genEChartsAreaTests(), galleryFacetAreaExample()],\n    'ECharts: Pie': genEChartsPieTests,\n    'ECharts: Heatmap': genEChartsHeatmapTests,\n    'ECharts: Histogram': genEChartsHistogramTests,\n    'ECharts: Boxplot': genEChartsBoxplotTests,\n    'ECharts: Radar': genEChartsRadarTests,\n    'ECharts: Candlestick': genEChartsCandlestickTests,\n    'ECharts: Streamgraph': genEChartsStreamgraphTests,\n    'ECharts: Slope': genEChartsSlopeTests,\n    'ECharts: Connected Scatter': genEChartsConnectedScatterTests,\n    'ECharts: Range Area': genEChartsRangeAreaTests,\n    'ECharts: ECDF': genEChartsEcdfTests,\n    'ECharts: Facet Small': genEChartsFacetSmallTests,\n    'ECharts: Facet Wrap': genEChartsFacetWrapTests,\n    'ECharts: Facet Clip': genEChartsFacetClipTests,\n    'ECharts: Rose': genEChartsRoseTests,\n    'ECharts: Stress Tests': genEChartsStressTests,\n    'ECharts: Gauge': genEChartsGaugeTests,\n    'ECharts: Funnel': genEChartsFunnelTests,\n    'ECharts: Treemap': genEChartsTreemapTests,\n    'ECharts: Sunburst': genEChartsSunburstTests,\n    'ECharts: Sankey': genEChartsSankeyTests,\n    'ECharts: Calendar Heatmap *': genEChartsCalendarTests,\n    'ECharts: Parallel Coordinates *': genEChartsParallelTests,\n    'ECharts: Network Graph *': genEChartsGraphTests,\n    'ECharts: Tree *': genEChartsTreeTests,\n    'ECharts: Unique Stress': genEChartsUniqueStressTests,\n    'Chart.js: Scatter': () => [...genChartJsScatterTests(), galleryFacetScatterExample()],\n    'Chart.js: Line': () => [...genChartJsLineTests(), galleryFacetLineExample()],\n    'Chart.js: Slope': genChartJsSlopeTests,\n    'Chart.js: Connected Scatter': genChartJsConnectedScatterTests,\n    'Chart.js: Range Area': genChartJsRangeAreaTests,\n    'Chart.js: ECDF': genChartJsEcdfTests,\n    'Chart.js: Bar': () => [...genChartJsBarTests(), galleryFacetBarExample()],\n    'Chart.js: Stacked Bar': genChartJsStackedBarTests,\n    'Chart.js: Grouped Bar': genChartJsGroupedBarTests,\n    'Chart.js: Area': () => [...genChartJsAreaTests(), galleryFacetAreaExample()],\n    'Chart.js: Pie': genChartJsPieTests,\n    'Chart.js: Histogram': genChartJsHistogramTests,\n    'Chart.js: Radar': genChartJsRadarTests,\n    'Chart.js: Rose': genChartJsRoseTests,\n    'Chart.js: Bubble *': genChartJsBubbleTests,\n    'Chart.js: Doughnut *': genChartJsDoughnutTests,\n    'Chart.js: Combo *': genChartJsComboTests,\n    'Chart.js: Stress Tests': genChartJsStressTests,\n    'Plotly: Core Templates': genPlotlyCoreTests,\n    'Plotly: Facets': genPlotlyFacetTests,\n    'Gallery: Scatter': genGalleryRegionalSurveyScatterTests,\n    'Gallery: Line': genGalleryRegionalSurveyLineTests,\n    'Gallery: Bar': genGalleryRegionalSurveyBarTests,\n    'Gallery: Stacked Bar': genGalleryRegionalSurveyStackedBarTests,\n    'Gallery: Grouped Bar': genGalleryRegionalSurveyGroupedBarTests,\n    'Gallery: Area': genGalleryRegionalSurveyAreaTests,\n    'Gallery: Pie': genGalleryRegionalSurveyPieTests,\n    'Gallery: Histogram': genGalleryRegionalSurveyHistogramTests,\n    'Gallery: Radar': genGalleryRegionalSurveyRadarTests,\n    'Gallery: Rose': genGalleryRegionalSurveyRoseTests,\n    'Gallery: KPI Card': genGalleryKpiCardTests,\n    'Omni: Line': genOmniVizLineTests,\n    'Omni: Grouped Bar': genOmniVizGroupedBarTests,\n    'Omni: Waterfall': genOmniVizWaterfallTests,\n    'Omni: Heatmap': genOmniVizHeatmapTests,\n    'Omni: Sunburst': genOmniVizSunburstTests,\n};\n\n"]}