File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -282,7 +282,7 @@ let ``fold -> sum`` () =
282282
283283 let expected = 18
284284
285- let actual = Option.get <| Matrix.fold op_ add None m1
285+ let actual = Option.get <| Matrix.foldAssociative op_ add None m1
286286
287287 Assert.Equal( expected, actual)
288288
@@ -412,6 +412,6 @@ let ``Fold sum`` () =
412412
413413 let expected = 6
414414
415- let actual = fold op_ add None m1 |> Option.get
415+ let actual = foldAssociative op_ add None m1 |> Option.get
416416
417417 Assert.Equal( expected, actual)
Original file line number Diff line number Diff line change @@ -180,20 +180,22 @@ let map2 (matrix1: SparseMatrix<_>) (matrix2: SparseMatrix<_>) f =
180180 else
181181 ( Error.InconsistentSizeOfArguments( matrix1, matrix2)) |> Result.Failure
182182
183- let fold ( folder : 'State option -> 'T option -> 'State option ) ( state : 'State option ) ( matrix : SparseMatrix < 'T >) =
184- let rec traverse tree ( size : uint64 < storageSize >) ( state : 'State option ) =
183+ let foldAssociative ( folder : 'T option -> 'T option -> 'T option ) ( state : 'T option ) ( matrix : SparseMatrix < 'T >) =
184+ let rec traverse tree ( size : uint64 < storageSize >) ( state : 'T option ) =
185185 match tree with
186186 | Leaf Dummy -> state
187187 | Leaf( UserValue v) ->
188188 let area = ( uint64 size) * ( uint64 size)
189189
190- let rec foldArea count accum =
191- if count = 0 UL then
190+ let rec foldValue size accum =
191+ if size = 1 UL then
192192 accum
193193 else
194- foldArea ( count - 1 UL ) ( folder accum v )
194+ let halfSize = size / 2 UL
195195
196- foldArea area state
196+ foldValue halfSize ( folder accum accum)
197+
198+ folder state ( foldValue area v)
197199 | Node( nw, ne, sw, se) ->
198200 let halfSize = size / 2 UL
199201
Original file line number Diff line number Diff line change @@ -36,7 +36,7 @@ let triangle_count (graph: Matrix.SparseMatrix<_>) =
3636
3737 let result =
3838 match CMasked with
39- | Result.Success matrix -> Result.Success( Matrix.fold op_ add None matrix)
39+ | Result.Success matrix -> Result.Success( Matrix.foldAssociative op_ add None matrix)
4040 | Result.Failure e -> Result.Failure e
4141
4242 result
You can’t perform that action at this time.
0 commit comments