@@ -11,6 +11,9 @@ open System.IO
1111open System.Text .RegularExpressions
1212open BenchmarkDotNet.Configs
1313open BenchmarkDotNet.Jobs
14+ open GraphBLAS.FSharp .Tests
15+ open FsCheck
16+ open Expecto
1417
1518type CommonConfig () =
1619 inherit ManualConfig()
@@ -36,6 +39,35 @@ type CommonConfig() =
3639 )
3740 |> ignore
3841
42+ type Config () =
43+ inherit ManualConfig()
44+
45+ do
46+ base .AddColumn(
47+ MatrixShapeColumn( " RowCount" , ( fun ( matrix , _ ) -> matrix.ReadMatrixShape() .RowCount)) :> IColumn,
48+ MatrixShapeColumn( " ColumnCount" , ( fun ( matrix , _ ) -> matrix.ReadMatrixShape() .ColumnCount)) :> IColumn,
49+ MatrixShapeColumn(
50+ " NNZ" ,
51+ fun ( matrix , _ ) ->
52+ match matrix.Format with
53+ | Coordinate -> matrix.ReadMatrixShape() .Nnz
54+ | Array -> 0
55+ )
56+ :> IColumn,
57+ MatrixShapeColumn(
58+ " SqrNNZ" ,
59+ fun ( _ , matrix ) ->
60+ match matrix.Format with
61+ | Coordinate -> matrix.ReadMatrixShape() .Nnz
62+ | Array -> 0
63+ )
64+ :> IColumn,
65+ TEPSColumn() :> IColumn,
66+ StatisticColumn.Min,
67+ StatisticColumn.Max
68+ )
69+ |> ignore
70+
3971type MatrixShapeColumn ( columnName : string , getShape : ( MtxReader * MtxReader ) -> int ) =
4072 interface IColumn with
4173 member this.AlwaysShow : bool = true
@@ -223,3 +255,56 @@ module Utils =
223255 random.NextBytes buffer
224256 System.BitConverter.ToSingle( buffer, 0 )
225257
258+ module VectorGenerator =
259+ let private pairOfVectorsOfEqualSize ( valuesGenerator : Gen < 'a >) createVector =
260+ gen {
261+ let! length = Gen.sized <| fun size -> Gen.constant size
262+
263+ let! leftArray = Gen.arrayOfLength length valuesGenerator
264+
265+ let! rightArray = Gen.arrayOfLength length valuesGenerator
266+
267+ return ( createVector leftArray, createVector rightArray)
268+ }
269+
270+ let intPair format =
271+ fun array -> Utils.createVectorFromArray format array ((=) 0 )
272+ |> pairOfVectorsOfEqualSize Arb.generate< int32>
273+
274+ let floatPair format =
275+ let normalFloatGenerator =
276+ ( Arb.Default.NormalFloat()
277+ |> Arb.toGen
278+ |> Gen.map float)
279+
280+ let fIsEqual x y = abs ( x - y) < Accuracy.medium.absolute || x = y
281+
282+ let createVector array = Utils.createVectorFromArray format array ( fIsEqual 0.0 )
283+
284+ pairOfVectorsOfEqualSize normalFloatGenerator createVector
285+
286+ module MatrixGenerator =
287+ let private pairOfMatricesOfEqualSizeGenerator ( valuesGenerator : Gen < 'a >) createMatrix =
288+ gen {
289+ let! nrows , ncols = Generators.dimension2DGenerator
290+ let! matrixA = valuesGenerator |> Gen.array2DOfDim ( nrows, ncols)
291+ let! matrixB = valuesGenerator |> Gen.array2DOfDim ( nrows, ncols)
292+ return ( createMatrix matrixA, createMatrix matrixB)
293+ }
294+
295+ let intPairOfEqualSizes format =
296+ fun array -> Utils.createMatrixFromArray2D format array ((=) 0 )
297+ |> pairOfMatricesOfEqualSizeGenerator Arb.generate< int32>
298+
299+ let floatPairOfEqualSizes format =
300+ let normalFloatGenerator =
301+ ( Arb.Default.NormalFloat()
302+ |> Arb.toGen
303+ |> Gen.map float)
304+
305+ let fIsEqual x y = abs ( x - y) < Accuracy.medium.absolute || x = y
306+
307+ fun array -> Utils.createMatrixFromArray2D format array ( fIsEqual 0.0 )
308+ |> pairOfMatricesOfEqualSizeGenerator normalFloatGenerator
309+
310+
0 commit comments