Skip to content

Latest commit

 

History

History
313 lines (275 loc) · 18.1 KB

README.md

File metadata and controls

313 lines (275 loc) · 18.1 KB

code-coverage

Separate StateMachine from the code that executes it

In this model there is an Executor and the StateMachine. The user creates the state machine and builds by giving it to Executor::new() then add all of the states one at a time using with_state() and finally build() passing the initial state.

Run

Debug:

wink@3900x 22-12-21T01:41:29.690Z:~/prgs/rust/myrepos/exper_hsm/hsm0_with_executor (main)
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `/home/wink/prgs/rust/myrepos/exper_hsm/target/debug/hsm0-with-executor`
main:+
main:  &sme=0x7ffdb9f73db8
state1:+ &self=0x7ffdb9f73e20
state1:-
state1:+ &self=0x7ffdb9f73e20
state2:-
state1:+ &self=0x7ffdb9f73e20
state1:-
state1:+ &self=0x7ffdb9f73e20
state2:-
main:-

Release:

wink@3900x 22-12-21T01:42:27.250Z:~/prgs/rust/myrepos/exper_hsm/hsm0_with_executor (main)
$ cargo run --release
    Finished release [optimized] target(s) in 0.02s
     Running `/home/wink/prgs/rust/myrepos/exper_hsm/target/release/hsm0-with-executor`
main:+
main:  &sme=0x7ffdacf7cef0
state1:+ &self=0x7ffdacf7cf58
state1:-
state1:+ &self=0x7ffdacf7cf58
state2:-
state1:+ &self=0x7ffdacf7cf58
state1:-
state1:+ &self=0x7ffdacf7cf58
state2:-
main:-

Test

wink@3900x 22-12-21T01:42:28.296Z:~/prgs/rust/myrepos/exper_hsm/hsm0_with_executor (main)
$ cargo test
   Compiling hsm0-with-executor v0.8.0 (/home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor)
    Finished test [unoptimized + debuginfo] target(s) in 0.84s
     Running unittests src/lib.rs (/home/wink/prgs/rust/myrepos/exper_hsm/target/debug/deps/hsm0_with_executor-ec5892669e0bc122)

running 17 tests
test test::test_2s_cycle ... ok
test test::test_2s_one_self_cycle ... ok
test test::test_1s_cycle ... ok
test test::test_3s_one_cycle ... ok
test test::test_5s_long_cycle ... ok
test test::test_leaf_transitions_between_trees ... ok
test test::test_leaf_transitions_in_a_tree ... ok
test test::test_sm_1h_2s_not_handled_no_enter_no_exit ... ok
test test::test_sm_1s_enter_no_exit ... ok
test test::test_sm_1s_get_names ... ok
test test::test_sm_1s_no_enter_no_exit ... ok
test test::test_sm_2s_get_names ... ok
test test::test_sm_2s_no_enter_no_exit ... ok
test test::test_sm_invalid_initial_state - should panic ... ok
test test::test_sm_2s_invalid_transition - should panic ... ok
test test::test_sm_out_of_bounds_initial_transition - should panic ... ok
test test::test_sm_out_of_bounds_invalid_transition - should panic ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/main.rs (/home/wink/prgs/rust/myrepos/exper_hsm/target/debug/deps/hsm0_with_executor-4ec20b7a7edc8446)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests hsm0-with-executor

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Code coverage

Html Results

wink@3900x 22-12-21T01:42:50.436Z:~/prgs/rust/myrepos/exper_hsm/hsm0_with_executor (main)
$ cargo xt gen-cov
   Compiling xtask v0.1.0 (/home/wink/prgs/rust/myrepos/exper_hsm/xtask)
    Finished dev [unoptimized + debuginfo] target(s) in 0.25s
     Running `/home/wink/prgs/rust/myrepos/exper_hsm/target/debug/xtask gen-cov`
