예제 #1
0
        public void RationalCompareToHugeInt()
        {
            using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
                using (var b = new HugeInt("115756986668303657898962467957"))
                    using (var c = new HugeRational("115756986668303657898962467957/1"))
                        using (var d = new HugeInt(1922215141))
                        {
                            Assert.AreEqual(-1, System.Math.Sign(a.CompareTo(d)));
                            Assert.AreEqual(1, System.Math.Sign((-a).CompareTo(d)));
                            Assert.AreEqual(-1, System.Math.Sign((-a).CompareTo(d + 1)));
                            Assert.AreEqual(1, System.Math.Sign(d.CompareTo(a)));
                            Assert.AreEqual(-1, System.Math.Sign(d.CompareTo(-a)));
                            Assert.AreEqual(1, System.Math.Sign((d + 1).CompareTo(-a)));

                            Assert.AreEqual(0, System.Math.Sign(b.CompareTo(c)));
                            Assert.AreEqual(0, System.Math.Sign(c.CompareTo(b)));
                            Assert.AreEqual(0, System.Math.Sign((-b).CompareTo(-c)));
                            Assert.AreEqual(0, System.Math.Sign((-c).CompareTo(-b)));

                            Assert.AreEqual(1, System.Math.Sign(b.CompareTo(c - 1)));
                            Assert.AreEqual(1, System.Math.Sign(c.CompareTo(b - 1)));
                            Assert.AreEqual(-1, System.Math.Sign((-b).CompareTo(1 - c)));
                            Assert.AreEqual(-1, System.Math.Sign((-c).CompareTo(1 - b)));
                        }
        }
예제 #2
0
        public void RationalSwap()
        {
            var strA = "-222509832503450298345029835740293845720/115756986668303657898962467957";
            var strB = "2039847290878794872059384789347534534/590872612825179551336102196593";

            using (var a = new HugeRational(strA))
                using (var b = new HugeRational(strB))
                {
                    var aValue = a._value();
                    var bValue = b._value();

                    var an = a.Numerator;
                    var ad = a.Denominator;
                    var bn = b.Numerator;
                    var bd = b.Denominator;

                    a.Swap(b);
                    Assert.AreEqual(aValue, a._value());
                    Assert.AreEqual(bValue, b._value());
                    Assert.AreEqual(strB, a.ToString());
                    Assert.AreEqual(strA, b.ToString());
                    Assert.AreEqual(strB, string.Format("{0}/{1}", an, ad));
                    Assert.AreEqual(strA, string.Format("{0}/{1}", bn, bd));
                }
        }
예제 #3
0
 public void RationalEqualsNonExpression()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     {
         Assert.IsFalse(a.Equals("abc"));
     }
 }
예제 #4
0
 public void RationalFromInvalidString2()
 {
     using (var a = new HugeRational())
     {
         a.SetTo("12345/13345A");
     }
 }
예제 #5
0
        public void RationalCompareToHugeInt()
        {
            using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
            using (var b = new HugeInt("115756986668303657898962467957"))
            using (var c = new HugeRational("115756986668303657898962467957/1"))
            using (var d = new HugeInt(1922215141))
            {
                Assert.AreEqual(-1, System.Math.Sign(a.CompareTo(d)));
                Assert.AreEqual(1, System.Math.Sign((-a).CompareTo(d)));
                Assert.AreEqual(-1, System.Math.Sign((-a).CompareTo(d + 1)));
                Assert.AreEqual(1, System.Math.Sign(d.CompareTo(a)));
                Assert.AreEqual(-1, System.Math.Sign(d.CompareTo(-a)));
                Assert.AreEqual(1, System.Math.Sign((d + 1).CompareTo(-a)));

                Assert.AreEqual(0, System.Math.Sign(b.CompareTo(c)));
                Assert.AreEqual(0, System.Math.Sign(c.CompareTo(b)));
                Assert.AreEqual(0, System.Math.Sign((-b).CompareTo(-c)));
                Assert.AreEqual(0, System.Math.Sign((-c).CompareTo(-b)));

                Assert.AreEqual(1, System.Math.Sign(b.CompareTo(c - 1)));
                Assert.AreEqual(1, System.Math.Sign(c.CompareTo(b - 1)));
                Assert.AreEqual(-1, System.Math.Sign((-b).CompareTo(1 - c)));
                Assert.AreEqual(-1, System.Math.Sign((-c).CompareTo(1 - b)));
            }
        }
