public void FloatingPointDCT_ReferenceImplementation_ForwardThenInverse(int seed, int startAt)
        {
            var data = Create8x8RandomIntData(-200, 200, seed);
            MutableSpan <float> src  = new MutableSpan <int>(data).ConvertToFloat32MutableSpan();
            MutableSpan <float> dest = new MutableSpan <float>(64);
            MutableSpan <float> temp = new MutableSpan <float>(64);

            ReferenceImplementations.fDCT2D_llm(src, dest, temp, true);
            ReferenceImplementations.iDCT2D_llm(dest, src, temp);

            for (int i = startAt; i < 64; i++)
            {
                float expected = data[i];
                float actual   = (float)src[i];

                Assert.Equal(expected, actual, new ApproximateFloatComparer(2f));
            }
        }
        public void Fdct_FloatingPointReferenceImplementation_IsEquivalentToIntegerImplementation(int seed)
        {
            MutableSpan <int>   intData  = Create8x8RandomIntData(-200, 200, seed);
            MutableSpan <float> floatSrc = intData.ConvertToFloat32MutableSpan();

            ReferenceImplementations.IntegerReferenceDCT.TransformFDCTInplace(intData);

            MutableSpan <float> dest = new MutableSpan <float>(64);
            MutableSpan <float> temp = new MutableSpan <float>(64);

            ReferenceImplementations.fDCT2D_llm(floatSrc, dest, temp, offsetSourceByNeg128: true);

            for (int i = 0; i < 64; i++)
            {
                float expected = intData[i];
                float actual   = dest[i];

                Assert.Equal(expected, actual, new ApproximateFloatComparer(1f));
            }
        }