Skip to content

Commit 430c3d5

Browse files
committed
Revert ArrayCollector for Fable
1 parent fae5515 commit 430c3d5

File tree

2 files changed

+38
-43
lines changed
  • src/FsToolkit.ErrorHandling
  • tests/FsToolkit.ErrorHandling.Tests

2 files changed

+38
-43
lines changed

src/FsToolkit.ErrorHandling/Seq.fs

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ let inline traverseResultM'
2626
| Error e -> Error e
2727
| Ok initialSuccesses ->
2828

29-
let mutable oks = ArrayCollector()
30-
oks.AddMany initialSuccesses
29+
let oks = ResizeArray(initialSuccesses)
3130
let mutable err = Unchecked.defaultof<'error>
3231
let mutable ok = true
3332
use e = xs.GetEnumerator()
@@ -40,7 +39,7 @@ let inline traverseResultM'
4039
err <- e
4140
ok <- false
4241

43-
if ok then Ok(oks.Close()) else Error err
42+
if ok then Ok(oks.ToArray()) else Error err
4443

4544
/// <summary>
4645
/// Applies a function to each element of a sequence and returns a single result
@@ -77,31 +76,29 @@ let inline traverseResultA'
7776

7877
match state with
7978
| Error failuresToDate ->
80-
let mutable errs = ArrayCollector()
81-
errs.AddMany failuresToDate
79+
let errs = ResizeArray failuresToDate
8280

8381
for x in xs do
8482
match f x with
8583
| Error e -> errs.Add e
8684
| Ok _ -> () // as the initial state was failure, oks are irrelevant
8785

88-
Error(errs.Close())
86+
Error(errs.ToArray())
8987
| Ok initialSuccesses ->
9088

91-
let mutable oks = ArrayCollector()
92-
oks.AddMany initialSuccesses
93-
let mutable errs = ArrayCollector()
94-
let mutable ok = true
89+
let oks = ResizeArray initialSuccesses
90+
let errs = ResizeArray()
9591

9692
for x in xs do
9793
match f x with
98-
| Ok r when ok -> oks.Add r
94+
| Ok r when errs.Count = 0 -> oks.Add r
9995
| Ok _ -> () // no point saving results we won't use given the end result will be Error
100-
| Error e ->
101-
errs.Add e
102-
ok <- false
96+
| Error e -> errs.Add e
10397

104-
if ok then Ok(oks.Close()) else Error(errs.Close())
98+
if errs.Count = 0 then
99+
Ok(oks.ToArray())
100+
else
101+
Error(errs.ToArray())
105102

106103
/// <summary>
107104
/// Applies a function to each element of a sequence and returns a single result
@@ -139,8 +136,7 @@ let inline traverseAsyncResultM'
139136
match! state with
140137
| Error e -> return Error e
141138
| Ok initialSuccesses ->
142-
let mutable oks = ArrayCollector()
143-
oks.AddMany initialSuccesses
139+
let oks = ResizeArray initialSuccesses
144140
let mutable err = Unchecked.defaultof<'error>
145141
let mutable ok = true
146142
use e = xs.GetEnumerator()
@@ -153,7 +149,7 @@ let inline traverseAsyncResultM'
153149
err <- e
154150
ok <- false
155151

156-
return if ok then Ok(oks.Close()) else Error err
152+
return if ok then Ok(oks.ToArray()) else Error err
157153
}
158154

159155
/// <summary>
@@ -194,8 +190,7 @@ let inline traverseTaskResultM'
194190
match! state with
195191
| Error e -> return Error e
196192
| Ok initialSuccesses ->
197-
let mutable oks = ArrayCollector()
198-
oks.AddMany initialSuccesses
193+
let oks = ResizeArray initialSuccesses
199194
let mutable err = Unchecked.defaultof<'error>
200195
let mutable ok = true
201196
use e = xs.GetEnumerator()
@@ -208,7 +203,7 @@ let inline traverseTaskResultM'
208203
err <- e
209204
ok <- false
210205

