Skip to content

Commit a317ef3

Browse files
committed
Make tests sequenced; add teardown to tests
1 parent 4e3fd25 commit a317ef3

3 files changed

Lines changed: 70 additions & 105 deletions

File tree

src/GraphBLAS-sharp/Implementations.fs

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -37,52 +37,6 @@ type CSRMatrix<'a when 'a : struct and 'a : equality>(csrTuples: CSRFormat<'a>)
3737
let rowCount = base.RowCount
3838
let columnCount = base.ColumnCount
3939

40-
// let spMV (vector: DenseVector<'a>) (mask: Mask1D) (semiring: Semiring<'a>) : OpenCLEvaluation<Vector<'a>> =
41-
// let csrMatrixRowCount = rowCount
42-
// let csrMatrixColumnCount = columnCount
43-
// let vectorLength = vector.Size
44-
// if csrMatrixColumnCount <> vectorLength then
45-
// invalidArg
46-
// "vector"
47-
// (sprintf "Argument has invalid dimension. Need %i, but given %i" csrMatrixColumnCount vectorLength)
48-
49-
// let (BinaryOp plus) = semiring.PlusMonoid.Append
50-
// let (BinaryOp mult) = semiring.Times
51-
52-
// let resultVector = Array.zeroCreate<'a> csrMatrixRowCount
53-
// let command =
54-
// <@
55-
// fun (ndRange: _1D)
56-
// (resultBuffer: 'a[])
57-
// (csrValuesBuffer: 'a[])
58-
// (csrColumnsBuffer: int[])
59-
// (csrRowPointersBuffer: int[])
60-
// (vectorBuffer: 'a[]) ->
61-
62-
// let i = ndRange.GlobalID0
63-
// let mutable localResultBuffer = resultBuffer.[i]
64-
// for k in csrRowPointersBuffer.[i] .. csrRowPointersBuffer.[i + 1] - 1 do
65-
// localResultBuffer <- (%plus) localResultBuffer
66-
// ((%mult) csrValuesBuffer.[k] vectorBuffer.[csrColumnsBuffer.[k]])
67-
// resultBuffer.[i] <- localResultBuffer
68-
// @>
69-
70-
// let ndRange = _1D(csrMatrixRowCount)
71-
// let binder = fun kernelPrepare ->
72-
// kernelPrepare
73-
// ndRange
74-
// resultVector
75-
// csrTuples.Values
76-
// csrTuples.ColumnIndices
77-
// csrTuples.RowPointers
78-
// vector.Values
79-
80-
// opencl {
81-
// do! RunCommand command binder
82-
// return upcast DenseVector(resultVector, semiring.PlusMonoid)
83-
// }
84-
85-
// Not Implemented
8640
new(rows: int[], columns: int[], values: 'a[]) = CSRMatrix(CSRFormat.CreateEmpty())
8741
new(pathToMatrix: string) = CSRMatrix(CSRFormat.CreateEmpty())
8842

tests/GraphBLAS-sharp.Tests/OperationsTests/EWiseAddTests.fs

Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -82,50 +82,54 @@ let correctnessOnNumbers<'a when 'a : struct and 'a : equality>
8282
(case: OperationCase)
8383
(matrixA: 'a[,], matrixB: 'a[,]) =
8484

85-
let eWiseAdd (matrixA: 'a[,]) (matrixB: 'a[,]) =
86-
let l = matrixA |> Seq.cast<'a>
87-
let r = matrixB |> Seq.cast<'a>
85+
let eWiseAddNaive (matrixA: 'a[,]) (matrixB: 'a[,]) =
86+
let left = matrixA |> Seq.cast<'a>
87+
let right = matrixB |> Seq.cast<'a>
8888

89-
(l, r)
89+
(left, right)
9090
||> Seq.map2
9191
(fun x y ->
9292
if isZero x && isZero y then None
9393
else Some <| sum x y
9494
)
9595
|> Seq.choose id
9696

97-
let eWiseAddGb (matrixA: 'a[,]) (matrixB: 'a[,]) =
98-
let l = createMatrix<'a> case.MatrixCase [|matrixA; isZero|]
99-
let r = createMatrix<'a> case.MatrixCase [|matrixB; isZero|]
97+
let eWiseAddGB (matrixA: 'a[,]) (matrixB: 'a[,]) =
98+
try
99+
let left = createMatrix<'a> case.MatrixCase [|matrixA; isZero|]
100+
let right = createMatrix<'a> case.MatrixCase [|matrixB; isZero|]
100101

101-
logger.info (
102-
eventX "Left matrix is \n{matrix}"
103-
>> setField "matrix" l
104-
)
102+
logger.debug (
103+
eventX "Left matrix is \n{matrix}"
104+
>> setField "matrix" left
105+
)
105106

106-
logger.info (
107-
eventX "Right matrix is \n{matrix}"
108-
>> setField "matrix" r
109-
)
107+
logger.debug (
108+
eventX "Right matrix is \n{matrix}"
109+
>> setField "matrix" right
110+
)
111+
112+
opencl {
113+
let! result = left.EWiseAdd right None semiring
114+
let! tuples = result.GetTuples()
115+
return! tuples.ToHost()
116+
}
117+
|> oclContext.RunSync
118+
|> (fun tuples -> tuples.Values)
119+
|> Seq.ofArray
110120

111-
opencl {
112-
let! result = l.EWiseAdd r None semiring
113-
let! tuples = result.GetTuples()
114-
return! tuples.ToHost()
115-
}
116-
|> oclContext.RunSync
117-
|> (fun tuples -> tuples.Values)
118-
|> Seq.ofArray
121+
finally
122+
oclContext.Provider.CloseAllBuffers()
119123

120-
let expected = eWiseAdd matrixA matrixB
121-
let actual = eWiseAddGb matrixA matrixB
124+
let expected = eWiseAddNaive matrixA matrixB
125+
let actual = eWiseAddGB matrixA matrixB
122126

123-
logger.info (
127+
logger.debug (
124128
eventX "Expected result is {matrix}"
125129
>> setField "matrix" (sprintf "%A" <| List.ofSeq expected)
126130
)
127131

128-
logger.info (
132+
logger.debug (
129133
eventX "Actual result is {matrix}"
130134
>> setField "matrix" (sprintf "%A" <| List.ofSeq actual)
131135
)
@@ -141,45 +145,50 @@ let correctnessOnNumbers<'a when 'a : struct and 'a : equality>
141145
|> Expect.all difference isZero
142146

143147
let correctnessOnBool (case: OperationCase) (matrixA: bool[,], matrixB: bool[,]) =
144-
let eWiseAdd (matrixA: bool[,]) (matrixB: bool[,]) =
145-
let l = matrixA |> Seq.cast<bool>
146-
let r = matrixB |> Seq.cast<bool>
148+
let eWiseAddNaive (matrixA: bool[,]) (matrixB: bool[,]) =
149+
let left = matrixA |> Seq.cast<bool>
150+
let right = matrixB |> Seq.cast<bool>
147151

148-
(l, r)
152+
(left, right)
149153
||> Seq.map2 (||)
154+
|> Seq.filter id
150155

151-
let eWiseAddGb (matrixA: bool[,]) (matrixB: bool[,]) =
152-
let l = createMatrix<bool> case.MatrixCase [|matrixA; not|]
153-
let r = createMatrix<bool> case.MatrixCase [|matrixB; not|]
156+
let eWiseAddGB (matrixA: bool[,]) (matrixB: bool[,]) =
157+
try
158+
let left = createMatrix<bool> case.MatrixCase [|matrixA; not|]
159+
let right = createMatrix<bool> case.MatrixCase [|matrixB; not|]
154160

155-
logger.info (
156-
eventX "Left matrix is \n{matrix}"
157-
>> setField "matrix" l
158-
)
161+
logger.debug (
162+
eventX "Left matrix is \n{matrix}"
163+
>> setField "matrix" left
164+
)
159165

160-
logger.info (
161-
eventX "Right matrix is \n{matrix}"
162-
>> setField "matrix" r
163-
)
166+
logger.debug (
167+
eventX "Right matrix is \n{matrix}"
168+
>> setField "matrix" right
169+
)
170+
171+
opencl {
172+
let! result = left.EWiseAdd right None AnyAll.bool
173+
let! tuples = result.GetTuples()
174+
return! tuples.ToHost()
175+
}
176+
|> oclContext.RunSync
177+
|> (fun tuples -> tuples.Values)
178+
|> Seq.ofArray
164179

165-
opencl {
166-
let! result = l.EWiseAdd r None AnyAll.bool
167-
let! tuples = result.GetTuples()
168-
return! tuples.ToHost()
169-
}
170-
|> oclContext.RunSync
171-
|> (fun tuples -> tuples.Values)
172-
|> Seq.ofArray
180+
finally
181+
oclContext.Provider.CloseAllBuffers()
173182

174-
let expected = eWiseAdd matrixA matrixB
175-
let actual = eWiseAddGb matrixA matrixB
183+
let expected = eWiseAddNaive matrixA matrixB
184+
let actual = eWiseAddGB matrixA matrixB
176185

177-
logger.info (
186+
logger.debug (
178187
eventX "Expected result is {matrix}"
179188
>> setField "matrix" (sprintf "%A" <| List.ofSeq expected)
180189
)
181190

182-
logger.info (
191+
logger.debug (
183192
eventX "Actual result is {matrix}"
184193
>> setField "matrix" (sprintf "%A" <| List.ofSeq actual)
185194
)
@@ -191,7 +200,7 @@ let correctnessOnBool (case: OperationCase) (matrixA: bool[,], matrixB: bool[,])
191200
(expected, actual)
192201
||> Seq.map2 (<>)
193202

194-
logger.info (
203+
logger.debug (
195204
eventX "Difference result is {matrix}"
196205
>> setField "matrix" (sprintf "%A" <| List.ofSeq difference)
197206
)
@@ -202,23 +211,23 @@ let correctnessOnBool (case: OperationCase) (matrixA: bool[,], matrixB: bool[,])
202211
let config = {
203212
FsCheckConfig.defaultConfig with
204213
arbitrary = [typeof<PairOfSparseMatrices>]
205-
startSize = 10
214+
startSize = 0
206215
maxTest = 10
207216
}
208217

209218
// https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/language-specification/types#value-types
210219
let testFixtures case = [
211220
case
212221
|> correctnessOnNumbers<int> (+) (-) ((=) 0) AddMult.int
213-
|> ptestPropertyWithConfig config (sprintf "Correctness on int, %A, %A" case.MatrixCase case.MaskCase)
222+
|> testPropertyWithConfig config (sprintf "Correctness on int, %A, %A" case.MatrixCase case.MaskCase)
214223

215224
case
216225
|> correctnessOnNumbers<float> (+) (-) (fun x -> abs x < Accuracy.medium.absolute) AddMult.float
217-
|> ptestPropertyWithConfig config (sprintf "Correctness on float, %A, %A" case.MatrixCase case.MaskCase)
226+
|> testPropertyWithConfig config (sprintf "Correctness on float, %A, %A" case.MatrixCase case.MaskCase)
218227

219228
case
220229
|> correctnessOnBool
221-
|> testPropertyWithConfigStdGen (248983341, 296859677) config (sprintf "Correctness on bool, %A, %A" case.MatrixCase case.MaskCase)
230+
|> testPropertyWithConfig config (sprintf "Correctness on bool, %A, %A" case.MatrixCase case.MaskCase)
222231
]
223232

224233
let tests =

tests/GraphBLAS-sharp.Tests/Program.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ let allTests =
77
EWiseAdd.tests
88
]
99

10+
// sequenced test?
1011
[<EntryPoint>]
1112
let main argv =
1213
allTests
14+
|> testSequenced
1315
|> runTestsWithCLIArgs [] argv

0 commit comments

Comments
 (0)