import Test. QuickCheck. Gen( generate, shuffle)
import Control
. Monad ( forM
, forM
_ ) import Control. Concurrent( newChan, writeChan, readChan, forkIO, threadDelay)
import Data. Time. Clock( getCurrentTime, utctDayTime)
sleepSort unit xs = do
chan <- newChan
forM_ xs $ \x -> forkIO $ do
threadDelay ( x * unit * 1000 )
writeChan chan x
forM xs
. const $ readChan chan
main = do
src <- generate . shuffle $ [ 1 .. 1000 ]
go m = do
t1 <- utctDayTime <$> getCurrentTime
out <- sleepSort m src
t2 <- utctDayTime <$> getCurrentTime
if ( sorted out)
go 1
{-
m = 1 ... 1.008547611s (failed)
m = 2 ... 2.003697498s (failed)
m = 3 ... 3.004868516s (failed)
m = 4 ... 4.004364411s (failed)
m = 5 ... 5.00563169s (failed)
m = 6 ... 6.005584285s (done)
-}
aW1wb3J0IFRlc3QuUXVpY2tDaGVjay5HZW4oZ2VuZXJhdGUsc2h1ZmZsZSkKaW1wb3J0IENvbnRyb2wuTW9uYWQoZm9yTSxmb3JNXykKaW1wb3J0IENvbnRyb2wuQ29uY3VycmVudChuZXdDaGFuLHdyaXRlQ2hhbixyZWFkQ2hhbixmb3JrSU8sdGhyZWFkRGVsYXkpCmltcG9ydCBEYXRhLlRpbWUuQ2xvY2soZ2V0Q3VycmVudFRpbWUsdXRjdERheVRpbWUpCgpzbGVlcFNvcnQgdW5pdCB4cyA9IGRvCiAgY2hhbiA8LSBuZXdDaGFuCiAgZm9yTV8geHMgJCBceCAtPiBmb3JrSU8gJCBkbwogICAgdGhyZWFkRGVsYXkgKHggKiB1bml0ICogMTAwMCkKICAgIHdyaXRlQ2hhbiBjaGFuIHgKICBmb3JNIHhzIC4gY29uc3QgJCByZWFkQ2hhbiBjaGFuCgptYWluID0gZG8KICBzcmMgPC0gZ2VuZXJhdGUgLiBzaHVmZmxlICQgWzEuLjEwMDBdCiAgbGV0IHNvcnRlZCB4cyA9IGFuZCAuIHppcFdpdGggKDw9KSB4cyAkIHRhaWwgeHMKICAgICAgZ28gbSA9IGRvCiAgICAgICAgdDEgIDwtIHV0Y3REYXlUaW1lIDwkPiBnZXRDdXJyZW50VGltZQogICAgICAgIG91dCA8LSBzbGVlcFNvcnQgbSBzcmMKICAgICAgICB0MiAgPC0gdXRjdERheVRpbWUgPCQ+IGdldEN1cnJlbnRUaW1lCgogICAgICAgIHB1dFN0ciAoIm0gPSAiICsrIHNob3cgbSArKyAiIC4uLiAiICsrIHNob3cgKHQyLXQxKSkKICAgICAgICBpZiAoc29ydGVkIG91dCkKICAgICAgICB0aGVuIHB1dFN0ckxuICIgKGRvbmUpIgogICAgICAgIGVsc2UgcHV0U3RyTG4gIiAoZmFpbGVkKSIgPj4gZ28gKG0rMSkKCiAgZ28gMQoKey0KICBtID0gMSAuLi4gMS4wMDg1NDc2MTFzIChmYWlsZWQpCiAgbSA9IDIgLi4uIDIuMDAzNjk3NDk4cyAoZmFpbGVkKQogIG0gPSAzIC4uLiAzLjAwNDg2ODUxNnMgKGZhaWxlZCkKICBtID0gNCAuLi4gNC4wMDQzNjQ0MTFzIChmYWlsZWQpCiAgbSA9IDUgLi4uIDUuMDA1NjMxNjlzIChmYWlsZWQpCiAgbSA9IDYgLi4uIDYuMDA1NTg0Mjg1cyAoZG9uZSkKLX0K