211-
return if ok then Ok(oks.Close()) else Error err
206+
return if ok then Ok(oks.ToArray()) else Error err
212207
}
213208

214209
/// <summary>
@@ -379,8 +374,7 @@ let inline traverseOptionM'
379374
match state with
380375
| None -> None
381376
| Some initialValues ->
382-
let mutable values = ArrayCollector()
383-
values.AddMany initialValues
377+
let values = ResizeArray initialValues
384378
let mutable ok = true
385379
use enumerator = xs.GetEnumerator()
386380

@@ -390,7 +384,7 @@ let inline traverseOptionM'
390384
| Some value -> values.Add value
391385
| None -> ok <- false
392386

393-
if ok then Some(values.Close()) else None
387+
if ok then Some(values.ToArray()) else None
394388

395389
/// <summary>
396390
/// Applies a function to each element of a sequence and returns a single option
@@ -428,8 +422,7 @@ let inline traverseAsyncOptionM'
428422
match! state with
429423
| None -> return None
430424
| Some initialValues ->
431-
let mutable values = ArrayCollector()
432-
values.AddMany initialValues
425+
let values = ResizeArray initialValues
433426
let mutable ok = true
434427
use enumerator = xs.GetEnumerator()
435428

@@ -439,7 +432,7 @@ let inline traverseAsyncOptionM'
439432
| Some value -> values.Add value
440433
| None -> ok <- false
441434

442-
return if ok then Some(values.Close()) else None
435+
return if ok then Some(values.ToArray()) else None
443436
}
444437

445438
/// <summary>

tests/FsToolkit.ErrorHandling.Tests/Seq.fs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -438,25 +438,11 @@ let traverseAsyncOptionMTests =
438438
| None -> do! Expect.hasAsyncNoneValue actual
439439
}
440440
]
441-
442-
let notifyFailure (PostId _) (UserId uId) =
443-
async {
444-
if
445-
(uId = userId1
446-
|| uId = userId3)
447-
then
448-
return
449-
sprintf "error: %s" (uId.ToString())
450-
|> Error
451-
else
452-
return Ok()
453-
}
441+
#if !FABLE_COMPILER
454442

455443
let traverseTaskResultATests =
456444
let notifyNewPostSuccess (PostId post) (UserId user) = TaskResult.ok (post, user)
457445

458-
let notifyNewPostFailure (PostId _) (UserId uId) = TaskResult.error $"error: %O{uId}"
459-
460446
let notifyFailure (PostId _) (UserId uId) =
461447
if
462448
uId = userId1
@@ -508,6 +494,19 @@ let traverseTaskResultATests =
508494
Expect.equal actual expected "Should have a sequence of errors"
509495
}
510496
]
497+
#endif
498+
let notifyFailure (PostId _) (UserId uId) =
499+
async {
500+
if
501+
(uId = userId1
502+
|| uId = userId3)
503+
then
504+
return
505+
sprintf "error: %s" (uId.ToString())
506+
|> Error
507+
else
508+
return Ok()
509+
}
511510

512511
let sequenceAsyncResultMTests =
513512
let userIds =
@@ -731,6 +730,7 @@ let sequenceAsyncResultATests =
731730
#if !FABLE_COMPILER
732731
let sequenceTaskResultATests =
733732
let notifyNewPostSuccess (PostId post) (UserId user) = TaskResult.ok (post, user)
733+
734734
let notifyFailure (PostId _) (UserId uId) =
735735
if
736736
uId = userId1
@@ -761,7 +761,9 @@ let sequenceTaskResultATests =
761761
Seq.map (notifyNewPostSuccess (PostId newPostId)) userIds
762762
|> Seq.sequenceTaskResultA
763763

764-
do! Expect.hasTaskOkValue expected actual |> Async.AwaitTask
764+
do!
765+
Expect.hasTaskOkValue expected actual
766+
|> Async.AwaitTask
765767
}
766768

767769
testCaseAsync "sequenceTaskResultA with few invalid data"

0 commit comments

Comments
 (0)