package onnx
import (
"encoding/json"
"os"
"testing"
)
func TestH2ZBasic(t *testing.T) {
tests := []struct {
in string
want string
}{
{"abc123XYZ", "abc123XYZ"},
{"ガッコウ", "ガッコウ"},
{"パン", "パン"},
{"Hello, world!", "Hello,\u3000world!"},
{"「そんな……嘘でしょう!?」", "「そんな……嘘でしょう!?」"},
}
for _, tt := range tests {
got := H2Z(tt.in)
if got != tt.want {
t.Errorf("H2Z(%q) = %q, want %q", tt.in, got, tt.want)
}
}
}
// testdata/jaconv_h2z.json is jaconv 0.5.0's h2z(s, ascii=True, digit=True),
// what manga-ocr applies, over ASCII, half-width kana with and without
// (han)dakuten, and the kana and full-width blocks it must leave alone.
func TestH2ZParityWithJaconv(t *testing.T) {
data, err := os.ReadFile("testdata/jaconv_h2z.json")
if err != nil {
t.Fatal(err)
}
var m map[string]string
if err := json.Unmarshal(data, &m); err != nil {
t.Fatal(err)
}
for orig, want := range m {
got := H2Z(orig)
if got != want {
t.Errorf("char %q (U+%04X): got %q, want %q", orig, []rune(orig)[0], got, want)
}
}
}
func TestIsKanaOnly(t *testing.T) {
if !IsKanaOnly("あくま") {
t.Errorf("expected あくま to be kana only")
}
if !IsKanaOnly("ラーメン!") {
t.Errorf("expected ラーメン! to be kana only")
}
if IsKanaOnly("悪魔") {
t.Errorf("expected 悪魔 NOT to be kana only")
}
if IsKanaOnly("悪魔と契約する") {
t.Errorf("expected 悪魔と契約する NOT to be kana only")
}
}