public void BinaryFractionalEncodeDecodeNET() { var polyModulus = new BigPoly("1x^1024 + 1"); var modulus = new SmallModulus(0x10000); var encoder = new BinaryFractionalEncoder(modulus, polyModulus, 500, 50, MemoryPoolHandle.New()); var poly = encoder.Encode(0.0); Assert.IsTrue(poly.IsZero); Assert.AreEqual(0.0, encoder.Decode(poly)); var poly1 = encoder.Encode(-1.0); Assert.AreEqual(-1.0, encoder.Decode(poly1)); var poly2 = encoder.Encode(0.1); Assert.IsTrue(Math.Abs(encoder.Decode(poly2) - 0.1) / 0.1 < 0.000001); var poly3 = encoder.Encode(3.123); Assert.IsTrue(Math.Abs(encoder.Decode(poly3) - 3.123) / 3.123 < 0.000001); var poly4 = encoder.Encode(-123.456); Assert.IsTrue(Math.Abs(encoder.Decode(poly4) + 123.456) / (-123.456) < 0.000001); var poly5 = encoder.Encode(12345.98765); Assert.IsTrue(Math.Abs(encoder.Decode(poly5) - 12345.98765) / 12345.98765 < 0.000001); }
public void BinaryFractionalEncodeDecodeNET() { var polyModulus = new BigPoly("1x^1024 + 1"); var modulus = new BigUInt("10000"); var encoder = new BinaryFractionalEncoder(modulus, polyModulus, 500, 50); var poly = new BigPoly(encoder.Encode(0.0)); Assert.AreEqual(polyModulus.CoeffCount, poly.CoeffCount); Assert.IsTrue(poly.IsZero); Assert.AreEqual(0.0, encoder.Decode(poly)); var poly1 = new BigPoly(encoder.Encode(-1.0)); Assert.AreEqual(polyModulus.CoeffCount, poly1.CoeffCount); Assert.AreEqual(modulus.BitCount, poly1.CoeffBitCount); Assert.AreEqual(-1.0, encoder.Decode(poly1)); var poly2 = new BigPoly(encoder.Encode(0.1)); Assert.AreEqual(polyModulus.CoeffCount, poly2.CoeffCount); Assert.AreEqual(modulus.BitCount, poly2.CoeffBitCount); Assert.IsTrue(Math.Abs(encoder.Decode(poly2) - 0.1) / 0.1 < 0.000001); var poly3 = new BigPoly(encoder.Encode(3.123)); Assert.AreEqual(polyModulus.CoeffCount, poly3.CoeffCount); Assert.AreEqual(modulus.BitCount, poly3.CoeffBitCount); Assert.IsTrue(Math.Abs(encoder.Decode(poly3) - 3.123) / 3.123 < 0.000001); var poly4 = new BigPoly(encoder.Encode(-123.456)); Assert.AreEqual(polyModulus.CoeffCount, poly4.CoeffCount); Assert.AreEqual(modulus.BitCount, poly4.CoeffBitCount); Assert.IsTrue(Math.Abs(encoder.Decode(poly4) + 123.456) / (-123.456) < 0.000001); var poly5 = new BigPoly(encoder.Encode(12345.98765)); Assert.AreEqual(polyModulus.CoeffCount, poly5.CoeffCount); Assert.AreEqual(modulus.BitCount, poly5.CoeffBitCount); Assert.IsTrue(Math.Abs(encoder.Decode(poly5) - 12345.98765) / 12345.98765 < 0.000001); }