Example #1
0
        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);
        }