Skip to content

Commit a2f0c4a

Browse files
committed
added async test
1 parent 7576afc commit a2f0c4a

2 files changed

Lines changed: 80 additions & 1 deletion

File tree

src/Test/FSharp.Data.Adaptive.Tests/ASet.fs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,5 +636,82 @@ let ``[ASet] content bind``() =
636636
cnt |> should equal set.Count
637637

638638

639+
[<Test>]
640+
let ``[ASet] mapA/flattenA/chooseA async``() =
641+
642+
let set = cset<cval<int>>()
643+
644+
let out1 = set |> ASet.mapA (fun x -> x)
645+
let out2 = set |> ASet.map(fun x -> x :> IAdaptiveValue<_>) |> ASet.flattenA
646+
let out3 = set |> ASet.chooseA (fun x -> x |> AVal.map (fun v -> if (v % 2) = 0 then Some v else None))
647+
648+
let sw = System.Diagnostics.Stopwatch.StartNew()
649+
650+
System.Threading.Thread(System.Threading.ThreadStart(fun x ->
651+
while sw.ElapsedMilliseconds < 5000 do
652+
let res = out1 |> ASet.force
653+
//printfn "set count: %d output count: %d" set.Count res.Count
654+
//System.Threading.Thread.Sleep(1)
655+
()
656+
)).Start()
657+
658+
System.Threading.Thread(System.Threading.ThreadStart(fun x ->
659+
while sw.ElapsedMilliseconds < 5000 do
660+
let res = out2 |> ASet.force
661+
//printfn "set count: %d output count: %d" set.Count res.Count
662+
//System.Threading.Thread.Sleep(1)
663+
()
664+
)).Start()
665+
666+
System.Threading.Thread(System.Threading.ThreadStart(fun x ->
667+
while sw.ElapsedMilliseconds < 5000 do
668+
let res = out3 |> ASet.force
669+
//printfn "set count: %d output count: %d" set.Count res.Count
670+
//System.Threading.Thread.Sleep(1)
671+
()
672+
)).Start()
673+
674+
let rnd = System.Random(2)
675+
while sw.ElapsedMilliseconds < 5000 do
676+
//System.Threading.Thread.Sleep(1)
677+
678+
transact(fun () ->
679+
680+
let rndAction = rnd.Next(10)
681+
682+
if rndAction = 0 then // add
683+
//printfn "add"
684+
let value = rnd.Next() % 100
685+
let addItem = cval<int>(value)
686+
set.Add(addItem) |> ignore
687+
688+
elif rndAction = 1 then // rem
689+
if set.Count > 10 then
690+
//printfn "rem"
691+
let remIndex = rnd.Next(set.Count)
692+
let remItem = set.Value.ToArray()[remIndex]
693+
set.Remove(remItem) |> ignore
694+
695+
elif rndAction = 2 then // rem + change
696+
if set.Count > 1 then
697+
// !! potential crash !!
698+
//printfn "change + rem"
699+
let ind = rnd.Next(set.Count)
700+
let item = set.Value.ToArray()[ind]
701+
// NOTE: order of value change and remove does not matter, both variants cause the exception
702+
item.Value <- rnd.Next() % 100
703+
set.Remove(item) |> ignore
704+
705+
elif set.Count > 0 then // change
706+
//printfn "change"
707+
let changeIndex = rnd.Next(set.Count)
708+
let changeItem = set.Value.ToArray()[changeIndex]
709+
changeItem.Value <- rnd.Next() % 100
710+
)
711+
712+
//let res = out |> ASet.force
713+
714+
()
639715

716+
()
640717

src/Test/FSharp.Data.Adaptive.Tests/Program.fs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ let ``[AList] sub``() =
4848
[<EntryPoint>]
4949
let main _args =
5050

51-
``[AList] sub``();
51+
ASet.``[ASet] mapA/flattenA/chooseA async``()
52+
53+
//``[AList] sub``();
5254

5355

5456
//let a = cval [1;2;3;4]

0 commit comments

Comments
 (0)