Following your advice with the helper, I obtained the following form, wich in my opinion is really painful (sorry for long code block):
filter : Test
filter =
let
splitHelper length index =
let
rangeArray =
JsUint8Array.initialize length identity
biggerThanIndex n =
index < n
biggerArray =
JsTypedArray.filter biggerThanIndex rangeArray
smallerArray =
JsTypedArray.filter (not << biggerThanIndex) rangeArray
bigLength =
JsTypedArray.length biggerArray
smallLength =
JsTypedArray.length smallerArray
in
(smallLength, bigLength, biggerThanIndex, smallerArray, biggerArray)
in
describe "filter"
[ fuzz2 TestFuzz.length (Fuzz.intRange 0 255) "Sum of lengths equal original length" <|
\length index ->
let
(smallLength, bigLength, _, _, _) =
splitHelper length index
in
Expect.equal length (bigLength + smallLength)
, fuzz2 TestFuzz.length (Fuzz.intRange 0 255) "Bigger array contains bigger elements" <|
\length index ->
let
(_, _, biggerThanIndex, _, biggerArray) =
splitHelper length index
in
Expect.true "" <| JsTypedArray.all biggerThanIndex biggerArray
, fuzz2 TestFuzz.length (Fuzz.intRange 0 255) "Smaller array contains smaller elements" <|
\length index ->
let
(_, _, biggerThanIndex, smallerArray, _) =
splitHelper length index
in
Expect.false "" <| JsTypedArray.any biggerThanIndex smallerArray
]
I might have done it wrong but I’m not sure there is a better way of doing so.
Having specificity and granularity of failure in mind, I wonder if there is space in the API for a pair of functions like these:
Expect.allDescribed : List (Described Expectation) -> Expectation
Expect.describe : String -> Expectation -> Described Expectation
Which would be used like this:
Expect.allDescribed
[ Expect.describe "Sum of lengths equal original length" <|
Expect.equal length (bigLength + smallLength)
, Expect.describe "Bigger array contains bigger elements" <|
Expect.true "" <| JsTypedArray.all biggerThanIndex biggerArray
, Expect.describe "Smaller array contains smaller elements" <|
Expect.false "" <| JsTypedArray.any biggerThanIndex smallerArray
]
What do you think?