using GameCore; using Models; using NUnit.Framework; public class ScoreManagerTests { private readonly ScoreManager _m = new ScoreManager(); // A Test behaves as an ordinary method [Test] public void SuccessOnly() { _m.ResetScore(); // test initial state TestSuccessRates("-", "-", "-"); // test 1 GO success var s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.ResetScore(); _m.UpdateScore(s); TestSuccessRates("100%", "100%", "-"); // test 1 STOP success s = new Stimuli(0f, 0f, 0f, true); _m.ResetScore(); _m.UpdateScore(s); TestSuccessRates("100%", "-", "100%"); // test 1 STOP and 1 GO success s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.UpdateScore(s); TestSuccessRates("100%", "100%", "100%"); // test state after reset _m.ResetScore(); TestSuccessRates("-", "-", "-"); } [Test] public void SuccessErrorsOnly() { _m.ResetScore(); // test initial state TestSuccessRates("-", "-", "-"); // test 1 GO error var s = new Stimuli(0f, 0f, 0f, false); _m.ResetScore(); _m.UpdateScore(s); TestSuccessRates("0%", "0%", "-"); // test 1 STOP error s = new Stimuli(0f, 0f, 0f, true); s.Errors = 1; _m.ResetScore(); _m.UpdateScore(s); TestSuccessRates("0%", "-", "0%"); // test 1 STOP and 1 GO error s = new Stimuli(0f, 0f, 0f, false); _m.UpdateScore(s); TestSuccessRates("0%", "0%", "0%"); // test state after reset _m.ResetScore(); TestSuccessRates("-", "-", "-"); } [Test] public void SuccessesMixed() { // test initial state _m.ResetScore(); TestSuccessRates("-", "-", "-"); // GO error var s = new Stimuli(0f, 0f, 0f, false); _m.UpdateScore(s); TestSuccessRates("0%", "0%", "-"); // STOP success s = new Stimuli(0f, 0f, 0f, true); _m.UpdateScore(s); TestSuccessRates("50%", "0%", "100%"); // STOP error s = new Stimuli(0f, 0f, 0f, true); s.Errors = 1; _m.UpdateScore(s); TestSuccessRates("33.3%", "0%", "50%"); // GO success s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.UpdateScore(s); TestSuccessRates("50%", "50%", "50%"); // GO success s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.UpdateScore(s); TestSuccessRates("60%", "66.7%", "50%"); // add 3 GO successes _m.UpdateScore(s); _m.UpdateScore(s); _m.UpdateScore(s); TestSuccessRates("75%", "83.3%", "50%"); // test state after reset _m.ResetScore(); TestSuccessRates("-", "-", "-"); } [Test] public void MeanReactionTime() { var s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.ResetScore(); Assert.AreEqual(0.0, _m.GetMeanReactionTime(), 0.01); Assert.AreEqual("-", _m.GetMeanReactionTimeString()); s.ReactionTime = 100; _m.UpdateScore(s); Assert.AreEqual(100.00, _m.GetMeanReactionTime(), 0.01); Assert.AreEqual("100ms", _m.GetMeanReactionTimeString()); s.ReactionTime = 200; _m.UpdateScore(s); Assert.AreEqual(150.00, _m.GetMeanReactionTime(), 0.01); Assert.AreEqual("150ms", _m.GetMeanReactionTimeString()); s.ReactionTime = 100; _m.UpdateScore(s); Assert.AreEqual(133.33, _m.GetMeanReactionTime(), 0.01); Assert.AreEqual("133.33ms", _m.GetMeanReactionTimeString()); s.ReactionTime = 1000; _m.UpdateScore(s); Assert.AreEqual(350.00, _m.GetMeanReactionTime(), 0.01); s.ReactionTime = 1000; _m.UpdateScore(s); Assert.AreEqual(480.00, _m.GetMeanReactionTime(), 0.01); s.ReactionTime = 10; _m.UpdateScore(s); Assert.AreEqual(401.67, _m.GetMeanReactionTime(), 0.01); Assert.AreEqual("401.67ms", _m.GetMeanReactionTimeString()); } [Test] public void MeanReactionTimeAdvanced() { _m.ResetScore(); Assert.AreEqual(0.0, _m.GetMeanReactionTime(), 0.01); // don't update MRT: non-successful GO stimuli var s = new Stimuli(0f, 0f, 0f, false); s.ReactionTime = 100; _m.UpdateScore(s); Assert.AreEqual(0.0, _m.GetMeanReactionTime(), 0.01); // update MRT s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; s.ReactionTime = 200; _m.UpdateScore(s); Assert.AreEqual(200.0, _m.GetMeanReactionTime(), 0.01); // don't update MRT: STOP stimuli s = new Stimuli(0f, 0f, 0f, true); s.ReactionTime = 300; _m.UpdateScore(s); Assert.AreEqual(200.0, _m.GetMeanReactionTime(), 0.01); // don't update MRT: GO stimuli with errors s = new Stimuli(0f, 0f, 0f, false); s.Errors = 3; s.ReactionTime = 400; _m.UpdateScore(s); Assert.AreEqual(200.0, _m.GetMeanReactionTime(), 0.01); // don't update MRT: STOP stimuli with errors s = new Stimuli(0f, 0f, 0f, true); s.Errors = 2; s.ReactionTime = 500; _m.UpdateScore(s); Assert.AreEqual(200.0, _m.GetMeanReactionTime(), 0.01); // update MRT s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; s.ReactionTime = 600; _m.UpdateScore(s); Assert.AreEqual(400.0, _m.GetMeanReactionTime(), 0.01); _m.ResetScore(); Assert.AreEqual(0.0, _m.GetMeanReactionTime(), 0.01); } [Test] public void ErrorCounter() { _m.ResetScore(); Assert.AreEqual(0, _m.GetNbrErrors()); var s = new Stimuli(0f, 0f, 0f, false); s.IsActivated = true; _m.UpdateScore(s); Assert.AreEqual(0, _m.GetNbrErrors()); s = new Stimuli(0f, 0f, 0f, false); _m.UpdateScore(s); Assert.AreEqual(1, _m.GetNbrErrors()); s = new Stimuli(0f, 0f, 0f, false); s.Errors = 2; _m.UpdateScore(s); Assert.AreEqual(3, _m.GetNbrErrors()); s = new Stimuli(0f, 0f, 0f, true); _m.UpdateScore(s); Assert.AreEqual(3, _m.GetNbrErrors()); s = new Stimuli(0f, 0f, 0f, true); s.Errors = 4; _m.UpdateScore(s); Assert.AreEqual(7, _m.GetNbrErrors()); _m.ResetScore(); Assert.AreEqual(0, _m.GetNbrErrors()); } private void TestSuccessRates(string stimuliSuccessRate, string goSuccessRate, string stopSuccessRate) { Assert.AreEqual(stimuliSuccessRate, _m.GetStimuliSuccessRate()); Assert.AreEqual(goSuccessRate, _m.GetGoSuccessRate()); Assert.AreEqual(stopSuccessRate, _m.GetStopSuccessRate()); } }