冗長なUTF-8の判定のテストケースについて考える
判定が実装されているかどうかの表面的なチェックではなく、判定が正しいかどうかをチェックするには、慎重なテストケースの構成が必要です。
とりあえず最低でもこれぐらいは必要でしょうが、まだ足りない気がします(特にパターンマッチングで検出させている場合に抜けがありそうです)。
冗長と判定されるべきもののテストケース
0xC1,0xBF // 2byte U+007F 0xE0,0x9F,0xBF // 3byte U+07FF 0xF0,0x8F,0xBF,0xBF // 4byte U+FFFF 0xF8,0x84,0x8F,0xBF,0xBF //5byte U+10FFFF 0xFC,0x80,0x84,0x8F,0xBF,0xBF //6byte U+10FFFF
冗長と判定されてはいけないもののテストケース
0x7F //U+007F 0xC2,0x80 // 2byte U+0080 0xE0,0xA0,0x80 // 3byte U+0800 0xF0,0x90,0x80,0x80 // 4byte U+10000
5バイトと6バイトの 10FFFFが両方に入っていたのは間違いです