USING: tools.test concurrency.flags concurrency.combinators kernel threads accessors calendar ; IN: concurrency.flags.tests :: flag-test-1 ( -- val ) :> f [ f raise-flag ] "Flag test" spawn drop f lower-flag f value>> ; { f } [ flag-test-1 ] unit-test :: flag-test-2 ( -- ? ) :> f [ 1 seconds sleep f raise-flag ] "Flag test" spawn drop f lower-flag f value>> ; { f } [ flag-test-2 ] unit-test :: flag-test-3 ( -- val ) :> f f raise-flag f value>> ; { t } [ flag-test-3 ] unit-test :: flag-test-4 ( -- val ) :> f [ f raise-flag ] "Flag test" spawn drop f wait-for-flag f value>> ; { t } [ flag-test-4 ] unit-test :: flag-test-5 ( -- val ) :> f [ 1 seconds sleep f raise-flag ] "Flag test" spawn drop f wait-for-flag f value>> ; { t } [ flag-test-5 ] unit-test { } [ { 1 2 } [ [ 1 seconds sleep raise-flag ] curry "Flag test" spawn drop ] [ [ wait-for-flag drop ] curry parallel-each ] bi ] unit-test