module DominoesTest open Xunit open FsUnit.Xunit open Dominoes [] let ``Empty input = empty output`` () = let actual = [] canChain actual |> should equal true [] let ``Singleton input = singleton output`` () = let actual = [(1, 1)] canChain actual |> should equal true [] let ``Singleton that can't be chained`` () = let actual = [(1, 2)] canChain actual |> should equal false [] let ``Three elements`` () = let actual = [(1, 2); (3, 1); (2, 3)] canChain actual |> should equal true [] let ``Can reverse dominoes`` () = let actual = [(1, 2); (1, 3); (2, 3)] canChain actual |> should equal true [] let ``Can't be chained`` () = let actual = [(1, 2); (4, 1); (2, 3)] canChain actual |> should equal false [] let ``Disconnected - simple`` () = let actual = [(1, 1); (2, 2)] canChain actual |> should equal false [] let ``Disconnected - double loop`` () = let actual = [(1, 2); (2, 1); (3, 4); (4, 3)] canChain actual |> should equal false [] let ``Disconnected - single isolated`` () = let actual = [(1, 2); (2, 3); (3, 1); (4, 4)] canChain actual |> should equal false [] let ``Need backtrack`` () = let actual = [(1, 2); (2, 3); (3, 1); (2, 4); (2, 4)] canChain actual |> should equal true [] let ``Separate loops`` () = let actual = [(1, 2); (2, 3); (3, 1); (1, 1); (2, 2); (3, 3)] canChain actual |> should equal true [] let ``Ten elements`` () = let actual = [(1, 2); (5, 3); (3, 1); (1, 2); (2, 4); (1, 6); (2, 3); (3, 4); (5, 6)] canChain actual |> should equal true