public void TestGetResponseFromSignal(
            int codeId, int signalId, int responseId, int numPeopleInFirstLine, int numPeopleInSecondLine, int numDifferentColors)
        {
            var code   = this.CreateOneWayCodeFromTestCase(codeDictionary[codeId]);
            var signal = this.CreateSignalFromTestCase(signalDictionary[signalId], numPeopleInFirstLine + 1);

            var citizenRandomHatSolver = new CitizenRandomHatSolver();

            var keySetOfFirstCode = citizenRandomHatSolver.GenerateAllPossibleHatAssignments(
                numPeopleInFirstLine,
                numDifferentColors,
                1);

            var response         = citizenRandomHatSolver.GetResponseFromSignal(signal, code, keySetOfFirstCode);
            var expectedResponse = this.CreateSignalFromTestCase(responseDictionary[responseId], 1);

            if (response == null && expectedResponse == null)
            {
                return;
            }

            Assert.AreEqual(response.Assignment.Length, expectedResponse.Assignment.Length);

            for (int i = 0; i < response.Assignment.Length; i++)
            {
                Assert.AreEqual(expectedResponse.Assignment[i].CitizenId, response.Assignment[i].CitizenId);
                Assert.AreEqual(expectedResponse.Assignment[i].HatColor, response.Assignment[i].HatColor);
            }
        }
        public void TestSolution(int codeId, int numDifferentColors, int numPeopleInFirstLine, int numPeopleInSecondLine, bool expectedResult)
        {
            var code1 = this.CreateOneWayCodeFromTestCase(codeDictionary[codeId]);
            var citizenRandomHatSolver = new CitizenRandomHatSolver();
            var code2 = citizenRandomHatSolver.GetSecondCodeFromFirstCode(code1, numDifferentColors);
            var code  = new CitizenRandomHatSolver.Code
            {
                Code1 = code1,
                Code2 = code2
            };
            var isCorrectCode = citizenRandomHatSolver.VerifySolution(code, (numPeopleInFirstLine + numPeopleInSecondLine), numDifferentColors);

            Assert.AreEqual(expectedResult, isCorrectCode);
        }