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)); } }