using Core.Utils; namespace UnitTests.Tests.Utils; [TestClass] public sealed class RandomUtilTests { private readonly RandomUtil _randomUtil = new(); [TestMethod] public void GetIntTest() { // Run 100 test cases for (var i = 0; i < 100; i++) { var result = _randomUtil.GetInt(0, 10); if (result < 0 || result > 10) { Assert.Fail($"GetInt(0, 10) out of range. Expected range [0, 10] but was {result}."); } } } [TestMethod] public void GetIntExTest() { // Run 100 test cases for (var i = 0; i < 100; i++) { var result = _randomUtil.GetIntEx(10); if (result < 1 || result > 9) { Assert.Fail($"GetInt(10) out of range. Expected range [1, 9] but was {result}."); } } } [TestMethod] public void GetFloatTest() { // Run 100 test cases for (var i = 0; i < 100; i++) { var result = _randomUtil.GetFloat(0f, 10f); if (result < 0f || result >= 9f) { Assert.Fail($"GetFloat(0f, 10f) out of range. Expected range [0.0f, 9.999f] but was {result}."); } } } [TestMethod] public void GetPercentOfValueTest() { const float expected = 45.5f; var result = _randomUtil.GetPercentOfValue(45.5f, 100f); Assert.AreEqual( expected, result, 0.0001f, $"GetPercentOfValue(45.5f, 100f) out of range. Expected: {expected}. Actual: {result}."); } [TestMethod] public void ReduceValueByPercentTest() { const float expected = 54.5f; var result = _randomUtil.ReduceValueByPercent(100f, 45.5f); Assert.AreEqual( expected, result, 0.0001f, $"ReduceValueByPercent(100f, 45.5f) out of range. Expected: {expected}. Actual: {result}."); } [TestMethod] public void GetChance100Test() { for (var i = 0; i < 100; i++) { const bool expectedTrue = true; var resultTrue = _randomUtil.GetChance100(100f); Assert.AreEqual( expectedTrue, resultTrue, $"GetChance100(100f) out of range. Expected: {expectedTrue}. Actual: {resultTrue}."); } for (var i = 0; i < 100; i++) { const bool expectedFalse = false; var resultFalse = _randomUtil.GetChance100(0f); Assert.AreEqual( expectedFalse, resultFalse, $"GetChance100(0f) out of range. Expected: {expectedFalse}. Actual: {resultFalse}."); } } // TODO: Missing methods between these two [TestMethod] public void RandIntTest() { for (var i = 0; i < 100; i++) { var result = _randomUtil.RandInt(0, 10); if (result < 0 || result > 9) { Assert.Fail($"RandInt(0, 10) out of range. Expected range [0, 9] but was {result}."); } } for (var i = 0; i < 100; i++) { var result = _randomUtil.RandInt(10); if (result < 0 || result > 9) { Assert.Fail($"RandInt(10, null) out of range. Expected range [0, 9] but was {result}."); } } } [TestMethod] public void RandNumTest() { for (var i = 0; i < 100; i++) { var result = _randomUtil.RandNum(0, 10); if (result < 0 || result > 9) { Assert.Fail($"RandNum(0, 10) out of range. Expected range [0, 9.999d] but was {result}."); } if (_randomUtil.GetNumberPrecision(result) > RandomUtil.MaxSignificantDigits) { Assert.Fail($"RandNum(0, 10) precision of {result} exceeds the allowable precision ({RandomUtil.MaxSignificantDigits}) for the given values."); } } for (var i = 0; i < 100; i++) { var result = _randomUtil.RandNum(10); if (result < 0 || result > 9) { Assert.Fail($"RandNum(10) out of range. Expected range [0, 9.999d] but was {result}."); } if (_randomUtil.GetNumberPrecision(result) > RandomUtil.MaxSignificantDigits) { Assert.Fail($"RandNum(10) precision of {result} exceeds the allowable precision ({RandomUtil.MaxSignificantDigits}) for the given values."); } } } [TestMethod] public void ShuffleTest() { var testList = new List() { 1,2,3,4,5,6,7,8,9,10 }; var orig = new List(testList); var result = _randomUtil.Shuffle(testList); Assert.IsFalse( result.SequenceEqual(orig), $"Shuffle test failed. Expected: {string.Join(", ", orig)}, but got {string.Join(", ", result)}"); } }