diff --git a/src/cps/dune b/src/cps/dune deleted file mode 100644 index 5da2306..0000000 --- a/src/cps/dune +++ /dev/null @@ -1,4 +0,0 @@ - -(library - (name nanoev_cps) - (public_name nanoev.cps)) diff --git a/src/sm/dune b/src/sm/dune new file mode 100644 index 0000000..901a873 --- /dev/null +++ b/src/sm/dune @@ -0,0 +1,5 @@ + +(library + (name nanoev_sm) + (public_name nanoev.sm) + (synopsis "state machines for sans-io")) diff --git a/src/cps/nanoev_cps.ml b/src/sm/nanoev_sm.ml similarity index 100% rename from src/cps/nanoev_cps.ml rename to src/sm/nanoev_sm.ml diff --git a/tests/cps/dune b/tests/sm/dune similarity index 52% rename from tests/cps/dune rename to tests/sm/dune index 1bc0519..c90b905 100644 --- a/tests/cps/dune +++ b/tests/sm/dune @@ -1,4 +1,4 @@ (tests (names t_readline) - (libraries nanoev.cps)) + (libraries nanoev.sm)) diff --git a/tests/sm/t_readline.expected b/tests/sm/t_readline.expected new file mode 100644 index 0000000..a1e447a --- /dev/null +++ b/tests/sm/t_readline.expected @@ -0,0 +1,23 @@ +## test on ["hello\nwor";"ld\n\n123\n"] +feed input "hello\nwor" +yielded line "hello" +feed input "ld\n\n123\n" +yielded line "world" +yielded line "" +yielded line "123" +done +## end test +## test on ["a very very long";" line over here, wow, ";"damn!\noh well\n";"\nanother ";"one?\n";"all done\n"] +feed input "a very very long" +feed input " line over here, wow, " +feed input "damn!\noh well\n" +yielded line "a very very long line over here, wow, damn!" +yielded line "oh well" +feed input "\nanother " +yielded line "" +feed input "one?\n" +yielded line "another one?" +feed input "all done\n" +yielded line "all done" +done +## end test diff --git a/tests/cps/t_readline.ml b/tests/sm/t_readline.ml similarity index 79% rename from tests/cps/t_readline.ml rename to tests/sm/t_readline.ml index d368fda..ea000c6 100644 --- a/tests/cps/t_readline.ml +++ b/tests/sm/t_readline.ml @@ -1,4 +1,4 @@ -module CPS = Nanoev_cps +module SM = Nanoev_sm let spf = Printf.sprintf let pf = Printf.printf @@ -39,30 +39,30 @@ type input = | `Input of bytes * int * int ] -let readline () : ([ `Yield of string ], input, unit, CPS.void) CPS.t = +let readline () : ([ `Yield of string ], input, unit, SM.void) SM.t = let self = St.create () in - CPS.create_rec @@ fun ~aq ~recurse -> + SM.create_rec @@ fun ~aq ~recurse -> match for i = 0 to self.len - 1 do if Bytes.get self.bs i = '\n' then raise_notrace (Found i) done with | () -> - CPS.await @@ fun input -> + SM.await @@ fun input -> (match input with - | `End_of_input when self.len = 0 -> CPS.return () + | `End_of_input when self.len = 0 -> SM.return () | `End_of_input -> let line = Bytes.sub_string self.bs 0 self.len in St.shift_left self self.len; - CPS.perform ~aq (`Yield line); - CPS.return () + SM.perform ~aq (`Yield line); + SM.return () | `Input (buf, i, len) -> St.add_bytes self buf i len; recurse ()) | exception Found i -> let line = Bytes.sub_string self.bs 0 i in St.shift_left self (i + 1); - CPS.perform ~aq (`Yield line); + SM.perform ~aq (`Yield line); recurse () let test (inputs : string list) = @@ -72,21 +72,21 @@ let test (inputs : string list) = let rd = readline () in let work () = - (match CPS.work rd with + (match SM.work rd with | Ok () -> pf "done\n" | Error _ -> . | Working -> ()); - CPS.pop_actions rd (function `Yield line -> pf "yielded line %S\n%!" line) + SM.pop_actions rd (function `Yield line -> pf "yielded line %S\n%!" line) in work (); while not (Queue.is_empty inputs) do let s = Queue.pop inputs in pf "feed input %S\n%!" s; - CPS.add_input rd (`Input (Bytes.of_string s, 0, String.length s)); + SM.add_input rd (`Input (Bytes.of_string s, 0, String.length s)); work () done; - CPS.add_input rd `End_of_input; + SM.add_input rd `End_of_input; work (); pf "## end test\n"