2008-09-29 Jb Evain <jbevain@novell.com>
[mcs.git] / tests / gtest-072.cs
blob70a346b584f52f0247495ce1717a8d061e85c536
1 //-- ex-gen-logger
2 //-- ex-gen-struct-pair
3 //-- ex-gen-logging-pairs
4 // 1.2 alpha
6 using System;
8 public class Log<T> {
9 private const int SIZE = 5;
10 private static int instanceCount = 0;
11 private int count = 0;
12 private T[] log = new T[SIZE];
13 public Log() { instanceCount++; }
14 public static int InstanceCount { get { return instanceCount; } }
15 public void Add(T msg) { log[count++ % SIZE] = msg; }
16 public int Count { get { return count; } }
17 public T Last {
18 get { // Return the last log entry, or null if nothing logged yet
19 return count==0 ? default(T) : log[(count-1)%SIZE];
21 set { // Update the last log entry, or create one if nothing logged yet
22 if (count==0)
23 log[count++] = value;
24 else
25 log[(count-1)%SIZE] = value;
28 public T[] All {
29 get {
30 int size = Math.Min(count, SIZE);
31 T[] res = new T[size];
32 for (int i=0; i<size; i++)
33 res[i] = log[(count-size+i) % SIZE];
34 return res;
39 class TestLog {
40 class MyTest {
41 public static void Main(String[] args) {
42 Log<String> log1 = new Log<String>();
43 log1.Add("Reboot");
44 log1.Add("Coffee");
45 Log<DateTime> log2 = new Log<DateTime>();
46 log2.Add(DateTime.Now);
47 log2.Add(DateTime.Now.AddHours(1));
48 DateTime[] dts = log2.All;
49 // Printing both logs:
50 foreach (String s in log1.All)
51 Console.Write("{0} ", s);
52 Console.WriteLine();
53 foreach (DateTime dt in dts)
54 Console.Write("{0} ", dt);
55 Console.WriteLine();
56 TestPairLog();
59 public static void TestPairLog() {
60 Log<Pair<DateTime,String>> log = new Log<Pair<DateTime,String>>();
61 log.Add(new Pair<DateTime,String>(DateTime.Now, "Tea leaves"));
62 log.Add(new Pair<DateTime,String>(DateTime.Now.AddMinutes(2), "Hot water"));
63 log.Add(new Pair<DateTime,String>(DateTime.Now.AddMinutes(7), "Ready"));
64 Pair<DateTime,String>[] allMsgs = log.All;
65 foreach (Pair<DateTime,String> p in allMsgs)
66 Console.WriteLine("At {0}: {1}", p.Fst, p.Snd);
71 public struct Pair<T,U> {
72 public readonly T Fst;
73 public readonly U Snd;
74 public Pair(T fst, U snd) {
75 this.Fst = fst;
76 this.Snd = snd;