//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//
using System;

namespace Testing
{
enum Cars
{
    Ford,
    Chevrolet,
    Buick,
    Dodge
}
enum Boats : byte
{
    Sail,
    Yacht,
    Speed,
    Fishing
}
enum Motorcyle : long
{
    Honda = 1,
    Yamaha,
    Kawasaki,
    BMW
}
	struct BigObject
	{
		public long value1;
		public long value2;
		public long value3;
		public long value4;
		public long value5;
		public long value6;
		public long value7;
		public long value8;
		public long value9;
		public long value10;
		public long value11;
		public long value12;
		public long value13;
		public long value14;
		public long value15;
		public long value16;
		public long value17;
		public long value18;
		public long value19;
		public long value20;
	}
	enum ByteValues : byte
                  {
		BA,
		BB,
		BC
                  }
	enum SignedByteValues : sbyte
                  {
		SA,
		SB,
		SC
                  }
	class HelloMain
	{
		static void OutputBigObject(BigObject bo)
		{
			Console.WriteLine("{0}", bo);
		}
		static void BoatOperations(Boats b)
		{
			Console.WriteLine("{0}", b);
			foreach(byte i in Enum.GetValues(b.GetType()))
			{
				Console.WriteLine("Boat Value: {0} -> {1}", i, Enum.GetName(b.GetType(), i));
			}
			foreach(string s in Enum.GetNames(b.GetType()))
			{
				Console.WriteLine("Enum: {0}", s);
			}
			b = (Boats)Enum.Parse(typeof(Boats), "Fishing", true);
			Console.WriteLine("Parse enum: {0}", b);
			if(Enum.IsDefined(typeof(Boats), (byte)3))
			{
				Console.WriteLine("Wartość 3 została zdefiniowana dla Boats");
			}
		}
		static void Main(string[] args)
		{
byte a = 2;
sbyte b = -2;
short c = 0x1FFF;
int d = -1234;
long e = 49;
ushort f = 0xFFFE;
uint g = 4294967294;
ulong h = 18446744073709551614;
float i = -1.0F;
float j = 1.0e2F;
double k = 10.8;
double l = 1234.5678D;
bool m = true;
char n = 'A';
char o = '\x456';
char p = '\u0924';
decimal q = 90.45M;
			int ii = 0;
			uint si = 0;
			long ll = 0;
			ulong ul = 0;
			decimal dd = 0;
			float fp = 0;
			double dp = 0;
			Console.WriteLine("{0} {1} {2}", ii.GetType(), 
							     int.MinValue,
							     int.MaxValue);
			Console.WriteLine("{0} {1} {2}", si.GetType(), 
							     uint.MinValue,
							     uint.MaxValue);
			Console.WriteLine("{0} {1} {2}", ll.GetType(), 
							     long.MinValue,
							     long.MaxValue);
			Console.WriteLine("{0} {1} {2}", ul.GetType(), 
							     ulong.MinValue,
							     ulong.MaxValue);
			Console.WriteLine("{0} {1} {2}", dd.GetType(), 
							     decimal.MinValue,
							     decimal.MaxValue);
			Console.WriteLine("{0} {1} {2}", fp.GetType(), 
							     float.MinValue,
							     float.MaxValue);
			Console.WriteLine("{0} {1} {2}", dp.GetType(), 
							     double.MinValue,
							     double.MaxValue);
			BigObject bo = new BigObject();
			bo.value1 = 1;
			bo.value2 = 2;
			bo.value3 = 3;
			bo.value4 = 4;
			bo.value5 = 5;
			bo.value6 = 6;
			bo.value7 = 7;
			bo.value8 = 8;
			bo.value9 = 9;
			bo.value10 = 10;
			bo.value11 = 11;
			bo.value12 = 12;
			bo.value13 = 13;
			bo.value14 = 14;
			bo.value15 = 15;
			bo.value16 = 16;
			bo.value17 = 17;
			bo.value18 = 18;
			bo.value19 = 19;
			bo.value20 = 20;
			Console.WriteLine("{0}", bo.GetType());
			OutputBigObject(bo);
			Boats eb = Boats.Sail;
			switch(eb)
			{
				case Boats.Sail:
					Console.WriteLine("Żaglówka");
				break;
			}
			if(eb == Boats.Sail)
			{
				Console.WriteLine("Żaglówka");
			}
			BoatOperations(eb);
		}
	}
}
