This is day 5 of the Advent of Code 2017. If you want to read about the puzzles, start with Day 1.
As I worked through the puzzles, I decided that I should be testing using their test sets and solving the issues that way. This lets me use the sample data, but also add in my own sets to cover strange situations.
Here are the tests that I used for each part.
Part I
For part 1, only a short test is needed. Since we’re looking for a scalar value, I could easily just added an INT variable for the actual and expected values. I set this to the value given in the problem.
Then I fake the table and insert the test set. From here, I can call my proc that implements the algorithm and get the result value.
EXEC tsqlt.NewTestClass @ClassName = N'tDay5'; GO CREATE OR ALTER PROCEDURE tDay5.[test day5 a initial set] AS BEGIN -- Assemble DECLARE @actual INT = 0, @expected INT = 5; EXEC tsqlt.FakeTable @TableName = N'Day5' , @Identity = 1 INSERT Day5 VALUES (0 ), (3), (0), (1), (-3); -- Act EXEC @actual = SolveDay5a; -- Assert EXEC tsqlt.AssertEquals @Expected = @expected, @Actual = @actual, @Message = N'Failed to account' END
Part II
The test is the same, just calling a different procedure that implements the part II algorithm.
CREATE OR ALTER PROCEDURE tDay5.[test day5 initial set] AS BEGIN -- Assemble DECLARE @actual INT = 0, @expected INT = 10; EXEC tsqlt.FakeTable @TableName = N'Day5' , @Identity = 1 INSERT Day5 VALUES (0 ), (3), (0), (1), (-3); -- Act EXEC @actual = SolveDay5b; -- Assert EXEC tsqlt.AssertEquals @Expected = @expected, @Actual = @actual, @Message = N'Failed to account' END