public void ToStringReturnsFloatingNumberAsString()
        {
            var value  = (float)new Random().NextDouble();
            var actual = new FloatNumberMatrixData(value);

            AssertFloatsAreEqual(value, actual.InternalValue);
        }
        public void MultiplyByAddDivideThrowNotImplementedExceptionIfParameterIsNull()
        {
            var randomFloat = new FloatNumberMatrixData((float)new Random().NextDouble());

            Assert.Throws <NotImplementedException>(() => { randomFloat.MultiplyBy(null); });
            Assert.Throws <NotImplementedException>(() => { randomFloat.Add(null); });
            Assert.Throws <NotImplementedException>(() => { randomFloat.Divide(null); });
        }
        /// <summary>
        /// Add float to current UnsafeRGBMatrixData instance
        /// </summary>
        /// <param name="floatData"></param>
        /// <returns>Addition result</returns>
        private UnsafeRGBMatrixData AddFloat(UnsafeRGBMatrixData current, FloatNumberMatrixData floatData)
        {
            var floatDataRaw = floatData.InternalValue;
            var red          = current.Red + floatDataRaw;
            var green        = current.Green + floatDataRaw;
            var blue         = current.Blue + floatDataRaw;

            return(new UnsafeRGBMatrixData((int)red, (int)green, (int)blue));
        }
        public void RawValueIsEqualToInternalValue()
        {
            var zeroFloatingNumber = new FloatNumberMatrixData();

            AssertFloatsAreEqual(zeroFloatingNumber.InternalValue, (float)zeroFloatingNumber.RawValue);

            var randomFloatingNumber       = (float)new Random().NextDouble();
            var randomNumberFloatingNumber = new FloatNumberMatrixData(randomFloatingNumber);

            AssertFloatsAreEqual(randomFloatingNumber, (float)randomNumberFloatingNumber.RawValue);
        }
        public void InternalValueRepresentingCorrectNumber()
        {
            var zeroFloatingNumber = new FloatNumberMatrixData();

            AssertFloatsAreEqual(0f, zeroFloatingNumber.InternalValue);

            var randomFloatingNumber       = (float)new Random().NextDouble();
            var randomNumberFloatingNumber = new FloatNumberMatrixData(randomFloatingNumber);

            AssertFloatsAreEqual(randomFloatingNumber, randomNumberFloatingNumber.InternalValue);
        }
        public void ReturningRGBMatrixDataWithColorChannelsDividedByFloatIfParameterIsFloatMatrixDataType()
        {
            var randomColor = Utils.GetRandomColor(out var randomRed, out var randomGreen, out var randomBlue);
            var randomFloat = new FloatNumberMatrixData(1f + (float)new Random().NextDouble());

            var actual = (UnsafeRGBMatrixData)randomColor.Divide(randomFloat);

            Assert.AreEqual((int)Math.Round(randomRed / randomFloat.InternalValue), actual.Red);
            Assert.AreEqual((int)Math.Round(randomGreen / randomFloat.InternalValue), actual.Green);
            Assert.AreEqual((int)Math.Round(randomBlue / randomFloat.InternalValue), actual.Blue);
        }
        public void ReturningCorrectResultWhenAddWithFloatNumberMatrixData()
        {
            var random             = new Random();
            var randomNumber       = (float)random.NextDouble();
            var secondRandomNumber = (float)random.NextDouble();

            var first  = new FloatNumberMatrixData(randomNumber);
            var second = new FloatNumberMatrixData(secondRandomNumber);

            var additionResult = first.Add(second);

            AssertFloatsAreEqual(randomNumber + secondRandomNumber, (float)additionResult.RawValue);
        }
        public void ReturningCorrectResultWhenMultiplyByWithFloatNumberMatrixData()
        {
            var random             = new Random();
            var randomNumber       = (float)random.NextDouble();
            var secondRandomNumber = (float)random.NextDouble();

            var first  = new FloatNumberMatrixData(randomNumber);
            var second = new FloatNumberMatrixData(secondRandomNumber);

            var multiplicationResult = first.MultiplyBy(second);

            AssertFloatsAreEqual(randomNumber * secondRandomNumber, (float)multiplicationResult.RawValue);
        }
        public void ReturningCorrectResultWhenDivideWithFloatNumberMatrixData()
        {
            var random             = new Random();
            var randomNumber       = (float)random.NextDouble() + 0.1f;
            var secondRandomNumber = (float)random.NextDouble() + 0.1f;

            var first  = new FloatNumberMatrixData(randomNumber);
            var second = new FloatNumberMatrixData(secondRandomNumber);

            var divisionResult = first.Divide(second);

            AssertFloatsAreEqual(randomNumber / secondRandomNumber, (float)divisionResult.RawValue);
        }
        public void ReturningFloatMatrixDataWithCorrectInternalValueWhenDividedByRGBMatrixDataType()
        {
            int red;
            int green;
            int blue;
            var randomColor = Utils.GetRandomColor(out red, out green, out blue);

            var floatMatrixData = new FloatNumberMatrixData(1f);

            var actual   = floatMatrixData.Divide(randomColor);
            var expected = (red + green + blue) / 3f;

            expected = floatMatrixData.InternalValue / expected;

            AssertFloatsAreEqual(expected, (float)actual.RawValue);
        }