@@ -12,76 +12,47 @@ let logger = Log.create "Replicate.Tests"
1212
1313let context = Context.defaultContext.ClContext
1414
15- let testCases =
16- let q = Context.defaultContext.Queue
17- q.Error.Add( fun e -> failwithf " %A " e)
18-
19- let getReplicateFun replicate =
20- fun ( array : array < _ >) ->
21- let wgSize =
22- [| for i in 0 .. 5 -> pown 2 i |]
23- |> Array.filter ( fun i -> array.Length % i = 0 )
24- |> Array.max
15+ let q = Context.defaultContext.Queue
2516
26- replicate wgSize q HostInterop
17+ let workGroupSize = 32
2718
28- let makeTest getReplicateFun ( array : array < 'a >) filterFun i =
29- if array.Length > 0 && i > 0 then
30- use clArray = context.CreateClArray array
19+ let makeTest < 'a when 'a : equality > replicateFun ( array : array < 'a >) i =
20+ if array.Length > 0 && i > 0 then
21+ use clArray = context.CreateClArray array
3122
32- let replicate = getReplicateFun array
23+ let actual =
24+ use clActual: ClArray < 'a > = replicateFun q HostInterop clArray i
3325
34- let actual =
35- use clActual: ClArray < 'a > = replicate clArray i
26+ let actual = Array.zeroCreate clActual.Length
27+ q.PostAndReply ( fun ch -> Msg.CreateToHostMsg ( clActual, actual , ch ))
3628
37- let actual = Array.zeroCreate clActual.Length
38- q.PostAndReply( fun ch -> Msg.CreateToHostMsg( clActual, actual, ch))
29+ logger.debug (
30+ eventX $" Actual is {actual}"
31+ >> setField " actual" $" %A {actual}"
32+ )
3933
40- logger.debug (
41- eventX $" Actual is {actual}"
42- >> setField " actual" $" %A {actual}"
43- )
34+ let expected =
35+ array |> Array.replicate i |> Array.concat
4436
45- let expected =
46- array
47- |> Array.replicate i
48- |> Array.concat
49- |> filterFun
37+ $" Array should contains %i {i} copies of the original one"
38+ |> Expect.sequenceEqual actual expected
5039
51- let actual = filterFun actual
40+ let createTest < 'a when 'a : equality > =
41+ ClArray.replicate context workGroupSize
42+ |> makeTest< 'a>
43+ |> testProperty $" Correctness test on random %A {typeof<'a>} arrays"
5244
53- $" Array should contains %i {i} copies of the original one"
54- |> Expect.sequenceEqual actual expected
55-
56- [ testProperty " Correctness test on random int arrays"
57- <| ( let replicate = ClArray.replicate context
58- let getReplicateFun = getReplicateFun replicate
59- fun ( array : array < int >) -> makeTest getReplicateFun array id)
60-
61- testProperty " Correctness test on random bool arrays"
62- <| ( let replicate = ClArray.replicate context
63- let getReplicateFun = getReplicateFun replicate
45+ let testCases =
46+ q.Error.Add( fun e -> failwithf " %A " e)
6447
65- fun ( array : array < bool >) -> makeTest getReplicateFun array id)
48+ [ createTest< int>
49+ createTest< bool>
6650
6751 if Utils.isFloat64Available context.ClDevice then
68- testProperty " Correctness test on random float arrays"
69- <| ( let replicate = ClArray.replicate context
70- let getReplicateFun = getReplicateFun replicate
71-
72- fun ( array : array < float >) -> makeTest getReplicateFun array ( Array.filter System.Double.IsNormal))
73-
74- testProperty " Correctness test on random float32 arrays"
75- <| ( let replicate = ClArray.replicate context
76- let getReplicateFun = getReplicateFun replicate
77-
78- fun ( array : array < float32 >) -> makeTest getReplicateFun array ( Array.filter System.Single.IsNormal))
79-
80- testProperty " Correctness test on random byte arrays"
81- <| ( let replicate = ClArray.replicate context
82- let getReplicateFun = getReplicateFun replicate
52+ createTest< float>
8353
84- fun ( array : array < byte >) -> makeTest getReplicateFun array id) ]
54+ createTest< float32>
55+ createTest< byte> ]
8556
8657let tests =
87- testCases |> testList " Array .replicate tests"
58+ testCases |> testList " ClArray .replicate tests"
0 commit comments