KoogleV4/GameHandler.UnitTests/PinPictureTests.cs

185 lines
6.9 KiB
C#

using GameHandler.UnitTests.Helper;
using GameModel;
using GameModel.Exceptions;
using NuGet.Frameworks;
using System.Collections;
using System.Numerics;
namespace GameHandler.UnitTests
{
[TestFixture]
internal class PinPictureTests
{
[Test]
[TestCase(1,PinState.Down)]
[TestCase(2, PinState.Down)]
[TestCase(3, PinState.Down)]
[TestCase(4, PinState.Down)]
[TestCase(5, PinState.Down)]
[TestCase(6, PinState.Down)]
[TestCase(7, PinState.Down)]
[TestCase(8, PinState.Down)]
[TestCase(9, PinState.Down)]
public void PinPicture_IndexTest(int pinNumber, PinState pinState)
{
var p = PinPicture.Create(pinNumber, pinState);
Assert.That(p[pinNumber],Is.EqualTo(PinState.Down));
}
[Test]
[TestCase(0)]
[TestCase(-1)]
[TestCase(10)]
[TestCase(11)]
public void Get_Invalid_PinNumber_ThrowsException(int pinNumber)
{
var p = PinPicture.Create();
Assert.That(() => p[pinNumber],Throws.TypeOf<InvalidPinIndexException>());
}
//[Test]
//[TestCase(0)]
//[TestCase(-1)]
//[TestCase(10)]
//[TestCase(11)]
//public void Set_Invalid_PinNumber_ThrowsException(int pinNumber)
//{
// var p = PinPicture.Create();
// Assert.That(() => p[pinNumber] = PinState.Down, Throws.TypeOf<InvalidPinIndexException>());
//}
[Test]
public void Access_PinStates()
{
var p = new PinPicture(PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down);
Assert.That(p.PinState1, Is.EqualTo(PinState.Down));
Assert.That(p.PinState2, Is.EqualTo(PinState.Up));
Assert.That(p.PinState3, Is.EqualTo(PinState.Down));
Assert.That(p.PinState4, Is.EqualTo(PinState.Up));
Assert.That(p.PinState5, Is.EqualTo(PinState.Down));
Assert.That(p.PinState6, Is.EqualTo(PinState.Up));
Assert.That(p.PinState7, Is.EqualTo(PinState.Down));
Assert.That(p.PinState8, Is.EqualTo(PinState.Up));
Assert.That(p.PinState9, Is.EqualTo(PinState.Down));
Assert.That(p.UpCount, Is.EqualTo(4));
Assert.That(p.DownCount, Is.EqualTo(5));
Assert.That(p.AllUp, Is.False);
}
[Test]
public void DefaultPinPicature_IsAllUp_True()
{
var p = PinPicture.Create();
Assert.That(p.AllUp,Is.True);
}
[Test]
public void LoopOverPinStates()
{
var p = PinPicture.Create();
var i = 0;
foreach (var item in p)
{
i++;
Assert.That(item, Is.EqualTo(p[i]));
}
}
[Test]
public void UseLinqOnPinPictore()
{
var p = new PinPicture(PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down);
Assert.That(p.First, Is.EqualTo(PinState.Down));
Assert.That(p.Skip(1).First, Is.EqualTo(PinState.Up));
Assert.That(p.Last, Is.EqualTo(PinState.Down));
var items = p.Take(9).ToArray();
CollectionAssert.AreEqual(items, new[] { PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down });
var enumerator = p.GetEnumerator();
enumerator.MoveNext();
enumerator.MoveNext();
Assert.That(enumerator.Current, Is.EqualTo(PinState.Up));
// cover GetEnumerator method https://stackoverflow.com/questions/1510031/how-do-you-test-the-ienumerable-getenumerator-method
IEnumerable weak = p.AsWeakEnumerable();
var sequence = weak.Cast<PinState>().Take(9).ToArray();
CollectionAssert.AreEqual(sequence, new[] { PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down, PinState.Up, PinState.Down });
}
[Test]
public void PicturePlusSinkIsSamePicture()
{
var p = PinPicture.Create();
var p2 = p + new PinThrow(null, false, true);
Assert.That(p,Is.EqualTo(p2));
}
//[Test]
//public void PicturePlusSamePinsThrowException()
//{
// var p1 = new PinPicture();
// p1.PinState1 = PinState.Down;
// var p2 = new PinPicture();
// p2.PinState1 = PinState.Down;
// var pinThrow = new PinThrow(p2, false, false);
// Assert.That(() => p1 + pinThrow, Throws.InstanceOf<InvalidPinCalcExcetion>());
//}
[Test]
public void Addition_CreatesCumulatedPinPicture()
{
var p1 = PinPicture.Create();
var throwPic1 = PinPicture.Create(1, PinState.Down);
var pinThrow1 = new PinThrow(throwPic1, false, false);
var throwPic2 = PinPicture.Create(2, PinState.Down);
var pinThrow2 = new PinThrow(throwPic2, false, false);
var throwPic3 = PinPicture.Create(3, PinState.Down);
var pinThrow3 = new PinThrow(throwPic3, false, false);
var throwPic4 = PinPicture.Create(4, PinState.Down);
var pinThrow4 = new PinThrow(throwPic4, false, false);
var throwPic5 = PinPicture.Create(5, PinState.Down);
var pinThrow5 = new PinThrow(throwPic5, false, false);
var throwPic6 = PinPicture.Create(6, PinState.Down);
var pinThrow6 = new PinThrow(throwPic6, false, false);
var throwPic7 = PinPicture.Create(7, PinState.Down);
var pinThrow7 = new PinThrow(throwPic7, false, false);
var throwPic8 = PinPicture.Create(8, PinState.Down);
var pinThrow8 = new PinThrow(throwPic8, false, false);
var throwPic9 = PinPicture.Create(9, PinState.Down);
var pinThrow9 = new PinThrow(throwPic9, false, false);
var p2 = p1 + pinThrow1;
var p3 = p2 + pinThrow2;
var p4 = p3 + pinThrow3;
var p5 = p4 + pinThrow4;
var p6 = p5 + pinThrow5;
var p7 = p6 + pinThrow6;
var p8 = p7 + pinThrow7;
var p9 = p8 + pinThrow8;
var p10 = p9 + pinThrow9;
Assert.That(p2.DownCount, Is.EqualTo(1));
Assert.That(p3.DownCount, Is.EqualTo(2));
Assert.That(p4.DownCount, Is.EqualTo(3));
Assert.That(p5.DownCount, Is.EqualTo(4));
Assert.That(p6.DownCount, Is.EqualTo(5));
Assert.That(p7.DownCount, Is.EqualTo(6));
Assert.That(p8.DownCount, Is.EqualTo(7));
Assert.That(p9.DownCount, Is.EqualTo(8));
Assert.That(p10.DownCount, Is.EqualTo(9));
}
}
}