public void Simulate_Starting_Result() { var subScore = new Dictionary <int, double>(); var subCount = new Dictionary <int, int>(); var rnd = new MT19937Generator(17); var score = 0.0; var runs = 2000; var len = 0.0; for (var run = 0; run < runs; run++) { var state = new GameState(new Settings()); state.OnButton = (run & 1) == 1 ? PlayerType.player1 : PlayerType.player2; var simulator = new GameSimulation(); var subs = new List <int>(); var sc = simulator.GetScore(state, rnd, subs); score += sc; foreach (var sub in subs) { var key0 = 20 * ((10 + sub) / 20); var key1 = 4000 - key0; if (!subCount.ContainsKey(key0)) { subScore[key0] = 0; subCount[key0] = 0; } if (!subCount.ContainsKey(key1)) { subScore[key1] = 0; subCount[key1] = 0; } subScore[key0] += sc; subCount[key0] += 1; subScore[key1] += 1.0 - sc; subCount[key1] += 1; } len += subs.Count; } var act = score / runs; var actLen = len / runs; Console.WriteLine(); foreach (var key in subCount.Keys.OrderBy(s => s)) { Console.WriteLine("{0}\t{1:0.0%}\t{2}", key, subScore[key] / subCount[key], subCount[key]); } Console.WriteLine("score: {0:0.0%}, len: {1:0.0}", act, actLen); var exp = 1.0; Assert.AreEqual(exp, act); }