2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / tests / gen-65.cs
1 //-- ex-gen-type-parameter-in-constraint
2
3 using System;
4 using System.Collections.Generic;
5
6 // A constraint may involve type parameters 
7 // A type may have multiple constraints 
8
9 struct ComparablePair<T,U> : IComparable<ComparablePair<T,U>>
10   where T : IComparable<T> 
11   where U : IComparable<U> {
12   public readonly T Fst;
13   public readonly U Snd;
14   
15   public ComparablePair(T fst, U snd) {
16     Fst = fst; Snd = snd;
17   }
18   
19   // Lexicographic ordering
20   public int CompareTo(ComparablePair<T,U> that) {
21     int firstCmp = this.Fst.CompareTo(that.Fst);
22     return firstCmp != 0 ? firstCmp : this.Snd.CompareTo(that.Snd);
23   }
24
25   public bool Equals(ComparablePair<T,U> that) {
26     return this.Fst.Equals(that.Fst) && this.Snd.Equals(that.Snd);
27   }
28
29   public override String ToString() {
30     return "(" + Fst + ", " + Snd + ")";
31   }
32 }
33
34 // Sorting soccer world champions by country and year
35
36 class MyTest {
37         static void Test ()
38         {
39                 new ComparablePair<string,int>("Brazil", 2002);
40         }
41
42   public static void Main(string[] args) {
43     List<ComparablePair<string,int>> lst 
44       = new List<ComparablePair<string,int>>();
45     lst.Add(new ComparablePair<String,int>("Brazil", 2002));
46     lst.Add(new ComparablePair<String,int>("Italy", 1982));
47     lst.Add(new ComparablePair<String,int>("Argentina", 1978 ));
48     lst.Add(new ComparablePair<String,int>("Argentina", 1986 ));
49     lst.Add(new ComparablePair<String,int>("Germany", 1990));
50     lst.Add(new ComparablePair<String,int>("Brazil", 1994));
51     lst.Add(new ComparablePair<String,int>("France", 1998));
52     // lst.Sort();
53     foreach (ComparablePair<String,int> pair in lst) 
54       Console.WriteLine(pair);
55   }
56 }