From 13a7cfad96ee998cb6b4131ca869c4b3e522ef7e Mon Sep 17 00:00:00 2001 From: Miwa / Ensan Date: Sun, 1 Jun 2025 21:44:31 +0900 Subject: [PATCH] feat: add test for TemporalLearningMemoryTrie --- .../TemporalLearningMemoryTrieTests.swift | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Tests/KanaKanjiConverterModuleTests/TemporalLearningMemoryTrieTests.swift diff --git a/Tests/KanaKanjiConverterModuleTests/TemporalLearningMemoryTrieTests.swift b/Tests/KanaKanjiConverterModuleTests/TemporalLearningMemoryTrieTests.swift new file mode 100644 index 0000000..bf309a6 --- /dev/null +++ b/Tests/KanaKanjiConverterModuleTests/TemporalLearningMemoryTrieTests.swift @@ -0,0 +1,56 @@ +@testable import KanaKanjiConverterModule +import XCTest + +final class TemporalLearningMemoryTrieTests: XCTestCase { + static let resourceURL = Bundle.module.resourceURL!.appendingPathComponent("DictionaryMock", isDirectory: true) + + static func loadCharMap() -> [Character: UInt8] { + let chidURL = resourceURL.appendingPathComponent("louds/charID.chid", isDirectory: false) + let string = try! String(contentsOf: chidURL, encoding: .utf8) + return Dictionary(uniqueKeysWithValues: string.enumerated().map { ($0.element, UInt8($0.offset)) }) + } + + func chars(for string: String) -> [UInt8] { + LearningManager.keyToChars(string, char2UInt8: Self.loadCharMap())! + } + + func testMemorizeAndMatch() throws { + var trie = TemporalLearningMemoryTrie() + let element1 = DicdataElement(word: "テスト", ruby: "テスト", cid: CIDData.一般名詞.cid, mid: MIDData.一般.mid, value: -10) + let element2 = DicdataElement(word: "テスター", ruby: "テスター", cid: CIDData.一般名詞.cid, mid: MIDData.一般.mid, value: -12) + + trie.memorize(dicdataElement: element1, chars: chars(for: element1.ruby)) + trie.memorize(dicdataElement: element2, chars: chars(for: element2.ruby)) + + let result1 = trie.perfectMatch(chars: chars(for: element1.ruby)) + XCTAssertEqual(result1.count, 1) + XCTAssertEqual(result1.first?.word, element1.word) + XCTAssertTrue(result1.first?.metadata.contains(.isLearned) ?? false) + + let result2 = trie.throughMatch(chars: chars(for: element2.ruby), depth: (element2.ruby.count - 1)..