F# - Sudoku Solver using search trees Step Four: Adding more Unit Tests

Post date: Jan 29, 2012 9:39:33 PM

Part one: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-one-Defining-the-datastructure

Part two: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-two-The-algorithm

Part Three: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-Three-Adding-Unit-Tests

Part Four: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-Four-Adding-more-Unit-Tests

Part Five: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-Five-Defining-the-data-structure-for-the-complete-problem

Part Six: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-Six-Solving-Sudoku

Party Seven: https://sites.google.com/site/mrmbookmarks/msg/F---Sudoku-Solver-using-search-trees-Step-Seven-Increasing-performance-using-parallel-tasks

Full Source: http://code.google.com/p/peter-henell-f-sharp-sudoku-solver/source/browse/#git%2FSearchTrees

Adding a few test cases for the Node type aswell.

module NodeTests open DataStructure open NUnit.Framework open FsUnit [<TestFixture>]type NodeFixture() = let nStart = new Node(new SodukoProblem(1, 0, 0, 0, 0, 0, 0, 0, 0) ) let nGoal = new Node(new SodukoProblem(1, 2, 3, 4, 5, 6, 7, 8, 9) ) let valueInMiddleNode = new Node(new SodukoProblem(0, 0, 0, 0, 5, 0, 0, 0, 0) ) let threeValuesNode = new Node(new SodukoProblem(0, 4, 0, 0, 5, 0, 3, 0, 0) ) let almostGoalNode = new Node(new SodukoProblem(1, 4, 2, 6, 5, 7, 3, 9, 0) ) [<Test>] member this. ``Based on known states of the Node isGoal should be true``() = nStart.isGoal |> should equal false nGoal.isGoal |> should equal true [<Test>] member this. ``Should create 8 child nodes based on a node with one value``() = let children = nStart.getChildren let randomChildren = valueInMiddleNode.getChildren children |> should haveLength 8 randomChildren |> should haveLength 8 [<Test>] member this. ``Should create some child nodes based on a node with some values``() = let someChildren = threeValuesNode.getChildren someChildren |> should haveLength 6 [<Test>] member this. ``Should create one child node when all but one slots are filled``() = let oneChild = almostGoalNode.getChildren oneChild |> should haveLength 1 [<Test>] member this. ``Should create goal child node when all but one slots are filled``() = let goalChild = almostGoalNode.getChildren goalChild.Head.isGoal |> should equal true [<Test>] member this. ``Two nodes should only be equal if they have the same values in the same spots``() = let first = new Node(new SodukoProblem(1, 0, 0, 0, 0, 0, 0, 0, 0) ) let second = new Node(new SodukoProblem(1, 0, 0, 0, 0, 0, 0, 0, 0) ) first.equalTo second |> should equal true first.equalTo first |> should equal true let first = new Node(new SodukoProblem(1, 2, 3, 4, 5, 6, 7, 0, 0) ) let second = new Node(new SodukoProblem(1, 0, 0, 0, 0, 0, 0, 0, 0) ) first.equalTo second |> should equal false let first = new Node(new SodukoProblem(0, 1, 0, 0, 0, 0, 0, 0, 0) ) let second = new Node(new SodukoProblem(1, 0, 0, 0, 0, 0, 0, 0, 0) ) first.equalTo second |> should equal false