Run cargo clean []
Create profraw data at /home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor/coverage
   Compiling libc v0.2.138
   Compiling cfg-if v1.0.0
   Compiling memchr v2.5.0
   Compiling log v0.4.17
   Compiling regex-syntax v0.6.28
   Compiling humantime v2.1.0
   Compiling ppv-lite86 v0.2.17
   Compiling termcolor v1.1.3
   Compiling aho-corasick v0.7.20
   Compiling getrandom v0.2.8
   Compiling atty v0.2.14
   Compiling rand_core v0.6.4
   Compiling rand_chacha v0.3.1
   Compiling regex v1.7.0
   Compiling rand v0.8.5
   Compiling env_logger v0.9.3
   Compiling custom-logger v0.1.0 (https://github.com/winksaville/custom-logger#4d828a35)
   Compiling hsm0-with-executor v0.8.0 (/home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor)
    Finished test [unoptimized + debuginfo] target(s) in 4.52s
     Running unittests src/lib.rs (/home/wink/prgs/rust/myrepos/exper_hsm/target/debug/deps/hsm0_with_executor-f2534b38e0f4b2c0)

running 17 tests
test test::test_2s_cycle ... ok
test test::test_1s_cycle ... ok
test test::test_2s_one_self_cycle ... ok
test test::test_3s_one_cycle ... ok
test test::test_5s_long_cycle ... ok
test test::test_leaf_transitions_in_a_tree ... ok
test test::test_sm_1h_2s_not_handled_no_enter_no_exit ... ok
test test::test_leaf_transitions_between_trees ... ok
test test::test_sm_1s_enter_no_exit ... ok
test test::test_sm_1s_no_enter_no_exit ... ok
test test::test_sm_1s_get_names ... ok
test test::test_sm_2s_get_names ... ok
test test::test_sm_2s_no_enter_no_exit ... ok
test test::test_sm_2s_invalid_transition - should panic ... ok
test test::test_sm_invalid_initial_state - should panic ... ok
test test::test_sm_out_of_bounds_initial_transition - should panic ... ok
test test::test_sm_out_of_bounds_invalid_transition - should panic ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

Create /home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor/coverage/html
Create /home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor/coverage/tests.lcov
Create /home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor/coverage/tests.covdir.json

Examples

To see the list of examples:

wink@3900x 22-12-21T01:47:47.214Z:~/prgs/rust/myrepos/exper_hsm/hsm0_with_executor (main)
$ cargo run --example
error: "--example" takes one argument.
Available examples:
    defer-msgs
    file-stream-producer
    hsm-1h-3s
    hsm-2h-2s
    send-msg-to-self
    zero-copy

file-stream-producer

wink@3900x 22-12-21T21:52:46.652Z:~/prgs/rust/myrepos/exper_hsm (main)
$ cargo run --example file-stream-producer
   Compiling hsm0-with-executor v0.8.0 (/home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor)
    Finished dev [unoptimized + debuginfo] target(s) in 0.52s
     Running `target/debug/examples/file-stream-producer`
[2022-12-21T21:53:13.272500135Z INFO  file_stream_producer  307  1] main:+
[2022-12-21T21:53:13.272547944Z INFO  file_stream_producer  312  1] new: fsp=RefCell { value: FileStreamProducer { tx: Sender { .. }, rx: Receiver { .. }, partner_tx: None, file: None, buffers: [] } }
[2022-12-21T21:53:13.272661757Z INFO  file_stream_producer  319  2] efsp thread:+
[2022-12-21T21:53:13.272701532Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Open { file_name: "hello.txt", buf_count: 2, buf_capacity: 3, partner_tx: Sender { .. } }
[2022-12-21T21:53:13.272730326Z INFO  file_stream_producer  157  2] open: file_name=hello.txt
[2022-12-21T21:53:13.272741507Z INFO  file_stream_producer  174  2] open: buf_count=2 buf_capacity=3
[2022-12-21T21:53:13.272753399Z INFO  file_stream_producer  185  2] open: &buf[0]: 0x7f2ec4000e40 [0, 1, 2]
[2022-12-21T21:53:13.272766964Z INFO  file_stream_producer  185  2] open: &buf[0]: 0x7f2ec4000e80 [3, 4, 5]
[2022-12-21T21:53:13.272777785Z INFO  file_stream_producer  189  2] open: Handled Messages::Open transition to 'wait_for_start'
[2022-12-21T21:53:13.272791550Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Start
[2022-12-21T21:53:13.272802371Z INFO  file_stream_producer  203  2] wait_for_start: Got Start, tranistion to 'read'
[2022-12-21T21:53:13.272811939Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Read
[2022-12-21T21:53:13.272820935Z INFO  file_stream_producer  218  2] read: before read len=3 &buf[0]: 0x7f2ec4000e80 [3, 4, 5]
[2022-12-21T21:53:13.277947080Z INFO  file_stream_producer  229  2] read:  after read len=3 &buf[0]: 0x7f2ec4000e80 [48, 65, 6C]
[2022-12-21T21:53:13.277961036Z INFO  file_stream_producer  253  2] read: Send Data 3 to partner
[2022-12-21T21:53:13.277983789Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Read
[2022-12-21T21:53:13.277990591Z INFO  file_stream_producer  218  2] read: before read len=3 &buf[0]: 0x7f2ec4000e40 [0, 1, 2]
[2022-12-21T21:53:13.277987646Z INFO  file_stream_producer  348  1] main: Data 3 0x7f2ec4000e80 [48, 65, 6C]
[2022-12-21T21:53:13.277999488Z INFO  file_stream_producer  229  2] read:  after read len=3 &buf[0]: 0x7f2ec4000e40 [6C, 6F, 20]
[2022-12-21T21:53:13.278007112Z INFO  file_stream_producer  253  2] read: Send Data 3 to partner
[2022-12-21T21:53:13.278016009Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Empty { buf: [48, 65, 6C] }
[2022-12-21T21:53:13.278017842Z INFO  file_stream_producer  348  1] main: Data 3 0x7f2ec4000e40 [6C, 6F, 20]
[2022-12-21T21:53:13.278024094Z INFO  file_stream_producer  281  2] read: unhandled Empty { buf: [48, 65, 6C] }
[2022-12-21T21:53:13.278032390Z INFO  file_stream_producer  124  2] base: Messages::Empty: &buf[0]: 0x7f2ec4000e80 [48, 65, 6C]
[2022-12-21T21:53:13.278041958Z INFO  file_stream_producer  126  2] base: Messages::Empty:   &x[0]: 0x7f2ec4000ea0 [48, 65, 6C]
[2022-12-21T21:53:13.278049812Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Read
[2022-12-21T21:53:13.278055483Z INFO  file_stream_producer  218  2] read: before read len=3 &buf[0]: 0x7f2ec4000ea0 [48, 65, 6C]
[2022-12-21T21:53:13.278063298Z INFO  file_stream_producer  229  2] read:  after read len=3 &buf[0]: 0x7f2ec4000ea0 [57, 6F, 72]
[2022-12-21T21:53:13.278070411Z INFO  file_stream_producer  253  2] read: Send Data 3 to partner
[2022-12-21T21:53:13.278078766Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Empty { buf: [6C, 6F, 20] }
[2022-12-21T21:53:13.278081141Z INFO  file_stream_producer  348  1] main: Data 3 0x7f2ec4000ea0 [57, 6F, 72]
[2022-12-21T21:53:13.278086271Z INFO  file_stream_producer  281  2] read: unhandled Empty { buf: [6C, 6F, 20] }
[2022-12-21T21:53:13.278094045Z INFO  file_stream_producer  124  2] base: Messages::Empty: &buf[0]: 0x7f2ec4000e40 [6C, 6F, 20]
[2022-12-21T21:53:13.278101269Z INFO  file_stream_producer  126  2] base: Messages::Empty:   &x[0]: 0x559baa5a0b50 [6C, 6F, 20]
[2022-12-21T21:53:13.278108823Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Read
[2022-12-21T21:53:13.278114513Z INFO  file_stream_producer  218  2] read: before read len=3 &buf[0]: 0x559baa5a0b50 [6C, 6F, 20]
[2022-12-21T21:53:13.278122418Z INFO  file_stream_producer  229  2] read:  after read len=3 &buf[0]: 0x559baa5a0b50 [6C, 64, 21]
[2022-12-21T21:53:13.278129421Z INFO  file_stream_producer  253  2] read: Send Data 3 to partner
[2022-12-21T21:53:13.278137837Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Empty { buf: [57, 6F, 72] }
[2022-12-21T21:53:13.278139971Z INFO  file_stream_producer  348  1] main: Data 3 0x559baa5a0b50 [6C, 64, 21]
[2022-12-21T21:53:13.278145371Z INFO  file_stream_producer  281  2] read: unhandled Empty { buf: [57, 6F, 72] }
[2022-12-21T21:53:13.278152825Z INFO  file_stream_producer  124  2] base: Messages::Empty: &buf[0]: 0x7f2ec4000ea0 [57, 6F, 72]
[2022-12-21T21:53:13.278160019Z INFO  file_stream_producer  126  2] base: Messages::Empty:   &x[0]: 0x559baa5a0b70 [57, 6F, 72]
[2022-12-21T21:53:13.278167643Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Read
[2022-12-21T21:53:13.278173504Z INFO  file_stream_producer  218  2] read: before read len=3 &buf[0]: 0x559baa5a0b70 [57, 6F, 72]
[2022-12-21T21:53:13.278181248Z INFO  file_stream_producer  229  2] read:  after read len=1 &buf[0]: 0x559baa5a0b70 [A]
[2022-12-21T21:53:13.278187781Z INFO  file_stream_producer  236  2] read: EOF
[2022-12-21T21:53:13.278193080Z INFO  file_stream_producer  238  2] read: EOF Send 1 bytes to partner
[2022-12-21T21:53:13.278201256Z INFO  file_stream_producer  249  2] read: EOF transitition to 'open'
[2022-12-21T21:53:13.278204021Z INFO  file_stream_producer  354  1] main: Done result=true
[2022-12-21T21:53:13.278208970Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=Empty { buf: [6C, 64, 21] }
[2022-12-21T21:53:13.278217145Z INFO  file_stream_producer  124  2] base: Messages::Empty: &buf[0]: 0x559baa5a0b50 [6C, 64, 21]
[2022-12-21T21:53:13.278224068Z INFO  file_stream_producer  126  2] base: Messages::Empty:   &x[0]: 0x559baa5a0b70 [6C, 64, 21]
[2022-12-21T21:53:13.278231182Z INFO  file_stream_producer  321  2] efsp thread:  recv msg=StopThread
[2022-12-21T21:53:13.278236632Z INFO  file_stream_producer  134  2] base: Messages::StopThread IGNORING open
[2022-12-21T21:53:13.278241832Z INFO  file_stream_producer  325  2] efsp thread: Stopping
[2022-12-21T21:53:13.278247162Z INFO  file_stream_producer  331  2] efsp thread:-
[2022-12-21T21:53:13.278285163Z INFO  file_stream_producer  364  1] main:-

defer-msgs

wink@3900x 22-12-21T21:50:23.580Z:~/prgs/rust/myrepos/exper_hsm (main)
$ cargo run --example defer-msgs
   Compiling hsm0-with-executor v0.8.0 (/home/wink/prgs/rust/myrepos/exper_hsm/hsm0_with_executor)
    Finished dev [unoptimized + debuginfo] target(s) in 0.51s
     Running `target/debug/examples/defer-msgs`
[2022-12-21T21:52:46.646380636Z INFO  defer_msgs   91  1] main:+
[2022-12-21T21:52:46.646420881Z INFO  defer_msgs   35  1] new: inital state=starting idxs_enter_fns=[0]
[2022-12-21T21:52:46.646429618Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646437462Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646443443Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646448463Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646454013Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646459243Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646464513Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646469402Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646474632Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646479491Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646484821Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646489680Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646494900Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646499799Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646505069Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646510078Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646515288Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646520267Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646525457Z INFO  defer_msgs   47  1] deferring: Messages::DeferredValue:+ val=1
[2022-12-21T21:52:46.646530326Z INFO  defer_msgs   99  1] main: Sent DeferredValue { val: 1 }
[2022-12-21T21:52:46.646536036Z INFO  defer_msgs   52  1] deferring: Messages::Complete, transition to do_deferred_work
[2022-12-21T21:52:46.646542839Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=1
[2022-12-21T21:52:46.646548079Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=2
[2022-12-21T21:52:46.646553289Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=3
[2022-12-21T21:52:46.646558608Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=4
[2022-12-21T21:52:46.646563748Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=5
[2022-12-21T21:52:46.646568898Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=6
[2022-12-21T21:52:46.646574047Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=7
[2022-12-21T21:52:46.646579317Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=8
[2022-12-21T21:52:46.646584447Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=9
[2022-12-21T21:52:46.646589606Z INFO  defer_msgs   67  1] do_deferred_work: Messages::DeferredValue:+ val=1 self.val=10
[2022-12-21T21:52:46.646594946Z INFO  defer_msgs   77  1] do_deferred_work: Messages::Complete, sending Done { val: 10 }, transition to deferring
[2022-12-21T21:52:46.646603733Z INFO  defer_msgs  105  1] main: Sent Complete { tx: Sender { .. } }
[2022-12-21T21:52:46.646609373Z INFO  defer_msgs  111  1] main: Got Expected reponse=Done { val: 10 }
[2022-12-21T21:52:46.646614653Z INFO  defer_msgs  127  1] main: rx.try_recv() got the expected TryRecvError::Empty, e=Empty
[2022-12-21T21:52:46.646619552Z INFO  defer_msgs  136  1] main:- result_value=10

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.