//
// 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
{
	class CheckedMain
	{
		static short x = Int16.MaxValue;
		static short y = Int16.MaxValue;
		static int AddShort()
		{
			int ret = 0;
			try
			{
				ret = (short)(x + y);
			}
			catch(Exception e)
			{
				Console.WriteLine(e);
			}
			return ret;
		}
		static int AddCheckedShort()
		{
			int ret = 0;
			try
			{
				ret = checked((short)(x + y));
			}
			catch(Exception e)
			{
				Console.WriteLine("Sprawdzono:");
				Console.WriteLine(e);
			}
			return ret;
		}
		static int AddUncheckedShort()
		{
			int ret = 0;
			try
			{
				ret = unchecked((short)(x + y));
			}
			catch(Exception e)
			{
				Console.WriteLine("Nie sprawdzono:");
				Console.WriteLine(e);
			}
			return ret;
		}
		public static void Main() 
		{
			const int c1 = 5;
			Console.WriteLine("AddShort zwraca: {0}", AddShort());
			Console.WriteLine("AddCheckedShort zwraca: {0}", AddCheckedShort());
			Console.WriteLine("AddUncheckedShort zwraca: {0}", AddUncheckedShort());
			c1++;
		}
	}
}