[Fix] 漢数字周りのエラーを修正 (#104)

* fix: 漢数字変換が正しくない問題を修正

* test: add check for long number inptu
This commit is contained in:
Miwa
2024-06-20 23:55:50 +09:00
committed by GitHub
parent cce5a634a6
commit c2e88ae720
3 changed files with 19 additions and 9 deletions

View File

@ -532,16 +532,13 @@ public final class DicdataStore {
/// - convertTarget:
/// - note
/// - Converter
private func getWiseDicdata(convertTarget: String, inputData: ComposingText, inputRange: Range<Int>) -> [DicdataElement] {
func getWiseDicdata(convertTarget: String, inputData: ComposingText, inputRange: Range<Int>) -> [DicdataElement] {
var result: [DicdataElement] = []
result.append(contentsOf: self.getJapaneseNumberDicdata(head: convertTarget))
if inputData.input[..<inputRange.startIndex].last?.character.isNumber != true && inputData.input[inputRange.endIndex...].first?.character.isNumber != true, let number = Float(convertTarget) {
if inputData.input[..<inputRange.startIndex].last?.character.isNumber != true && inputData.input[inputRange.endIndex...].first?.character.isNumber != true, let number = Int(convertTarget) {
result.append(DicdataElement(ruby: convertTarget, cid: CIDData..cid, mid: MIDData..mid, value: -14))
if number.truncatingRemainder(dividingBy: 1) == 0 {
let int = Int(number)
if int < Int(1E18) && -Int(1E18) < int, let kansuji = self.numberFormatter.string(from: NSNumber(value: int)) {
result.append(DicdataElement(word: kansuji, ruby: convertTarget, cid: CIDData..cid, mid: MIDData..mid, value: -16))
}
if number <= Int(1E12) && -Int(1E12) <= number, let kansuji = self.numberFormatter.string(from: NSNumber(value: number)) {
result.append(DicdataElement(word: kansuji, ruby: convertTarget, cid: CIDData..cid, mid: MIDData..mid, value: -16))
}
}

View File

@ -144,7 +144,8 @@ final class ConverterTests: XCTestCase {
("しんだどうぶつ", "死んだ動物"),
("けいさん", "計算"),
("azooKeyをつかう", "azooKeyを使う"),
("じどうAIそうじゅう。", "自動AI操縦。")
("じどうAIそうじゅう。", "自動AI操縦。"),
("1234567890123456789012", "1234567890123456789012")
]
// full input

View File

@ -6,7 +6,8 @@
// Copyright © 2023 ensan. All rights reserved.
//
import KanaKanjiConverterModuleWithDefaultDictionary
@testable import KanaKanjiConverterModule
@testable import KanaKanjiConverterModuleWithDefaultDictionary
import XCTest
final class DicdataStoreTests: XCTestCase {
@ -121,4 +122,15 @@ final class DicdataStoreTests: XCTestCase {
XCTAssertTrue(result.contains(where: {$0.data.word == "使っ"}))
}
}
func testWiseDicdata() throws {
let dicdataStore = DicdataStore(convertRequestOptions: requestOptions())
do {
var c = ComposingText()
c.insertAtCursorPosition("999999999999", inputStyle: .roman2kana)
let result = dicdataStore.getWiseDicdata(convertTarget: c.convertTarget, inputData: c, inputRange: 0..<12)
XCTAssertTrue(result.contains(where: {$0.word == "999999999999"}))
XCTAssertTrue(result.contains(where: {$0.word == "九千九百九十九億九千九百九十九万九千九百九十九"}))
}
}
}