41 lines
No EOL
1.1 KiB
FSharp
41 lines
No EOL
1.1 KiB
FSharp
namespace Tests
|
|
|
|
open System
|
|
open NFA
|
|
open DFA
|
|
|
|
module ContainsSequence =
|
|
|
|
let contains0101:NFA = {
|
|
sigma = Seq.toList "01";
|
|
states = [
|
|
"q0";
|
|
"q1";
|
|
"q2";
|
|
"q3"
|
|
"yes"
|
|
];
|
|
delta = (fun x y ->
|
|
match (x, y) with
|
|
| ("q0", '0') -> ["q0"; "q1"]
|
|
| ("q1", '1') -> ["q0"; "q2"]
|
|
| ("q2", '0') -> ["q0"; "q3"]
|
|
| ("q3", '1') -> ["yes"]
|
|
| ("yes", _) -> ["yes"]
|
|
| _ -> []
|
|
);
|
|
beginState = "q0";
|
|
acceptingStates = ["yes"]
|
|
|
|
}
|
|
|
|
let test =
|
|
printfn "Testing contains sequence NFA"
|
|
printfn "Contains '0101' ?"
|
|
printfn "0101: %b" (NFA.acceptsWord contains0101 "0101")
|
|
printfn "0000: %b" (NFA.acceptsWord contains0101 "0000")
|
|
printfn "1010: %b" (NFA.acceptsWord contains0101 "1010")
|
|
printfn "0100: %b" (NFA.acceptsWord contains0101 "0100")
|
|
printfn "00101: %b" (NFA.acceptsWord contains0101 "00101")
|
|
printfn "01011: %b" (NFA.acceptsWord contains0101 "01011")
|
|
0 |