예제 #6
0
 public void RationalFromInvalidString2()
 {
     using (var a = new HugeRational())
     {
         a.SetTo("12345/13345A");
     }
 }
예제 #7
0
 public void RationalCompareToNonExpression()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     {
         a.CompareTo("abc");
     }
 }
예제 #8
0
 public void RationalConstructorFromDoubleNegative()
 {
     using (var a = new HugeRational(-123456789123456.75))
     {
         Assert.AreEqual("-493827156493827/4", a.ToString());
     }
 }
 public void RationalConstructorFromDoubleNegative()
 {
     using (var a = new HugeRational(-123456789123456.75))
     {
         Assert.AreEqual("-493827156493827/4", a.ToString());
     }
 }
예제 #10
0
 public void RationalConstructorFromIntExpression()
 {
     using (var a = new HugeInt("2340958273409578234095823045723490587"))
         using (var b = new HugeRational(a + 1))
         {
             Assert.AreEqual("2340958273409578234095823045723490588/1", b.ToString());
         }
 }
예제 #11
0
 public void RationalConstructorFromFloatExpression()
 {
     using (var a = new HugeFloat("2340958273409578234.25"))
         using (var b = new HugeRational(a + 1))
         {
             Assert.AreEqual("9363833093638312941/4", b.ToString());
         }
 }
예제 #12
0
 public void RationalConstructorFromExpression()
 {
     using (var a = new HugeRational("2340958273409578234095823045723490587/362736035870515331128527330659"))
         using (var b = new HugeRational(a + 1))
         {
             Assert.AreEqual(a + 1, b);
         }
 }
예제 #13
0
 public void RationalConstructorFromExpression()
 {
     using (var a = new HugeRational("2340958273409578234095823045723490587/362736035870515331128527330659"))
     using (var b = new HugeRational(a + 1))
     {
         Assert.AreEqual(a + 1, b);
     }
 }
예제 #14
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void RationalAssignFloat()
 {
     using (var a = new HugeFloat("9363833093638312937.25"))
     using (var b = new HugeRational())
     {
         b.SetTo(a);
         Assert.AreEqual("37455332374553251749/4", b.ToString());
     }
 }
예제 #15
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void RationalAssignCopy()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var b = new HugeRational())
     {
         b.Value = a;
         Assert.AreEqual("-222509832503450298345029835740293845720/115756986668303657898962467957", b.ToString());
     }
 }
예제 #16
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void FloatAssignRational()
 {
     using (var a = new HugeRational(1, 3))
     using (var b = new HugeFloat())
     {
         b.SetTo(a);
         FloatAssert.AreEqual(".33333333333333333333333333333333333333333333333333333333333333333333333333333333333", b);
     }
 }
예제 #17
0
 public void FloatAssignRational()
 {
     using (var a = new HugeRational(1, 3))
         using (var b = new HugeFloat())
         {
             b.SetTo(a);
             FloatAssert.AreEqual(".33333333333333333333333333333333333333333333333333333333333333333333333333333333333", b);
         }
 }
예제 #18
0
 public void IntAssignRational()
 {
     using (var a = new HugeRational("222509832503450298345029835740293845720/7"))
     using (var b = new HugeInt())
     {
         b.SetTo(a);
         Assert.AreEqual("31787118929064328335004262248613406531", b.ToString());
     }
 }
예제 #19
0
 public void RationalAssignCopy()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845720/115756986668303657898962467957"))
         using (var b = new HugeRational())
         {
             b.Value = a;
             Assert.AreEqual("-222509832503450298345029835740293845720/115756986668303657898962467957", b.ToString());
         }
 }
