private static void CheckInitialize() { var sn = new SecretNumber(); var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[]; int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); if (number < 1 || number > 100) { ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); } } while (number >= 94); if (guessedNumbers != null && guessedNumbers != GetFieldValue(sn, "_guessedNumbers") as int[]) { ReportError("Initialize(): _guessedNumber återanvänds inte utan tilldelas en referens till en helt ny array."); } if (sn.Count != 0) { ReportError("Initialize(): Count initieras inte till 0."); } if (!sn.CanMakeGuess) { ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true."); } else { using (new NullOut()) { for (int i = 94; i <= 100; i++) { sn.MakeGuess(i); } } sn.Initialize(); if (sn.Count != 0) { ReportError("Initialize(): Count initieras inte till 0."); } if (!sn.CanMakeGuess) { ReportError("Initialize(): CanMakeGuess tilldelas inte värdet true."); } guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers"); foreach (var gn in guessedNumbers) { if (gn != 0) { ReportError("Initialize(): _guessedNumbers töms inte på gamla gissningar."); break; } } } }
private static void CheckMakeGuessOldGuess() { var sn = new SecretNumber(); int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); if (number < 1 || number > 100) { ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); } } while (number > 50); using (new NullOut()) { sn.MakeGuess(51); } var count = sn.Count; using (new NullOut()) { sn.MakeGuess(51); } if (count != sn.Count) { ReportError("MakeGuess(): En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning."); } }
private static void CheckGuessesLeft() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } if (sn.GuessesLeft != 7) { ReportError("Count: GuessesLeft är inte 7 trots att ingen gissning gjorts."); } int count = 0; for (int i = 94; i <= 100; i++) { using (new NullOut()) { sn.MakeGuess(i); } if (sn.Count != ++count) { ReportError(String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count)); } } }
public void CheckCountProperty() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } Assert.IsTrue(sn.Count == 0, "Egenskapen Count är inte 0 trots att ingen gissning gjorts."); int count = 0; for (int i = 94; i <= 100; i++) { CallMakeGuess(sn, i); Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count)); } try { CallMakeGuess(sn, number); Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs."); } catch (ApplicationException) { // Eat! return; } catch { // Eat! } Assert.Fail("ApplicationsException kastas inte då fler gissningar än sju görs."); }
public void CheckConstructor() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100."); var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers"); Assert.IsNotNull(guessedNumbers, "_guessedNumbers har inte initierats."); Assert.IsTrue(guessedNumbers.Length == 7, "_guessedNumbers har inte sju element."); }
private static void CheckMakeGuessRight() { var sn = new SecretNumber(); bool result; using (new NullOut()) { result = sn.MakeGuess((int)GetFieldValue(sn, "_number")); } if (!result) { ReportError("MakeGuess(): MakeGuess returnerar inte true då det gissade talet är lika med det hemliga talet."); } }
private static void CheckCount() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } if (sn.Count != 0) { ReportError("Count: Count är inte 0 trots att ingen gissning gjorts."); } int count = 0; for (int i = 94; i <= 100; i++) { using (new NullOut()) { sn.MakeGuess(i); } if (sn.Count != ++count) { ReportError(String.Format("Count: Count är inte {0} trots att {0} gissning(ar) gjorts.", count)); } } try { using (new NullOut()) { sn.MakeGuess(number); } } catch { // Eat! } if (sn.Count != 7) { ReportError("Count: Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs."); } }
private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1() { var sn = new SecretNumber(); try { using (new NullOut()) { sn.MakeGuess(0); } ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal mindre än 1."); } catch (ArgumentOutOfRangeException) { // Eat! } }
private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100() { var sn = new SecretNumber(); try { using (new NullOut()) { sn.MakeGuess(101); } } catch (ArgumentOutOfRangeException) { // Eat! return; } ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100."); }
private static void CheckCanMakeGuess() { var sn = new SecretNumber(); int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } while (number >= 94); bool result = false; using (new NullOut()) { for (int i = 94; i <= 100; i++) { if (!(result = sn.CanMakeGuess)) { break; } sn.MakeGuess(i); } } if (!result) { ReportError("CanMakeGuess: CanMakeGuess är false fast en gissning ska kunna göras."); } if (sn.CanMakeGuess) { ReportError("CanMakeGuess: CanMakeGuess är true fast en gissning inte ska kunna göras."); } sn.Initialize(); using (new NullOut()) { sn.MakeGuess((int)GetFieldValue(sn, "_number")); } if (sn.CanMakeGuess) { ReportError("CanMakeGuess: CanMakeGuess är true trots att rätt tal redan gissats."); } }
public void CheckCanMakeGuessProperty() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } for (int i = 94; i <= 100; i++) { Assert.IsTrue(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte true trots att alla gissningar inte gjorts."); CallMakeGuess(sn, i); } Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att sju gissningar gjorts."); sn.Initialize(); CallMakeGuess(sn, (int)GetFieldValue(sn, "_number")); Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts."); }
private static void CheckConstructor() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); if (number < 1 || number > 100) { ReportError("SecretNumber(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); } var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as int[]; if (guessedNumbers == null) { ReportError("SecretNumber(): _guessedNumbers har inte initierats."); } if (guessedNumbers != null && guessedNumbers.Length != 7) { ReportError("SecretNumber(): _guessedNumbers har inte sju element."); } }
private static void CheckMakeGuessIfItsPossibleToGuessMoreThanSevenTimes() { var sn = new SecretNumber(); int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } while (number >= 94); using (new NullOut()) { for (int i = 94; i <= 100; i++) { sn.MakeGuess(i); } } try { using (new NullOut()) { sn.MakeGuess(number); } } catch (ApplicationException) { // Eat! return; } catch { // Eat! } ReportError("MakeGuess(): ApplicationsException kastas inte då fler gissningar än sju görs."); }
private static void CheckMakeGuessHigh() { var sn = new SecretNumber(); int number, prevNumber, loopCount = 5; do { prevNumber = (int)GetFieldValue(sn, "_number"); Thread.Sleep(100); sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); if (number < 1 || number > 100) { ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); } if (prevNumber == number) { if (--loopCount == 0) { ReportError("Initialize(): _number verkar inte slumpas"); return; } } } while (number > 99); bool result; using (new NullOut()) { result = sn.MakeGuess(100); } if (result) { ReportError("MakeGuess(): MakeGuess returnerar inte false då det gissade talet är större än det hemliga talet."); } }
public void CheckGuessesLeftProperty() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } Assert.IsTrue(sn.GuessesLeft == 7, "GuessesLeft är inte 7 trots att ingen gissning gjorts."); int count = 0; for (int i = 94; i <= 100; i++) { CallMakeGuess(sn, i); Assert.IsTrue(sn.Count == ++count, String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count)); } }
public void CheckMakeGuessLow() { var sn = new SecretNumber(); int number, prevNumber, loopCount = 5; do { prevNumber = (int)GetFieldValue(sn, "_number"); Thread.Sleep(100); sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); Assert.IsTrue(number >= 1 && number <= 100, "Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); if (--loopCount == 0) { Assert.IsTrue(prevNumber != number, "Initialize(): _number verkar inte slumpas."); return; } } while (number < 2); Assert.IsFalse(CallMakeGuess(sn, 1), "MakeGuess returnerar inte false då det gissade talet är mindre än det hemliga talet."); }
public void CheckMakeGuessOldGuess() { var sn = new SecretNumber(); var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1); CallMakeGuess(sn, guess); var count = sn.Count; Assert.IsFalse(CallMakeGuess(sn, guess), "MakeGuess returnerar inte false då det gissade talet är samma som en tidigare gissning."); Assert.IsTrue(count == sn.Count, "En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning."); }
public void CheckMakeGuessRight() { var sn = new SecretNumber(); Assert.IsTrue(CallMakeGuess(sn, (int)GetFieldValue(sn, "_number")), "MakeGuess returnerar inte true då det gissade talet är samma som det hemliga talet."); }
public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1() { var sn = new SecretNumber(); try { using (new NullOut()) { sn.MakeGuess(0); throw new ApplicationException(); } } catch (ArgumentOutOfRangeException) { // Eat! return; } catch { Assert.Fail("ArgumentOutOfRangeException kastas inte vid gissning på ett tal mindre än 1."); } }
private static bool CallMakeGuess(SecretNumber sn, int guess) { using (new NullOut()) { return sn.MakeGuess(guess); } }
static void Main(string[] args) { Console.Title = "Gissa det hemliga talet - nivå B"; // Testa grundläggande krav på klassen SecretNumber. Test.Run(); // Deklarera och initiera lokala variabler. bool continueGame = false; int number = 0; SecretNumber secretNumber = new SecretNumber(); // Upprepa spelomgångar tills användaren avslutar genom att // trycka ner tangenten 'N'. do { // Initiera ny spelomgång. secretNumber.Initialize(); // Rensa konsolfönstret och skriv ut ledtext. Console.Clear(); Console.BackgroundColor = ConsoleColor.DarkYellow; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" ╔══════════════════════════════════════╗ "); Console.WriteLine(" ║ Gissa det hemliga talet mellan 1-100 ║ "); Console.WriteLine(" ╚══════════════════════════════════════╝ "); Console.ResetColor(); // Låt användaren gissa så länge det finns gissningar kvar. while (secretNumber.CanMakeGuess) { // Läs in en gissning i det slutna intervallet mellan 1 och 100. Console.ForegroundColor = ConsoleColor.White; do { Console.Write("\nGissning {0}: ", secretNumber.Count + 1); } while (!(int.TryParse(Console.ReadLine(), out number) && number >= 1 && number <= 100)); Console.ResetColor(); Console.WriteLine(); try { // Gissa och avsluta spelomgången om gissningen är rätt. if (secretNumber.MakeGuess(number)) { break; } } catch (Exception ex) { Console.WriteLine("Ett oväntat fel inträffade! Programmet avbryts."); Console.WriteLine(ex.Message); return; } } Console.BackgroundColor = ConsoleColor.DarkYellow; Console.ForegroundColor = ConsoleColor.White; Console.Write("\n Nytt hemligt nummer? [N] avbryter. "); Console.CursorVisible = false; continueGame = Console.ReadKey(true).Key != ConsoleKey.N; Console.CursorVisible = true; Console.ResetColor(); } while (continueGame); }
private static void CheckMakeGuessLow() { var sn = new SecretNumber(); int number, prevNumber, loopCount = 5; do { prevNumber = (int)GetFieldValue(sn, "_number"); Thread.Sleep(100); sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); if (number < 1 || number > 100) { ReportError("Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100."); } if (prevNumber == number) { if (--loopCount == 0) { ReportError("Initialize(): _number verkar inte slumpas"); return; } } } while (number < 2); bool result; using (new NullOut()) { result = sn.MakeGuess(1); } if (result) { ReportError("MakeGuess(): MakeGuess returnerar inte false då det gissade talet är mindre än det hemliga talet."); } }
public void CheckInitialize() { var sn = new SecretNumber(); int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100."); } while (number >= 94); for (int i = 94; i <= 100; i++) { CallMakeGuess(sn, i); } sn.Initialize(); Assert.IsTrue(sn.Count == 0, "Count initieras inte till 0."); Assert.IsTrue(sn.CanMakeGuess, "CanMakeGuess initieras inte till true."); var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers"); foreach (var guess in guessedNumbers) { Assert.IsTrue(guess == 0, "_guessedNumbers verkar inte tömmas på gammal information."); } }