Welcome to mirror list, hosted at ThFree Co, Russian Federation.

test-125.cs « tests « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 51217ef2697edcfd99f8fa78dea42df50e787c5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;

public class Fraction {

	public Fraction(int numerator, int denominator) {
		Console.WriteLine("In Fraction Constructor(int, int)");
		this.numerator = numerator;
		this.denominator = denominator;
	}

	public Fraction(int wholeNumber) {
		Console.WriteLine("In Fraction Constructor(int)");
		numerator = wholeNumber;
		denominator = 1;
	}

	// this function is not recognised by mcs further down
	public static implicit operator Fraction(int theInt) {
		Console.WriteLine("In implicit conversion to Fraction");
		return new Fraction(theInt);
	}

	public static explicit operator int(Fraction theFraction) {
		Console.WriteLine("In explicit conversion to int");
		return theFraction.numerator /
			theFraction.denominator;
	}

	public static bool operator==(Fraction lhs, Fraction rhs) {
		Console.WriteLine("In operator ==");
		if (lhs.denominator == rhs.denominator &&
		    lhs.numerator == rhs.numerator) {
			return true;
		}
		// code here to handle unlike fraction
		return false;
	}

	public static bool operator!=(Fraction lhs, Fraction rhs) {
		Console.WriteLine("In operator !=");
		return !(lhs == rhs);
	}

	public override bool Equals(object o) {
		Console.WriteLine("In method Equals");
		if (! (o is Fraction)) {
			return false;
		}
		return this == (Fraction) o;
	}
  
	public static Fraction operator+(Fraction lhs, Fraction rhs) {
		Console.WriteLine("In operator +");
		if (lhs.denominator == rhs.denominator) {
			return new Fraction(lhs.numerator + rhs.numerator,
					    lhs.denominator);
		}

		// simplistic solution for unlike fractions
		// 1/2 + 3/4 == (1*4) + (3*2) / (2*4) == 10/8
		int firstProduct = lhs.numerator * rhs.denominator;
		int secondProduct = lhs.denominator * rhs.numerator;
		return new Fraction(
				    firstProduct + secondProduct,
				    lhs.denominator * rhs.denominator);
	}

	public override string ToString() {
		String s = numerator.ToString() + "/" +
			denominator.ToString();
		return s;
	}

	private int numerator;
	private int denominator;
}

public class Tester {
	public static int Main() {

		Fraction f1 = new Fraction(3,4);
		Console.WriteLine("f1: {0}", f1.ToString());

		Fraction f2 = new Fraction(2,4);
		Console.WriteLine("f2: {0}", f2.ToString());

		Fraction f3 = f1 + f2;
		Console.WriteLine("f1 + f2 = f3: {0}", f3.ToString());

		Fraction f4 = f3 + 5;
		Console.WriteLine("f3 + 5 = f4: {0}", f4.ToString());

		Fraction f5 = new Fraction(2, 4);
		if (f5 == f2) 
			Console.WriteLine("f5: {0} == f2: {1}",	f5.ToString(), f2.ToString());
		

		return 0;
	}
}