예제 #20
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void RationalAssignFloat2()
 {
     using(var a = new HugeFloat("222509832503450298342455029.125"))
     using(var b = new HugeRational("1/3"))
     {
         b.SetTo(a);
         Assert.AreEqual("1780078660027602386739640233/8", b.ToString());
     }
 }
예제 #21
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void RationalAssignInt()
 {
     using (var a = new HugeInt("222509832503450298345029835740293845720"))
     using (var b = new HugeRational("1/3"))
     {
         b.SetTo(a);
         Assert.AreEqual("222509832503450298345029835740293845720/1", b.ToString());
     }
 }
예제 #22
0
 public void RationalDenominator()
 {
     using (var a = new HugeRational())
     {
         a.Denominator.Dispose();
         Assert.AreNotEqual(0, a.Denominator.NumberOfLimbsAllocated());
         Assert.AreEqual("1", a.Denominator.ToString());
     }
 }
예제 #23
0
 public void RationalAssignFloat2()
 {
     using (var a = new HugeFloat("222509832503450298342455029.125"))
         using (var b = new HugeRational("1/3"))
         {
             b.SetTo(a);
             Assert.AreEqual("1780078660027602386739640233/8", b.ToString());
         }
 }
예제 #24
0
 public void RationalCompoundOperators()
 {
     using (var a = new HugeRational("938475092834705928347523452345/115756986668303657898962467957"))
     {
         a.Value += 1;
         a.Value *= 10;
         Assert.AreEqual("10542320795030095862464859203020/115756986668303657898962467957", a.ToString());
     }
 }
예제 #25
0
 public void RationalAssignInt()
 {
     using (var a = new HugeInt("222509832503450298345029835740293845720"))
         using (var b = new HugeRational("1/3"))
         {
             b.SetTo(a);
             Assert.AreEqual("222509832503450298345029835740293845720/1", b.ToString());
         }
 }
예제 #26
0
 public void RationalDivideHugeRational()
 {
     using (var a = new HugeRational("115756986668303657898962467957/394580293847502987609283945873594873409587"))
         using (var b = new HugeRational("593169091750307653294"))
         {
             a.Value = a / b;
             Assert.AreEqual("115756986668303657898962467957/234052834524092854092760134269509268758750275703033222451729578", a.ToString());
         }
 }
예제 #27
0
 public void RationalAssignFloat()
 {
     using (var a = new HugeFloat("9363833093638312937.25"))
         using (var b = new HugeRational())
         {
             b.SetTo(a);
             Assert.AreEqual("37455332374553251749/4", b.ToString());
         }
 }
예제 #28
0
 public void IntAssignRational()
 {
     using (var a = new HugeRational("222509832503450298345029835740293845720/7"))
         using (var b = new HugeInt())
         {
             b.SetTo(a);
             Assert.AreEqual("31787118929064328335004262248613406531", b.ToString());
         }
 }
예제 #29
0
 public void RationalShiftLeft()
 {
     using (var a = new HugeRational("-12345700987ABCDEF2345CBDEFA245230948/17607EF654EB9A13FFA163C75", 16))
     {
         uint b = 40;
         a.Value = a << b;
         Assert.AreEqual("-12345700987ABCDEF2345CBDEFA2452309480000000000/17607EF654EB9A13FFA163C75", a.ToString(16));
     }
 }
예제 #30
0
 public void RationalSign()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     {
         Assert.AreEqual(-1, a.Sign());
         Assert.AreEqual(1, (-a).Sign());
         Assert.AreEqual(0, (a - a).Sign());
     }
 }
예제 #31
0
 public void RationalShiftRight()
 {
     using (var a = new HugeRational("ABCDEF052834524092854092874502983745029345723098457209305983434345/17607EF654EB9A13FFA163C75", 16))
     {
         uint b = 96;
         a.Value = a >> b;
         Assert.AreEqual("ABCDEF052834524092854092874502983745029345723098457209305983434345/17607EF654EB9A13FFA163C75000000000000000000000000", a.ToString(16));
     }
 }
예제 #32
0
 public void RationalGetHashCodeTest()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     {
         Assert.AreNotEqual(0, a.GetHashCode());
         Assert.AreEqual(a.GetHashCode(), (a + 0).GetHashCode());
         Assert.AreNotEqual(a.GetHashCode(), (-a).GetHashCode());
     }
 }
