@@ -28,71 +28,110 @@ module BufferToArray =
2828 Expect.throwsT< ArgumentOutOfRangeException> ( fun _ -> buffer.ToArray( buffer.ElementType, 4 UL, offset = 1 UL * elementSize) |> ignore) " Expected out-of-range"
2929 Expect.throwsT< ArgumentOutOfRangeException> ( fun _ -> buffer.ToArray( buffer.ElementType, 2 UL, offset = 1 UL * elementSize, stride = 3 UL * elementSize) |> ignore) " Expected out-of-range"
3030
31- let testToArray ( referenceEqual : bool ) ( expected : 'T []) ( offset : uint64 ) ( stride : uint64 ) ( buffer : IBuffer ) =
32- let result = buffer.ToArray< 'T>( uint64 expected.Length , offset = offset, stride = stride)
31+ let testToArray ( referenceEqual : bool ) ( expected : 'T []) ( offset : uint64 ) ( stride : uint64 ) ( count : uint64 ) ( buffer : IBuffer ) =
32+ let result = buffer.ToArray< 'T>( count = count , offset = offset, stride = stride)
3333 Expect.equal result expected " Result not equal"
3434 Expect.equal ( obj.ReferenceEquals( result, expected)) referenceEqual " Unexpected reference equality"
3535
3636 let arrayBufferFull ( _ : IRuntime ) =
3737 let array = [| 0 ; 2 ; 4 ; 8 |]
38- ArrayBuffer array |> testToArray true array 0 UL 0 UL
38+ ArrayBuffer array |> testToArray true array 0 UL 0 UL 42 UL
3939
4040 let arrayBufferRange ( _ : IRuntime ) =
4141 let buffer = ArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
4242 let elementSize = uint64 buffer.ElementType.CLRSize
43- buffer |> testToArray false [| 2 ; 4 |] ( 1 UL * elementSize) 0 UL
43+ buffer |> testToArray false [| 2 ; 4 |] ( 1 UL * elementSize) 0 UL 2 UL
4444
4545 let arrayBufferStrided ( _ : IRuntime ) =
4646 let buffer = ArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
4747 let elementSize = uint64 buffer.ElementType.CLRSize
48- buffer |> testToArray false [| 2 ; 8 |] ( 1 UL * elementSize) ( 2 UL * elementSize)
48+ buffer |> testToArray false [| 2 ; 8 |] ( 1 UL * elementSize) ( 2 UL * elementSize) 2 UL
49+
50+ let arrayBufferOutOfRange ( _ : IRuntime ) =
51+ let buffer = ArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
52+ let elementSize = uint64 buffer.ElementType.CLRSize
53+ buffer |> testToArray false Array.empty< int> ( 4 UL * elementSize) elementSize 1 UL
54+ buffer |> testToArray false [| 4 |] ( 2 UL * elementSize) ( 2 UL * elementSize) 2 UL
55+
56+ let arrayBufferReinterpreted ( _ : IRuntime ) =
57+ let input = [| 0 ; 2 ; 4 ; 8 |]
58+ let output = input |> Array.map Fun.FloatFromBits
59+ ArrayBuffer input |> testToArray false output 0 UL 0 UL 42 UL
4960
5061 let nativeBufferFull ( _ : IRuntime ) =
5162 let array = [| 0 ; 2 ; 4 ; 8 |]
52- NativeArrayBuffer array |> testToArray false array 0 UL 0 UL
63+ NativeArrayBuffer array |> testToArray false array 0 UL 0 UL 42 UL
5364
5465 let nativeBufferRange ( _ : IRuntime ) =
5566 let buffer = NativeArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
5667 let elementSize = uint64 buffer.ElementType.CLRSize
57- buffer |> testToArray false [| 2 ; 4 |] ( 1 UL * elementSize) 0 UL
68+ buffer |> testToArray false [| 2 ; 4 |] ( 1 UL * elementSize) 0 UL 2 UL
5869
5970 let nativeBufferStrided ( _ : IRuntime ) =
6071 let buffer = NativeArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
6172 let elementSize = uint64 buffer.ElementType.CLRSize
62- buffer |> testToArray false [| 2 ; 8 |] ( 1 UL * elementSize) ( 2 UL * elementSize)
73+ buffer |> testToArray false [| 2 ; 8 |] ( 1 UL * elementSize) ( 2 UL * elementSize) 2 UL
74+
75+ let nativeBufferOutOfRange ( _ : IRuntime ) =
76+ let buffer = NativeArrayBuffer [| 0 ; 2 ; 4 ; 8 |]
77+ let elementSize = uint64 buffer.ElementType.CLRSize
78+ buffer |> testToArray false Array.empty< int> ( 4 UL * elementSize) elementSize 1 UL
79+ buffer |> testToArray false [| 4 |] ( 2 UL * elementSize) ( 2 UL * elementSize) 2 UL
80+
81+ let nativeBufferReinterpreted ( _ : IRuntime ) =
82+ let input = [| 0 ; 2 ; 4 ; 8 |]
83+ let output = input |> Array.map Fun.FloatFromBits
84+ NativeArrayBuffer input |> testToArray false output 0 UL 0 UL 42 UL
6385
6486 let backendBufferFull ( runtime : IRuntime ) =
6587 let array = [| 0 ; 2 ; 4 ; 8 ; 16 ; 32 |]
6688 use buffer = runtime.PrepareBuffer( ArrayBuffer array)
67- buffer |> testToArray false array 0 UL 0 UL
89+ buffer |> testToArray false array 0 UL 0 UL 42 UL
6890
6991 let backendBufferRange ( runtime : IRuntime ) =
7092 let array = ArrayBuffer [| 0 ; 2 ; 4 ; 8 ; 16 ; 32 |]
7193 let elementSize = uint64 array.ElementType.CLRSize
7294 use buffer = runtime.PrepareBuffer( array)
73- buffer |> testToArray false [| 8 ; 16 |] ( 3 UL * elementSize) 0 UL
95+ buffer |> testToArray false [| 8 ; 16 |] ( 3 UL * elementSize) 0 UL 2 UL
7496
7597 let backendBufferStrided ( runtime : IRuntime ) =
7698 let array = ArrayBuffer [| 0 ; 2 ; 4 ; 8 ; 16 ; 32 |]
7799 let elementSize = uint64 array.ElementType.CLRSize
78100 use buffer = runtime.PrepareBuffer( array)
79- buffer |> testToArray false [| 2 ; 16 |] ( 1 UL * elementSize) ( 3 UL * elementSize)
80-
81- let tests ( backend : Backend ) =
82- [
83- " Invalid arguments" , Cases.invalidArgs
101+ buffer |> testToArray false [| 2 ; 16 |] ( 1 UL * elementSize) ( 3 UL * elementSize) 2 UL
84102
85- " ArrayBuffer full" , Cases.arrayBufferFull
86- " ArrayBuffer range" , Cases.arrayBufferRange
87- " ArrayBuffer strided" , Cases.arrayBufferStrided
103+ let backendBufferOutOfRange ( runtime : IRuntime ) =
104+ let array = ArrayBuffer [| 0 ; 2 ; 4 ; 8 ; 16 ; 32 |]
105+ let elementSize = uint64 array.ElementType.CLRSize
106+ use buffer = runtime.PrepareBuffer( array)
107+ buffer |> testToArray false Array.empty< int> ( 6 UL * elementSize) elementSize 1 UL
108+ buffer |> testToArray false [| 4 |] ( 2 UL * elementSize) ( 4 UL * elementSize) 2 UL
88109
89- " INativeBuffer full" , Cases.nativeBufferFull
90- " INativeBuffer range" , Cases.nativeBufferRange
91- " INativeBuffer strided" , Cases.nativeBufferStrided
110+ let backendBufferReinterpreted ( runtime : IRuntime ) =
111+ let array = ArrayBuffer [| 0 ; 2 ; 4 ; 8 ; 16 ; 32 |]
112+ use buffer = runtime.PrepareBuffer( array)
113+ let output = array.Data |> unbox< int[]> |> Array.map Fun.FloatFromBits
114+ buffer |> testToArray false output 0 UL 0 UL 42 UL
92115
93- " IBackendBuffer full" , Cases.backendBufferFull
94- " IBackendBuffer range" , Cases.backendBufferRange
95- " IBackendBuffer strided" , Cases.backendBufferStrided
116+ let tests ( backend : Backend ) =
117+ [
118+ " ArrayBuffer full" , Cases.arrayBufferFull
119+ " ArrayBuffer range" , Cases.arrayBufferRange
120+ " ArrayBuffer strided" , Cases.arrayBufferStrided
121+ " ArrayBuffer out-of-range" , Cases.arrayBufferOutOfRange
122+ " ArrayBuffer reinterpreted" , Cases.arrayBufferReinterpreted
123+
124+ " INativeBuffer full" , Cases.nativeBufferFull
125+ " INativeBuffer range" , Cases.nativeBufferRange
126+ " INativeBuffer strided" , Cases.nativeBufferStrided
127+ " INativeBuffer out-of-range" , Cases.nativeBufferOutOfRange
128+ " INativeBuffer reinterpreted" , Cases.nativeBufferReinterpreted
129+
130+ " IBackendBuffer full" , Cases.backendBufferFull
131+ " IBackendBuffer range" , Cases.backendBufferRange
132+ " IBackendBuffer strided" , Cases.backendBufferStrided
133+ " IBackendBuffer out-of-range" , Cases.backendBufferOutOfRange
134+ " IBackendBuffer reinterpreted" , Cases.backendBufferReinterpreted
96135
97136 ]
98137 |> prepareCases backend " ToArray"
0 commit comments