import Foundation import Testing @testable import CardsNative @Suite("Typing-Match") struct TypingTests { @Test("Exact match → correct") func exactMatch() { #expect(Typing.check(input: "Berlin", answer: "Berlin") == .correct) } @Test("Case + Whitespace normalisiert") func caseAndWhitespace() { #expect(Typing.check(input: " berlin ", answer: "Berlin") == .correct) #expect(Typing.check(input: "BERLIN", answer: "berlin") == .correct) } @Test("Umlaute via NFD-Diakritika-Stripping") func umlauts() { #expect(Typing.check(input: "Munchen", answer: "München") == .correct) #expect(Typing.check(input: "muenchen", answer: "München") != .correct) // muenchen != munchen via NFD: ä → a, aber ue ≠ ü } @Test("Aliases akzeptiert als correct") func aliasesCorrect() { let aliases = "Frankfurt am Main,Frankfurt/Main" #expect(Typing.check(input: "Frankfurt/Main", answer: "Frankfurt", aliases: aliases) == .correct) } @Test("Levenshtein-1 bei 5+ Zeichen → close") func closeMatch() { #expect(Typing.check(input: "Berln", answer: "Berlin") == .close) #expect(Typing.check(input: "Berlim", answer: "Berlin") == .close) } @Test("Großer Unterschied → wrong") func wrongMatch() { #expect(Typing.check(input: "Madrid", answer: "Berlin") == .wrong) } @Test("Leer-Input → wrong") func emptyInput() { #expect(Typing.check(input: "", answer: "Berlin") == .wrong) #expect(Typing.check(input: " ", answer: "Berlin") == .wrong) } @Test("Levenshtein-Helper") func levenshteinSanity() { #expect(Typing.levenshtein("", "") == 0) #expect(Typing.levenshtein("abc", "abc") == 0) #expect(Typing.levenshtein("abc", "abd") == 1) #expect(Typing.levenshtein("kitten", "sitting") == 3) } }