fix: update tests

This commit is contained in:
Miwa / Ensan
2025-06-01 21:02:27 +09:00
parent 750d9f87e4
commit 53cb1e3b41
3 changed files with 52 additions and 33 deletions

View File

@ -139,7 +139,7 @@ public final class DicdataStore {
} else { } else {
self.requestOptions = value self.requestOptions = value
} }
let shouldReset = self.learningManager.setRequestOptions(options: value) let shouldReset = self.learningManager.setRequestOptions(value)
if shouldReset { if shouldReset {
self.reloadMemory() self.reloadMemory()
} }

View File

@ -653,47 +653,49 @@ final class LearningManager {
(!self.memoryCollapsed) && self.options.learningType.needUsingMemory (!self.memoryCollapsed) && self.options.learningType.needUsingMemory
} }
init() { init() {}
self.memoryCollapsed = LongTermLearningMemory.memoryCollapsed(directoryURL: self.options.memoryDirectoryURL)
if self.memoryCollapsed && options.learningType.needUsingMemory { /// - Returns: Whether cache should be reseted or not.
func setRequestOptions(_ newOptions: ConvertRequestOptions) -> Bool {
//
if !newOptions.learningType.needUsingMemory {
self.options = newOptions
return false
}
//
self.memoryCollapsed = LongTermLearningMemory.memoryCollapsed(directoryURL: newOptions.memoryDirectoryURL)
if self.memoryCollapsed && newOptions.learningType.needUsingMemory {
do { do {
try LongTermLearningMemory.merge( try LongTermLearningMemory.merge(
tempTrie: TemporalLearningMemoryTrie(), tempTrie: TemporalLearningMemoryTrie(),
directoryURL: self.options.memoryDirectoryURL, directoryURL: newOptions.memoryDirectoryURL,
maxMemoryCount: options.maxMemoryCount, maxMemoryCount: newOptions.maxMemoryCount,
char2UInt8: char2UInt8 char2UInt8: char2UInt8
) )
} catch { } catch {
debug("LearningManager init: automatic merge failed", error) debug(#file, #function, "automatic merge failed", error)
} }
self.memoryCollapsed = LongTermLearningMemory.memoryCollapsed(directoryURL: self.options.memoryDirectoryURL) self.memoryCollapsed = LongTermLearningMemory.memoryCollapsed(directoryURL: newOptions.memoryDirectoryURL)
} }
if memoryCollapsed { if self.memoryCollapsed {
// //
debug("LearningManager init: Memory Collapsed") debug(#file, #function, "LearningManager init: Memory Collapsed")
} }
if !options.learningType.needUsingMemory {
return
}
Self.updateChar2Int8(bundleURL: options.dictionaryResourceURL, target: &char2UInt8)
}
/// - Returns: Whether cache should be reseted or not.
func setRequestOptions(options: ConvertRequestOptions) -> Bool {
// `char2Int8` // `char2Int8`
if options.dictionaryResourceURL != self.options.dictionaryResourceURL { if newOptions.dictionaryResourceURL != self.options.dictionaryResourceURL {
Self.updateChar2Int8(bundleURL: options.dictionaryResourceURL, target: &char2UInt8) Self.updateChar2Int8(bundleURL: newOptions.dictionaryResourceURL, target: &char2UInt8)
} }
self.options = options //
self.options = newOptions
switch options.learningType { switch self.options.learningType {
case .inputAndOutput, .onlyOutput: break case .inputAndOutput, .onlyOutput: break
case .nothing: case .nothing:
self.temporaryMemory = TemporalLearningMemoryTrie() self.temporaryMemory = TemporalLearningMemoryTrie()
} }
// //
if options.shouldResetMemory { if self.options.shouldResetMemory {
self.reset() self.reset()
self.options.shouldResetMemory = false self.options.shouldResetMemory = false
return true return true

View File

@ -11,15 +11,36 @@ import XCTest
final class LearningMemoryTests: XCTestCase { final class LearningMemoryTests: XCTestCase {
static let resourceURL = Bundle.module.resourceURL!.appendingPathComponent("DictionaryMock", isDirectory: true) static let resourceURL = Bundle.module.resourceURL!.appendingPathComponent("DictionaryMock", isDirectory: true)
private func getOptionsForMemoryTest(memoryDirectoryURL: URL) -> ConvertRequestOptions {
var options = ConvertRequestOptions.default
options.memoryDirectoryURL = memoryDirectoryURL
options.dictionaryResourceURL = Self.resourceURL
options.learningType = .inputAndOutput
options.maxMemoryCount = 32
return options
}
func testPauseFileIsClearedOnInit() throws { func testPauseFileIsClearedOnInit() throws {
let dir = ConvertRequestOptions.default.memoryDirectoryURL let dir = FileManager.default.temporaryDirectory.appendingPathComponent("LearningMemoryTest-\(UUID().uuidString)", isDirectory: true)
try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
defer { try? FileManager.default.removeItem(at: dir) }
let options = self.getOptionsForMemoryTest(memoryDirectoryURL: dir)
let manager = LearningManager()
_ = manager.setRequestOptions(options)
let element = DicdataElement(word: "テスト", ruby: "テスト", cid: CIDData..cid, mid: MIDData..mid, value: -10)
manager.update(data: [element])
manager.save()
//
let pauseURL = dir.appendingPathComponent(".pause", isDirectory: false) let pauseURL = dir.appendingPathComponent(".pause", isDirectory: false)
FileManager.default.createFile(atPath: pauseURL.path, contents: Data()) FileManager.default.createFile(atPath: pauseURL.path, contents: Data())
XCTAssertTrue(LongTermLearningMemory.memoryCollapsed(directoryURL: dir)) XCTAssertTrue(LongTermLearningMemory.memoryCollapsed(directoryURL: dir))
// `init` //
_ = LearningManager() _ = manager.setRequestOptions(options)
// //
XCTAssertFalse(LongTermLearningMemory.memoryCollapsed(directoryURL: dir)) XCTAssertFalse(LongTermLearningMemory.memoryCollapsed(directoryURL: dir))
try? FileManager.default.removeItem(at: pauseURL) try? FileManager.default.removeItem(at: pauseURL)
@ -30,13 +51,9 @@ final class LearningMemoryTests: XCTestCase {
try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true)
defer { try? FileManager.default.removeItem(at: dir) } defer { try? FileManager.default.removeItem(at: dir) }
let options = self.getOptionsForMemoryTest(memoryDirectoryURL: dir)
let manager = LearningManager() let manager = LearningManager()
var options = ConvertRequestOptions.default _ = manager.setRequestOptions(options)
options.dictionaryResourceURL = Self.resourceURL
options.memoryDirectoryURL = dir
options.learningType = .inputAndOutput
options.maxMemoryCount = 32
_ = manager.setRequestOptions(options: options)
let element = DicdataElement(word: "テスト", ruby: "テスト", cid: CIDData..cid, mid: MIDData..mid, value: -10) let element = DicdataElement(word: "テスト", ruby: "テスト", cid: CIDData..cid, mid: MIDData..mid, value: -10)
manager.update(data: [element]) manager.update(data: [element])