feat(fsharp): m01-m06 util, model, rules, random, spawn, game, view with Expecto tests
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
183821737e
commit
9cbefeb2be
@@ -0,0 +1,34 @@
|
||||
module Snake.Tests.M01Util
|
||||
|
||||
open Expecto
|
||||
open Snake
|
||||
open Snake.Model
|
||||
|
||||
// The JavaScript m01 also has `pipe` and `compose`; in F# they are built in as `|>` and `>>`, so there is nothing to test.
|
||||
|
||||
let private sameParity a b = a % 2 = b % 2
|
||||
|
||||
[<Tests>]
|
||||
let tests =
|
||||
testList "M01 Util" [
|
||||
testCase "range 0 is empty" (fun () -> Expect.equal (Util.range 0) [] "range 0")
|
||||
testCase "range 3 counts from zero up to n-1" (fun () -> Expect.equal (Util.range 3) [ 0; 1; 2 ] "range 3")
|
||||
|
||||
testCase "dropLast of an empty list is empty" (fun () ->
|
||||
Expect.equal (Util.dropLast ([]: int list)) [] "dropLast []")
|
||||
testCase "dropLast removes only the last element" (fun () ->
|
||||
Expect.equal (Util.dropLast [ 1; 2; 3 ]) [ 1; 2 ] "dropLast [1;2;3]")
|
||||
testCase "dropLast leaves its input untouched" (fun () ->
|
||||
let xs = [ 1; 2; 3 ]
|
||||
Expect.equal (Util.dropLast xs) [ 1; 2 ] "result"
|
||||
Expect.equal xs [ 1; 2; 3 ] "input")
|
||||
|
||||
testCase "contains finds an element using the supplied equality" (fun () ->
|
||||
Expect.isTrue (Util.contains [ 1; 2; 3 ] 5 sameParity) "5 has the parity of 1")
|
||||
testCase "contains is false when no element is equal" (fun () ->
|
||||
Expect.isFalse (Util.contains [ 2; 4 ] 3 sameParity) "no odd element")
|
||||
testCase "contains is false for an empty list" (fun () ->
|
||||
Expect.isFalse (Util.contains [] 1 (=)) "empty list")
|
||||
testCase "contains compares structurally when given a structural equality" (fun () ->
|
||||
Expect.isTrue (Util.contains [ { X = 1; Y = 2 } ] { X = 1; Y = 2 } (=)) "same point")
|
||||
]
|
||||
Reference in New Issue
Block a user