private static void CheckGuess() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 100 || number <= 1) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } if (sn.Guess != null) { ReportError("Egenskapen Guess är inte null trots att ingen gissning gjorts."); } sn.MakeGuess(number - 1); if (sn.Guess != number - 1) { ReportError("Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för lågt tal gjorts."); } sn.MakeGuess(number + 1); if (sn.Guess != number + 1) { ReportError("Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för högt tal gjorts."); } sn.MakeGuess(number); if (sn.Guess != number) { ReportError("Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på rätt tal gjorts."); } }
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); if (sn.MakeGuess(100) != Outcome.High) { ReportError("MakeGuess(): MakeGuess returnerar inte Outcome.High då det gissade talet är större än det hemliga talet."); } if (sn.Outcome != Outcome.High) { ReportError("Outcome: Egenskapen Outcome är inte Outcome.High efter en gissning på ett för stort tal gjorts."); } }
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++) { sn.MakeGuess(i); } sn.Initialize(); Assert.IsTrue(sn.Count == 0, "Count initieras inte till 0."); Assert.IsNull(sn.Guess, "Guess initieras inte till null."); Assert.IsTrue(sn.Outcome == Outcome.Indefinite, "Outcome initieras inte till Outcome.Indefinite."); foreach (var gn in sn.GuessedNumbers) { Assert.IsTrue(gn.Number == null && gn.Outcome == Outcome.Indefinite, "GuessedNumbers verkar inte tömmas på gammal information."); } }
private static void CheckInitialize() { var sn = new SecretNumber(); var guessedNumbers = GetFieldValue(sn, "_guessedNumbers") as GuessedNumber[]; 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 GuessedNumber[]) { 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 är false trots att det ska gå att gissa."); } else { 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 är false trots att det ska gå att gissa."); } guessedNumbers = (GuessedNumber[])GetFieldValue(sn, "_guessedNumbers"); foreach (var gn in guessedNumbers) { if (gn.Number != null && gn.Outcome != Outcome.Indefinite) { ReportError("Initialize(): _guessedNumbers töms inte på gamla gissningar."); break; } } } }
private static void CheckGuessedNumberProperty() { var sn = new SecretNumber(); var guessedNumbersField = (GuessedNumber[])GetFieldValue(sn, "_guessedNumbers"); if (guessedNumbersField == sn.GuessedNumbers) { ReportError("Privacy leak!!! En kopia av den privata arrayen returneras inte av egenskapen GuessedNumbers."); } }
private static void CheckMakeGuessRight() { var sn = new SecretNumber(); if (sn.MakeGuess((int)GetFieldValue(sn, "_number")) != Outcome.Right) { ReportError("MakeGuess(): MakeGuess returnerar inte Outcome.Right då det gissade talet är lika med det hemliga talet."); } if (sn.Outcome != Outcome.Right) { ReportError("Outcome: Egenskapen Outcome är inte Outcome.Right efter en gissning på rätt tal gjorts."); } }
private static void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1() { var sn = new SecretNumber(); try { 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 { sn.MakeGuess(101); } catch (ArgumentOutOfRangeException) { // Eat! return; } ReportError("MakeGuess(): ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100."); }
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++) { sn.MakeGuess(i); if (sn.Count != ++count) { ReportError(String.Format("Count: Count är inte {0} trots att {0} gissning(ar) gjorts.", count)); } } try { 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."); } }
public 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"); 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 > 99); var result = sn.MakeGuess(100); Assert.IsTrue(result == Outcome.High, "MakeGuess returnerar inte Outcome.High då det gissade talet är högre än det hemliga talet."); Assert.IsTrue(sn.Outcome == Outcome.High, "Egenskapen Outcome är inte Outcome.High efter en gissning på ett för stort 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 GuessedNumber[]; 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 CheckCanMakeGuess() { var sn = new SecretNumber(); int number; do { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } while (number >= 94); bool result = false; 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(); sn.MakeGuess((int)GetFieldValue(sn, "_number")); if (sn.CanMakeGuess) { ReportError("CanMakeGuess: CanMakeGuess är true trots att rätt tal redan gissats."); } }
private static void CheckMakeGuessNoMoreGuesses() { 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++) { sn.MakeGuess(i); } if (sn.MakeGuess(number) != Outcome.NoMoreGuesses) { ReportError("MakeGuess returnerar inte Outcome.NoMoreGuesses då fler gissningar än sju görs."); } if (sn.Outcome != Outcome.NoMoreGuesses) { ReportError("Outcome: Egenskapen Outcome är inte Outcome.NoMoreGuesses då fler gissningar än sju gjorts."); } }
public static void CheckNumberProperty() { var sn = new SecretNumber(); if (sn.Number != null) { ReportError("Egenskapen Number returnerar inte null trots att det finns gissningar kvar."); } var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } for (int i = 94; i <= 100; i++) { sn.MakeGuess(i); } if (sn.Number != number) { ReportError("Egenskapen Number har inte samma värde som fältet _number trots att det inte finns några gissningar kvar."); } }
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 > 99); sn.MakeGuess(100); if (sn.MakeGuess(100) != Outcome.OldGuess) { ReportError("MakeGuess returnerar inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning."); } if (sn.Outcome != Outcome.OldGuess) { ReportError("Outcome: Egenskapen Outcome är inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning."); } }
static void Main(string[] args) { Console.Title = Strings.Title; // Testa grundläggande krav på klassen SecretNumber. Test.Run(); // Deklarera och initiera lokala variabler. bool continueGame = false; int number = 0; string message = null; SecretNumber secretNumber = new SecretNumber(); // Upprepa spelomgångar tills användaren avslutar genom att // trycka ner tangenten 'N'. do { // Initiera ny spelomgång. secretNumber.Initialize(); // Låt användaren gissa så länge det finns gissningar kvar. while (secretNumber.CanMakeGuess) { // Rensa konsolfönstret och skriv ut eventuellt gjorda gissningar // och meddelande. Console.Clear(); Console.BackgroundColor = ConsoleColor.DarkRed; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(" ╔══════════════════════════════════════╗ "); Console.WriteLine(" ║ Gissa det hemliga talet mellan 1-100 ║ "); Console.WriteLine(" ╚══════════════════════════════════════╝ \n"); Console.ResetColor(); if (secretNumber.Count > 0) { Console.ForegroundColor = ConsoleColor.White; GuessedNumber[] results = secretNumber.GuessedNumbers; for (int i = 0; i < secretNumber.Count; i++) { Console.BackgroundColor = results[i].Outcome == Outcome.High ? ConsoleColor.Red : ConsoleColor.Blue; Console.Write(" {0} ", results[i].Number); } Console.ResetColor(); Console.WriteLine("\n"); } if (!String.IsNullOrWhiteSpace(message)) { Console.WriteLine(message); Console.WriteLine(); } // Läs in en gissning i det slutna intervallet mellan 1 och 100. Console.ForegroundColor = ConsoleColor.White; var prompt = String.Format(Strings.Guess_Number, Strings.ResourceManager.GetString(String.Format("Count_{0}", secretNumber.Count + 1))); do { Console.Write(prompt); } while (!(int.TryParse(Console.ReadLine(), out number) && number >= 1 && number <= 100)); Console.ResetColor(); try { // Gissa och skapa meddelande beroende på utfallet av gissningen. if (secretNumber.MakeGuess(number) != Outcome.Right) { message = String.Format(Strings.ResourceManager.GetString(String.Format("Outcome_{0}", secretNumber.Outcome.ToString())), secretNumber.Guess); } else { message = String.Format(Strings.Outcome_Right, Strings.ResourceManager.GetString(String.Format("Count_{0}", secretNumber.Count)).ToLower()); } // Avsluta omgången om det inte går att gissa fler gånger och om senaste gissningen inte var rätt. if (!secretNumber.CanMakeGuess && secretNumber.Outcome != Outcome.Right) { message += String.Format(Strings.Cannot_Guess, secretNumber.Number); break; } } catch (Exception ex) { Console.WriteLine("Ett oväntat fel inträffade! Programmet avbryts."); Console.WriteLine(ex.Message); return; } } Console.WriteLine(); Console.WriteLine(message); Console.BackgroundColor = ConsoleColor.DarkRed; 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); }
public void CheckGuessedNumberProperty() { var sn = new SecretNumber(); var guessedNumbersField = (GuessedNumber[])GetFieldValue(sn, "_guessedNumbers"); Assert.AreNotSame(guessedNumbersField, sn.GuessedNumbers, "Privacy leak!!! En kopia av den privata arrayen returneras inte av egenskapen GuessedNumbers."); }
public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100() { var sn = new SecretNumber(); try { sn.MakeGuess(101); throw new ApplicationException(); } catch (ArgumentOutOfRangeException) { // Eat! return; } catch { Assert.Fail("ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100."); } }
public void CheckMakeGuesskNoMoreGuesses() { 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++) { sn.MakeGuess(i); } var result = sn.MakeGuess(number); Assert.IsTrue(result == Outcome.NoMoreGuesses, "MakeGuess returnerar inte Outcome.NoMoreGuesses då fler gissningar än sju görs."); Assert.IsTrue(sn.Outcome == Outcome.NoMoreGuesses, "Egenskapen Outcome är inte Outcome.NoMoreGuesses då fler gissningar än sju görs."); }
public void CheckMakeGuessOldGuess() { var sn = new SecretNumber(); var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1); sn.MakeGuess(guess); Assert.IsTrue(sn.MakeGuess(guess) == Outcome.OldGuess, "MakeGuess returnerar inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning."); Assert.IsTrue(sn.Outcome == Outcome.OldGuess, "Egenskapen Outcome är inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning."); }
public void CheckGuessProperty() { var sn = new SecretNumber(); var number = (int)GetFieldValue(sn, "_number"); while (number >= 94) { sn.Initialize(); number = (int)GetFieldValue(sn, "_number"); } Assert.IsNull(sn.Guess, "Egenskapen Guess är inte null trots att ingen gissning gjorts."); sn.MakeGuess(number - 1); Assert.IsTrue(sn.Guess == number - 1, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för lågt tal gjorts."); sn.MakeGuess(number + 1); Assert.IsTrue(sn.Guess == number + 1, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för högt tal gjorts."); sn.MakeGuess(number); Assert.IsTrue(sn.Guess == number, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på rätt tal gjorts."); }
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++) { sn.MakeGuess(i); Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count)); } sn.MakeGuess(number); Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs."); }
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."); sn.MakeGuess(i); } Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att sju gissningar gjorts."); sn.Initialize(); sn.MakeGuess((int)GetFieldValue(sn, "_number")); Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts."); }
public void CheckMakeGuessRight() { var sn = new SecretNumber(); Assert.IsTrue(sn.MakeGuess((int)GetFieldValue(sn, "_number")) == Outcome.Right, "MakeGuess returnerar inte Outcome.Right då det gissade talet är samma som det hemliga talet."); Assert.IsTrue(sn.Outcome == Outcome.Right, "Egenskapen Outcome är inte Outcome.Right efter en gissning på rätt tal gjorts."); }