Esempio n. 1
0
        //Test, um neue Rundungsfunktion gegen proprietäre zu testen.
        public static void RundungTest()
        {
            Random randObj = new Random();
            while (true)
            {
                int zaehler = randObj.Next(-1000, 1000);
                int nenner = randObj.Next(-1000, 1000);

                if (nenner == 0)
                {
                    nenner = 1;
                }

                Fraction bruch = new Fraction(zaehler, nenner);

                double istRundung = Runde(bruch.ToDouble(), 2);
                double sollRundung = TRunde(bruch.ToDouble(), 2);

                Console.Write(bruch.ToString() + " (" + bruch.ToDouble() + "): " + istRundung + " vs " + sollRundung + " –– ");

                //if (istRundung == sollRundung)
                if (Math.Round(istRundung, 10) == Math.Round(sollRundung, 10))
                {
                    Console.WriteLine("OK");
                }
                else
                {
                    Console.WriteLine("FAIL:");
                    Console.WriteLine("Ist:  " + new Fraction(istRundung).ToString());
                    Console.WriteLine("Soll: " + new Fraction(sollRundung).ToString());
                    Console.WriteLine("");
                }
            }
        }
Esempio n. 2
0
		static void Main(string[] args)
		{
			Fraction frac=new Fraction(); // we'll get NaN
			AssertEqual(frac, Fraction.NaN);
			AssertEqual(frac.ToString() , NumberFormatInfo.CurrentInfo.NaNSymbol);

			frac = new Fraction(1,5);       // we'll get 1/5
			AssertEqual(frac.ToString() , "1/5");

			frac=new Fraction(25);        // we'll get 25
			AssertEqual(frac.ToString() , "25");

			frac=new Fraction(0.0);		// we'll get 0
			AssertEqual(frac.ToString() , "0");

			frac=new Fraction(0.25);      // we'll get 1/4
			AssertEqual(frac.ToString() , "1/4");

			frac=new Fraction(9.25);      // we'll get 37/4
			AssertEqual(frac.ToString() , "37/4");

			frac=new Fraction(long.MaxValue, 1);
			string compareTo = string.Format("{0}", long.MaxValue);
			AssertEqual(frac.ToString() , compareTo);

			frac=new Fraction(1, long.MaxValue);
			compareTo = string.Format("1/{0}", long.MaxValue);
			AssertEqual(frac.ToString() , compareTo);

			frac=new Fraction(long.MaxValue, long.MaxValue);
			AssertEqual(frac.ToString(), "1");

			// the plus-one issue is because of twos-complement representing one more negtive value than
			// positive
			frac=new Fraction(long.MinValue + 1, 1);
			compareTo = string.Format("{0}", long.MinValue + 1);
			AssertEqual(frac.ToString() , compareTo);

			frac=new Fraction(1, long.MinValue + 1);
			compareTo = string.Format("-1/{0}", Math.Abs(long.MinValue + 1));
			AssertEqual(frac.ToString() , compareTo);

			frac=new Fraction(long.MinValue + 1, long.MinValue + 1);
			AssertEqual(frac.ToString(), "1");

			frac=new Fraction(long.MaxValue, long.MinValue + 1);
			AssertEqual(frac.ToString(), "-1");

			frac=new Fraction(long.MinValue + 1, long.MaxValue);
			AssertEqual(frac.ToString(), "-1");

			frac=new Fraction(0.025);     // we'll get 1/40
			AssertEqual(frac.ToString() , "1/40");

			frac=new Fraction(1 / 2.0);   // we'll get 1/2
			AssertEqual(frac.ToString() , "1/2");
			frac=new Fraction(1 / 3.0);   // we'll get 1/3
			AssertEqual(frac.ToString() , "1/3");
			frac=new Fraction(1 / 4.0);   // we'll get 1/4
			AssertEqual(frac.ToString() , "1/4");
			frac=new Fraction(1 / 5.0);   // we'll get 1/5
			AssertEqual(frac.ToString() , "1/5");
			frac=new Fraction(1 / 6.0);   // we'll get 1/6
			AssertEqual(frac.ToString() , "1/6");
			frac=new Fraction(1 / 7.0);   // we'll get 1/7
			AssertEqual(frac.ToString() , "1/7");
			frac=new Fraction(1 / 8.0);   // we'll get 1/8
			AssertEqual(frac.ToString() , "1/8");
			frac=new Fraction(1 / 9.0);   // we'll get 1/9
			AssertEqual(frac.ToString() , "1/9");
			frac=new Fraction(1 / 10.0);   // we'll get 1/10
			AssertEqual(frac.ToString() , "1/10");
			frac=new Fraction(1 / 49.0);   // we'll get 1/49
			AssertEqual(frac.ToString() , "1/49");

			frac=new Fraction(6);
			AssertEqual(frac.ToString() , "6");

			Fraction divisor = new Fraction(4);
			AssertEqual(divisor.ToString() , "4");

			frac %= divisor;
			AssertEqual(frac.ToString(), "2");

			frac=new Fraction(9,4);
			AssertEqual(frac.ToString() , "9/4");

			divisor = new Fraction(2);
			AssertEqual(divisor.ToString() , "2");

			frac %= divisor;
			AssertEqual(frac.ToString() , "1/4");

			frac=new Fraction(5,12);
			AssertEqual(frac.ToString() , "5/12");

			divisor = new Fraction(1,4);
			AssertEqual(divisor.ToString() , "1/4");

			frac %= divisor;
			AssertEqual(frac.ToString() , "1/6");

			frac=new Fraction(1.0);     // we'll get 1
			AssertEqual(frac.ToString() , "1");

			frac=new Fraction(2.0);     // we'll get 2
			AssertEqual(frac.ToString() , "2");

			frac=new Fraction(-2.0);    // we'll get -2
			AssertEqual(frac.ToString() , "-2");

			frac=new Fraction(-1.0);    // we'll get -1
			AssertEqual(frac.ToString() , "-1");

			frac=new Fraction(0.5);		// we'll get 1/2
			AssertEqual(frac.ToString() , "1/2");

			frac=new Fraction(1.5);     // we'll get 3/2
			AssertEqual(frac.ToString() , "3/2");

			Console.WriteLine("Doing the loop check");
			for (int numerator = -100; numerator < 100; numerator++)
			{
				Console.Write("{0} ", numerator);

				for (int denominator = -100; denominator < 100; denominator++)
				{
					Fraction frac1 = new Fraction(numerator, denominator);

					double dbl = (double)numerator / (double)denominator;
					Fraction frac2 = new Fraction(dbl);

					AssertEqual(frac1, frac2);
				}
			}
			Console.WriteLine();

			frac=new Fraction("6.25");    // we'll get 25/4
			AssertEqual(frac.ToString() , "25/4");

			frac = 0;
			AssertEqual(frac.ToString(), "0");

			frac = 1;
			AssertEqual(frac.ToString(), "1");

			frac /= new Fraction(0);
			AssertEqual(frac, Fraction.PositiveInfinity);
			AssertEqual(frac.ToString(), NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol);

			frac = -1;
			AssertEqual(frac.ToString(), "-1");

			frac /= new Fraction(0);
			AssertEqual(frac, Fraction.NegativeInfinity);
			AssertEqual(frac.ToString(), NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol);

			// we can enter anything like "213" or 
			// "23/3" or "4.27"
			Console.Write("Enter a Fraction: ");
			frac = new Fraction( System.Console.ReadLine() );

			Console.WriteLine( frac );     // displays the current value of frac object;

			frac=new Fraction("1/2"); // initialize a fraction with 1/2
			AssertEqual(frac.ToString() , "1/2");

			Console.WriteLine( frac+2.5 );     // will display 3
			AssertEqual((frac + 2.5).ToString() , "3");

			frac="1/2";			// implicit cast from string to 
			AssertEqual(frac.ToString() , "1/2");

			frac="22.5";         // implicit cast from string to fraction
			AssertEqual(frac.ToString() , "45/2");

			frac=10.25;         // implicit cast from double to fraction
			AssertEqual(frac.ToString() , "41/4");

			frac=15;             // implicit cast from integer/long to fraction
			AssertEqual(frac.ToString() , "15");
																																		
			frac = 0.5;                 // initialize frac=1/2
			AssertEqual(frac.ToString() , "1/2");

			Console.WriteLine( frac - 0.25 );    // Yes, you are right. "1/4" is displayed
			AssertEqual((frac - 0.25).ToString(),  "1/4");

			Console.WriteLine(frac + "1/4");
			AssertEqual((frac + "1/4").ToString(), "3/4");

			if (frac.Equals(0.5))
				Console.WriteLine("seems that frac == 0.5");

			frac += 0.5;
			AssertEqual(frac.ToString(), "1");

			if (frac.Equals(1))
				Console.WriteLine("seems that now frac == 1");

			frac = double.NaN;
			Console.WriteLine(frac.ToString());
			AssertEqual(frac.ToString(), NumberFormatInfo.CurrentInfo.NaNSymbol);

			frac = double.PositiveInfinity;
			Console.WriteLine(frac.ToString());
			AssertEqual(frac.ToString(), NumberFormatInfo.CurrentInfo.PositiveInfinitySymbol);

			frac = double.NegativeInfinity;
			Console.WriteLine(frac.ToString());
			AssertEqual(frac.ToString(), NumberFormatInfo.CurrentInfo.NegativeInfinitySymbol);

			frac = "33";
			frac += "1/3";
			Console.WriteLine(frac.ToString());

			frac *= 3;
			Console.WriteLine(frac.ToString());

			Console.Write("Any key to quit");
			Console.ReadLine();
		}