예제 #33
0
 public void RationalCanonicalize()
 {
     using (var a = new HugeRational(198, 15))
     {
         a.Denominator.Value = -a.Denominator;
         Assert.AreEqual("198/-15", a.ToString());
         a.Canonicalize();
         Assert.AreEqual("-66/5", a.ToString());
     }
 }
예제 #34
0
 public void RationalEqualsOperatorLimb()
 {
     using (var a = new HugeRational("-835740293845721"))
     {
         ulong b = 835740293845720;
         Assert.IsFalse(b == a);
         Assert.IsFalse(a == b + 1);
         Assert.IsTrue(-(a + 1) == b);
     }
 }
예제 #35
0
 public void RationalEqualsSignedLimb()
 {
     using (var a = new HugeRational(Platform.Select("-222509832505", "-222509835")))
     {
         var b = Platform.Si(-222509832504, -222509834);
         Assert.IsFalse(a.Equals(b + 1));
         Assert.IsTrue(a.Equals(b - 1));
         Assert.IsTrue((a + 1).Equals(b));
     }
 }
예제 #36
0
 public void RationalEqualsLimb()
 {
     using (var a = new HugeRational(Platform.Select("222509832503", "2225098323")))
     {
         var b = Platform.Ui(222509832504, 2225098324);
         Assert.IsFalse(a.Equals(b + 1));
         Assert.IsTrue(a.Equals(b - 1));
         Assert.IsTrue((a + 1).Equals(b));
     }
 }
예제 #37
0
 public void RationalConstructorFromIntExpression2()
 {
     using (var a = new HugeInt("2340958273409578234095823045723490587"))
         using (var d = new HugeInt("362736035870515331128527330659"))
             using (var b = new HugeRational(a + 2, d * 2))
             {
                 Assert.AreEqual(a + 2, b.Numerator);
                 Assert.AreEqual(d * 2, b.Denominator);
             }
 }
예제 #38
0
        private void VerifyPartialResult(MpirRandom rnd, RationalExpression expr, long expected)
        {
            rnd.Seed(123);

            using (var r = new HugeRational())
            {
                r.Value = expr;
                Assert.AreEqual(expected.ToString() + "/1", r.ToString());
            }
        }
예제 #39
0
 public void RationalNotEqualOperatorSignedLimb()
 {
     using (var a = new HugeRational("-835740293845721"))
     {
         long b = -835740293845720;
         Assert.IsTrue(b != a);
         Assert.IsTrue(a != b + 1);
         Assert.IsFalse(a + 1 != b);
     }
 }
예제 #40
0
        public void RationalStringConstructor()
        {
            var n = "5432109876543212345789023245987/362736035870515331128527330659";

            using (var a = new HugeRational(n))
            {
                Assert.AreEqual(128 / MpirSettings.BITS_PER_LIMB, a.NumeratorNumberOfLimbsUsed());
                Assert.AreEqual(n, a.ToString());
            }
        }
