package Ġde . half bit . com achine . tests Ċ Ċ import Ġde . half bit . com achine . com achine Ċ import Ġde . half bit . com achine . start In Scope Ċ import Ġde . half bit . com achine . tests . utils . await Ċ import Ġde . half bit . com achine . tests . utils . execute Blocking Test Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . test . Test Ċ Ċ class ĠOn Enter Called In Concurrent Dispatcher Test Ġ{ ĊĊĠĠĠ Ġsealed Ġinterface ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠZero ( val Ġcount : ĠInt ) Ġ: ĠState ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠOne ( val Ġcount : ĠInt ) Ġ: ĠState ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠTwo ( val Ġcount : ĠInt ) Ġ: ĠState ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġinterface ĠEvent Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠOne Ġ: ĠEvent ĊĠĠĠĠĠĠĠ Ġobject ĠTwo Ġ: ĠEvent ĊĠĠĠĠĠĠĠ Ġobject ĠThree Ġ: ĠEvent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmachine Ġ= Ġcom achine < State , ĠEvent >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart With Ġ= ĠState . Zero ( count Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen In < State . Zero > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Enter Ġ{ Ġstate . update Ġ{ Ġcopy ( count Ġ= Ġcount Ġ+ Ġ 1 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Concurrent < Event . One > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition To Ġ{ ĠState . One ( count Ġ= Ġcount ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen In < State . One > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Enter Ġ{ Ġstate . update Ġ{ Ġcopy ( count Ġ= Ġcount Ġ+ Ġ 1 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Concurrent < Event . Two > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition To Ġ{ ĠState . Two ( count Ġ= Ġcount ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen In < State . Two > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Enter Ġ{ Ġstate . update Ġ{ Ġcopy ( count Ġ= Ġcount Ġ+ Ġ 1 ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Concurrent < Event . Three > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition To Ġ{ ĠState . Zero ( count Ġ= Ġcount ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexecute Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . state . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . start In Scope ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . send ( Event . One ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . await < State . One >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . send ( Event . Two ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . await < State . Two >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . send ( Event . Three ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmachine . await < State . Zero > Ġ{ Ġcount Ġ== Ġ 4 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }