{
  "title": "24 Unicode character-count fixtures",
  "author": "Chatcument",
  "date": "2026-09-08",
  "license": "CC0-1.0",
  "scope": "A selected teaching and regression fixture set, not a representative sample or Unicode conformance suite.",
  "runtime": {
    "node": "v24.15.0",
    "icu": "78.2",
    "unicode": "17.0"
  },
  "normalization": "None applied during measurement; one fixture is explicitly constructed with NFD.",
  "fixtures": [
    {
      "id": "empty",
      "label": "Empty string",
      "input": "",
      "codePoints": [],
      "utf16Units": 0,
      "unicodeCodePoints": 0,
      "graphemeClusters": 0,
      "utf8Bytes": 0
    },
    {
      "id": "ascii",
      "label": "ASCII word",
      "input": "Hello",
      "codePoints": [
        "U+0048",
        "U+0065",
        "U+006C",
        "U+006C",
        "U+006F"
      ],
      "utf16Units": 5,
      "unicodeCodePoints": 5,
      "graphemeClusters": 5,
      "utf8Bytes": 5
    },
    {
      "id": "ascii-space",
      "label": "ASCII with space",
      "input": "A B",
      "codePoints": [
        "U+0041",
        "U+0020",
        "U+0042"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 3,
      "utf8Bytes": 3
    },
    {
      "id": "hangul-nfc",
      "label": "Hangul composed",
      "input": "한글",
      "codePoints": [
        "U+D55C",
        "U+AE00"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 2,
      "graphemeClusters": 2,
      "utf8Bytes": 6
    },
    {
      "id": "hangul-nfd",
      "label": "Hangul decomposed",
      "input": "한글",
      "codePoints": [
        "U+1112",
        "U+1161",
        "U+11AB",
        "U+1100",
        "U+1173",
        "U+11AF"
      ],
      "utf16Units": 6,
      "unicodeCodePoints": 6,
      "graphemeClusters": 2,
      "utf8Bytes": 18
    },
    {
      "id": "hangul-syllable",
      "label": "One Hangul syllable",
      "input": "각",
      "codePoints": [
        "U+AC01"
      ],
      "utf16Units": 1,
      "unicodeCodePoints": 1,
      "graphemeClusters": 1,
      "utf8Bytes": 3
    },
    {
      "id": "hangul-jamo",
      "label": "Conjoining Hangul jamo",
      "input": "각",
      "codePoints": [
        "U+1100",
        "U+1161",
        "U+11A8"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 1,
      "utf8Bytes": 9
    },
    {
      "id": "compat-jamo",
      "label": "Compatibility jamo",
      "input": "ㄱㅏㄱ",
      "codePoints": [
        "U+3131",
        "U+314F",
        "U+3131"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 3,
      "utf8Bytes": 9
    },
    {
      "id": "accent-nfc",
      "label": "Composed accent",
      "input": "é",
      "codePoints": [
        "U+00E9"
      ],
      "utf16Units": 1,
      "unicodeCodePoints": 1,
      "graphemeClusters": 1,
      "utf8Bytes": 2
    },
    {
      "id": "accent-nfd",
      "label": "Decomposed accent",
      "input": "é",
      "codePoints": [
        "U+0065",
        "U+0301"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 2,
      "graphemeClusters": 1,
      "utf8Bytes": 3
    },
    {
      "id": "two-marks",
      "label": "Two combining marks",
      "input": "ạ́",
      "codePoints": [
        "U+0061",
        "U+0301",
        "U+0323"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 1,
      "utf8Bytes": 5
    },
    {
      "id": "emoji",
      "label": "Single emoji",
      "input": "😀",
      "codePoints": [
        "U+1F600"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 1,
      "graphemeClusters": 1,
      "utf8Bytes": 4
    },
    {
      "id": "skin-tone",
      "label": "Emoji with skin tone",
      "input": "👍🏽",
      "codePoints": [
        "U+1F44D",
        "U+1F3FD"
      ],
      "utf16Units": 4,
      "unicodeCodePoints": 2,
      "graphemeClusters": 1,
      "utf8Bytes": 8
    },
    {
      "id": "flag",
      "label": "Regional-indicator flag",
      "input": "🇰🇷",
      "codePoints": [
        "U+1F1F0",
        "U+1F1F7"
      ],
      "utf16Units": 4,
      "unicodeCodePoints": 2,
      "graphemeClusters": 1,
      "utf8Bytes": 8
    },
    {
      "id": "family",
      "label": "Family ZWJ sequence",
      "input": "👨‍👩‍👧‍👦",
      "codePoints": [
        "U+1F468",
        "U+200D",
        "U+1F469",
        "U+200D",
        "U+1F467",
        "U+200D",
        "U+1F466"
      ],
      "utf16Units": 11,
      "unicodeCodePoints": 7,
      "graphemeClusters": 1,
      "utf8Bytes": 25
    },
    {
      "id": "profession",
      "label": "Profession ZWJ sequence",
      "input": "👩‍💻",
      "codePoints": [
        "U+1F469",
        "U+200D",
        "U+1F4BB"
      ],
      "utf16Units": 5,
      "unicodeCodePoints": 3,
      "graphemeClusters": 1,
      "utf8Bytes": 11
    },
    {
      "id": "heart-text",
      "label": "Heart without variation selector",
      "input": "❤",
      "codePoints": [
        "U+2764"
      ],
      "utf16Units": 1,
      "unicodeCodePoints": 1,
      "graphemeClusters": 1,
      "utf8Bytes": 3
    },
    {
      "id": "heart-emoji",
      "label": "Heart with variation selector",
      "input": "❤️",
      "codePoints": [
        "U+2764",
        "U+FE0F"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 2,
      "graphemeClusters": 1,
      "utf8Bytes": 6
    },
    {
      "id": "keycap",
      "label": "Keycap sequence",
      "input": "1️⃣",
      "codePoints": [
        "U+0031",
        "U+FE0F",
        "U+20E3"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 1,
      "utf8Bytes": 7
    },
    {
      "id": "cjk",
      "label": "CJK text",
      "input": "中文",
      "codePoints": [
        "U+4E2D",
        "U+6587"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 2,
      "graphemeClusters": 2,
      "utf8Bytes": 6
    },
    {
      "id": "supplementary-cjk",
      "label": "Supplementary CJK character",
      "input": "𠮷",
      "codePoints": [
        "U+20BB7"
      ],
      "utf16Units": 2,
      "unicodeCodePoints": 1,
      "graphemeClusters": 1,
      "utf8Bytes": 4
    },
    {
      "id": "nbsp",
      "label": "Non-breaking space",
      "input": "A B",
      "codePoints": [
        "U+0041",
        "U+00A0",
        "U+0042"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 3,
      "utf8Bytes": 4
    },
    {
      "id": "zero-width-space",
      "label": "Zero-width space",
      "input": "A​B",
      "codePoints": [
        "U+0041",
        "U+200B",
        "U+0042"
      ],
      "utf16Units": 3,
      "unicodeCodePoints": 3,
      "graphemeClusters": 3,
      "utf8Bytes": 5
    },
    {
      "id": "mixed",
      "label": "Mixed Hangul, space and emoji",
      "input": "한글 😀",
      "codePoints": [
        "U+D55C",
        "U+AE00",
        "U+0020",
        "U+1F600"
      ],
      "utf16Units": 5,
      "unicodeCodePoints": 4,
      "graphemeClusters": 4,
      "utf8Bytes": 11
    }
  ]
}
