Closed
Description
Description
Here's an example I'm working with:
let regularCases: [String: [(input: String, expected: Bool)]] = [
// Basic cases
"": [("", true), ("x", false), ("xy", false)],
"x": [("", false), ("x", true), ("xy", false)],
"x+": [("", false), ("x", true), ("xy", false), ("xx", true)],
"x*": [("", true), ("x", true), ("xy", false), ("xx", true)],
"x?": [("", true), ("x", true), ("xy", false), ("xx", false)],
"x|y": [("", false), ("x", true), ("y", true), ("xx", false)],
// Nested groups
"(xy)+": [("", false), ("xy", true), ("xyxy", true), ("x", false)],
"(x|y)*": [("", true), ("x", true), ("y", true), ("xy", true), ("yx", true), ("xyxy", true)],
// Complex combinations
"x(y|z)+": [("", false), ("x", false), ("xy", true), ("xz", true), ("xyz", true), ("xyzyz", true)],
"(ab|cd)*": [("", true), ("ab", true), ("cd", true), ("abcd", true), ("cdab", true), ("abc", false)],
// Multiple alternatives
"a|b|c": [("", false), ("a", true), ("b", true), ("c", true), ("d", false), ("ab", false)],
"(x|y)(a|b)": [("xa", true), ("xb", true), ("ya", true), ("yb", true), ("xx", false), ("ab", false)]
]
@Test func nfaToDfa() async throws {
for (pattern, expectations) in regularCases {
let n = TestNFA(pattern)
let d = EquivalentDFA(n)
for (input, expectedMatch) in expectations {
#expect(n.recognizes(input) == expectedMatch, "pattern: \(pattern), input: \(input), nfa:\n\(n)")
#expect(d.recognizes(input) == expectedMatch, "pattern: \(pattern), input: \(input), dfa:\n\(d)")
}
}
}
When one of these fails, it of course points to one of the two expect lines; that's not really what I want at all. Plus, I have to add these comments to get useful information out. Maybe there's a different idiom that would work better, in which case document it? Or maybe different library features are needed.
Expected behavior
No response
Actual behavior
No response
Steps to reproduce
No response
swift-testing version/commit hash
No response
Swift & OS version (output of swift --version && uname -a
)
No response