예제 #41
0
 public void RationalAddHugeRational()
 {
     using (var a = new HugeRational("222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var b = new HugeRational("222987435987982730594288574029879874539/590872612825179551336102196593"))
     using (var c = new HugeRational(a + b))
     {
         Assert.AreEqual(a.Numerator * b.Denominator + b.Numerator * a.Denominator, c.Numerator);
         Assert.AreEqual(a.Denominator * b.Denominator, c.Denominator);
     }
 }
예제 #42
0
        public void RationalStringConstructorNumeratorOnly()
        {
            var n = "5432109876543212345789023245987";

            using (var a = new HugeRational(n))
            {
                Assert.AreEqual(128 / MpirSettings.BITS_PER_LIMB, a.NumeratorNumberOfLimbsUsed());
                Assert.AreEqual(n + "/1", a.ToString());
            }
        }
예제 #43
0
 public void RationalApproximateSizeInBase()
 {
     using (var a = new HugeRational("2983475029834750293429834750298347502934298347502983475029342983475029834750293429834750298347502934/115756986668303657898962467957"))
     {
         AssertBetween(131, 133, a.ApproximateSizeInBase(10));
         AssertBetween(429, 429, a.ApproximateSizeInBase(2));
         AssertBetween(109, 109, a.ApproximateSizeInBase(16));
         AssertBetween(84, 86, a.ApproximateSizeInBase(36));
         AssertBetween(74, 76, a.ApproximateSizeInBase(62));
     }
 }
예제 #44
0
 public void RationalAddLimb()
 {
     using (var a = new HugeRational("222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var c = new HugeRational())
     {
         var b = Platform.Ui(4288574029879874539UL, 4288574029U);
         c.Value = a + b;
         Assert.AreEqual(a.Numerator + b * a.Denominator, c.Numerator);
         Assert.AreEqual(a.Denominator, c.Denominator);
     }
 }
예제 #45
0
 public void RationalCompareToHugeRational()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     using (var b = new HugeRational("222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var c = new HugeRational("1/115756986668303657898962467957"))
     {
         Assert.AreEqual(1, System.Math.Sign(b.CompareTo(a)));
         Assert.AreEqual(-1, System.Math.Sign(a.CompareTo(b + 1)));
         Assert.AreEqual(0, System.Math.Sign((a + c).CompareTo(-b)));
         Assert.AreEqual(1, System.Math.Sign(a.CompareTo(null)));
     }
 }
예제 #46
0
 public void RationalCompareToExpression()
 {
     using (var a = new HugeRational("-222509832503450298345029835740293845721/115756986668303657898962467957"))
     using (var b = new HugeRational("222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var c = new HugeRational("1/115756986668303657898962467957"))
     {
         Assert.AreEqual(1, System.Math.Sign(((IComparable<RationalExpression>)b).CompareTo(a)));
         Assert.AreEqual(-1, System.Math.Sign(((IComparable<RationalExpression>)a).CompareTo(b)));
         Assert.AreEqual(1, System.Math.Sign(((IComparable<RationalExpression>)a).CompareTo(null)));
         Assert.AreEqual(0, System.Math.Sign(((IComparable<RationalExpression>)(a + c)).CompareTo(-b)));
     }
 }
예제 #47
0
        public void RationalFromLong()
        {
            using (var a = new HugeRational())
            {
                var b = Platform.Si(-0x784739ABCDEF4876, -0xF84776);
                var d = Platform.Ui(12764787846358441471, 3628273133);
                a.SetTo(b, d);
                Assert.AreEqual(b.ToString() + "/" + d.ToString(), a.ToString());

                a.SetTo(b);
                Assert.AreEqual(b.ToString() + "/1", a.ToString());
            }
        }
예제 #48
0
파일: Assignment.cs 프로젝트: wbhart/mpir
 public void RationalAssignInt2()
 {
     using (var a = new HugeInt("222509832503450298345029835740293845719"))
     using (var d = new HugeInt("115756986668303657898962467957"))
     using (var b = new HugeRational("1/3"))
     {
         b.SetTo(a, d);
         Assert.AreEqual("222509832503450298345029835740293845719/115756986668303657898962467957", b.ToString());
         b.SetTo(b.Numerator - b.Denominator, b.Denominator * 5);
         Assert.AreEqual(a - d, b.Numerator);
         Assert.AreEqual(d * 5, b.Denominator);
     }
 }
예제 #49
0
 public void RationalAddHugeInt()
 {
     using (var a = new HugeRational("222509832503450298345029835740293845720/115756986668303657898962467957"))
     using (var b = new HugeInt("222987435987982730594288574029879874539"))
     using (var c = new HugeRational(a + b))
     {
         Assert.AreEqual(a.Numerator + b * a.Denominator, c.Numerator);
         Assert.AreEqual(a.Denominator, c.Denominator);
         c.Value = (b + 1) + a;
         Assert.AreEqual(a.Numerator + (b + 1) * a.Denominator, c.Numerator);
         Assert.AreEqual(a.Denominator, c.Denominator);
     }
 }
예제 #50
0
파일: IO.cs 프로젝트: BrianGladman/mpir
 public void RationalInputOutputRaw()
 {
     using (var a = new HugeRational("0x10123456789ABCDEF0123456789ABCDEF0123456789ABCDEF/361720912810755408215708460645842859722715865206816237944587"))
     using (var b = new HugeRational())
     using (var ms = new MemoryStream())
     {
         a.Value = a ^ 100;
         a.Write(ms);
         ms.Position = 0;
         b.Read(ms);
         Assert.AreEqual(a, b);
         Assert.AreEqual(ms.Length, ms.Position);
     }
 }
예제 #51
0
        public void IntTestAllExpressions()
        {
            var baseExpr = typeof(IntegerExpression);
            var allExpressions =
                baseExpr.Assembly.GetTypes()
                .Where(x => baseExpr.IsAssignableFrom(x) && !x.IsAbstract)
                .ToList();

            var one = Platform.Ui(1, 1);

            using (var a = new HugeInt(-9L))
            using (var b = new HugeInt(4L))
            using (var c = new HugeRational(6, 7))
            using (var r = MpirRandom.Default())
            {
                var expr = a + (-a * 2) * 3 * (a.Abs() * -2 + -64 + a * a) + (one * 116U) + a;
                VerifyPartialResult(r, expr, 44);
                expr = expr + a * 5 + (a+b) * (b + 1) * (b + -3) * b + (b * -a) - (b * (one * 25U)) - a + (b << 3) - ((a*b) << 1);
                VerifyPartialResult(r, expr, -52);
                expr = expr - 2 - 3U + (b - (a << 1)) + (b * b - (one * 15U)) * (b - a) * (a - 11) * (b - 3U) - (-340 - a) + ((one * 20U) - b);
                VerifyPartialResult(r, expr, 52);
                expr = expr + (-7 - 2 * a) + (28U - 4 * b) + -(a + b * 2) + (3 * a).Abs();
                VerifyPartialResult(r, expr, 103);
                expr = expr / a + expr / (3 * b) - a / b - b / (a + 10) + a % b - (3 * b) % a + a % (2 * b) - (12 * b) % (-5 * a) + (a * 4 / 8).Rounding(RoundingModes.Floor) + (b * 3 % 7).Rounding(RoundingModes.Ceiling);
                VerifyPartialResult(r, expr, -20);
                expr = expr - (a * 5).DivideExactly(a) + (b * 7 * 5432198).DivideExactly(5432198) + (b >> 1);
                VerifyPartialResult(r, expr, 5);
                expr = expr + (b ^ 3) + a.PowerMod(2, b) + (a + 6).PowerMod(b - 1, b * 5) + (a * a * a).Root(3) + (b * b).SquareRoot();
                VerifyPartialResult(r, expr, 78);
                expr = expr + ((b + 1) & -a) + (b | -a) - (b ^ a) + ~b;
                VerifyPartialResult(r, expr, 100);
                expr = expr + r.GetInt(b + 1) + r.GetIntBits(3) + r.GetIntBitsChunky(3) + (b * 2).NextPrimeCandidate(r) - b.Gcd(a - 1);
                VerifyPartialResult(r, expr, 124);
                expr = expr - a.Lcm(b * 3) - (b + 1).Lcm(2) - (-a).Invert(b + 7) - (1-a).RemoveFactors(b / 2) - HugeInt.Power(2, 3) - HugeInt.Factorial(4);
                VerifyPartialResult(r, expr, 36);
                expr = expr - HugeInt.Primorial(6) + HugeInt.Binomial(4, 2) + HugeInt.Binomial(b, 3) + HugeInt.Fibonacci(6) + HugeInt.Lucas(7);
                VerifyPartialResult(r, expr, 53);
                expr = expr + c.Numerator + c.Denominator;
                VerifyPartialResult(r, expr, 66);

                MarkExpressionsUsed(allExpressions, expr);
            }

            Assert.AreEqual(0, allExpressions.Count, "Expression types not exercised: " + string.Join("",
                allExpressions.Select(x => Environment.NewLine + x.Name).OrderBy(x => x)));
        }
예제 #52
0
파일: IO.cs 프로젝트: BrianGladman/mpir
        public void RationalInputOutputStr()
        {
            using (var a = new HugeRational("0x10123456789ABCDEF0123456789ABCDEF0123456789ABCDEF/361720912810755408215708460645842859722715865206816237944587"))
            using (var b = new HugeRational())
            using (var ms = new MemoryStream())
            {
                a.Value = a ^ 100;
                using (var writer = new StreamWriter(ms, Encoding.UTF8, 1024, true))
                    a.Write(writer);

                ms.Position = 0;

                using (var reader = new StreamReader(ms, Encoding.UTF8, false, 1024, true))
                    b.Read(reader);

                Assert.AreEqual(a, b);
                Assert.AreEqual(ms.Length, ms.Position);
            }
        }
예제 #53
0
 public void RationalConstructorFromIntExpression()
 {
     using (var a = new HugeInt("2340958273409578234095823045723490587"))
     using (var b = new HugeRational(a + 1))
     {
         Assert.AreEqual("2340958273409578234095823045723490588/1", b.ToString());
     }
 }
예제 #54
0
 public void RationalConstructorFromFloatExpression()
 {
     using (var a = new HugeFloat("2340958273409578234.25"))
     using (var b = new HugeRational(a + 1))
     {
         Assert.AreEqual("9363833093638312941/4", b.ToString());
     }
 }
예제 #55
0
 public void RationalStringConstructorNumeratorOnly()
 {
     var n = "5432109876543212345789023245987";
     using(var a = new HugeRational(n))
     {
         Assert.AreEqual(128 / MpirSettings.BITS_PER_LIMB, a.NumeratorNumberOfLimbsUsed());
         Assert.AreEqual(n + "/1", a.ToString());
     }
 }
예제 #56
0
 public void RationalStringConstructorInvalid2()
 {
     var a = new HugeRational("12345/54321A");
 }
예제 #57
0
 public void RationalStringConstructorHexPrefix()
 {
     using (var i = new HugeInt("362736035870515331128527330659"))
     {
         var d = i.ToString(16);
         var n = "143210ABCDEF32123457ACDB324598799";
         using (var a = new HugeRational("0x" + n + "/0x" + d))
         {
             Assert.AreEqual(n + "/" + d, a.ToString(16));
             Assert.AreEqual(i, a.Denominator);
         }
     }
 }
예제 #58
0
 public void RationalStringConstructorHex()
 {
     using (var i = new HugeInt("362736035870515331128527330659"))
     {
         var d = i.ToString(16);
         var n = "143210ABCDEF32123457ACDB324598799";
         using (var a = new HugeRational(n + "/" + d, 16))
         {
             Assert.AreEqual(n, a.Numerator.ToString(16));
             Assert.AreEqual(1 + 128 / MpirSettings.BITS_PER_LIMB, a.NumeratorNumberOfLimbsUsed());
             Assert.AreEqual(i, a.Denominator);
         }
     }
 }
예제 #59
0
 public void RationalStringConstructor()
 {
     var n = "5432109876543212345789023245987/362736035870515331128527330659";
     using (var a = new HugeRational(n))
     {
         Assert.AreEqual(128 / MpirSettings.BITS_PER_LIMB, a.NumeratorNumberOfLimbsUsed());
         Assert.AreEqual(n, a.ToString());
     }
 }
예제 #60
0
 public void RationalStringAssignmentHexPrefix()
 {
     using (var i = new HugeInt("362736035870515331128527330659"))
     {
         var d = i.ToString(16);
         var n = "143210ABCDEF32123457ACDB324598799";
         using (var a = new HugeRational("0x" + n + "/0x" + d))
         {
             Assert.AreEqual(n + "/" + d, a.ToString(16));
             Assert.AreEqual(n + "/" + d, a.ToString(16, false));
             Assert.AreEqual((n + "/" + d).ToLower(), a.ToString(16, true));
             a.SetTo("-0x" + n + "/0x17");
             Assert.AreEqual("-" + n + "/17", a.ToString(16));
         }
     }
 }