Skip to content

Commit ecd5ba0

Browse files
Danil-Zaripovgsvgit
authored andcommitted
Assume folder is associative
1 parent d867a60 commit ecd5ba0

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

QuadTree.Tests/Tests.Matrix.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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)

QuadTree/Matrix.fs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff 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 = 0UL then
190+
let rec foldValue size accum =
191+
if size = 1UL then
192192
accum
193193
else
194-
foldArea (count - 1UL) (folder accum v)
194+
let halfSize = size / 2UL
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 / 2UL
199201

QuadTree/TriangleCount.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)