All pastes #36270 Raw Edit

Mine

public text v1 · immutable
#36270 ·published 2006-01-09 17:23 UTC
rendered paste body
using CSUnit;
using System;

public class TestCasts : TestCase
{

	private BaseClass baseClass;
	private DerivedClass derivedClass;
	
	protected override void Setup()
	{
		baseClass = new BaseClass();
		derivedClass = new DerivedClass();
	}

	protected override void Cleanup() {}

	public TestCasts(string name) : base(name) {}

	public void TestSimpleCasts()
	{
		AssertEquals(10, baseClass.getNum(10));
		AssertEquals(11, derivedClass.getNum(10));

		//test allowed cast
		try {
			BaseClass castedDerivedClass = derivedClass;
			AssertEquals(11, castedDerivedClass.getNum(10));
		} catch (Exception) {
			Fail();
		}

		//test not allowed cast
		try {
			DerivedClass castedBaseClass = (DerivedClass) baseClass;
			Fail();
		} catch (Exception) {
		}
	}

	public void TestSimpleInterfaceCasts()
	{
		//test not allowed cast
		try {
			INum num = (INum) baseClass;
			Fail();
		} catch (Exception) {
		}

		//test allowed cast
		try {
			INum num = derivedClass;
			AssertEquals(666, num.getNum());
		} catch (Exception) {
			Fail();
		}
	}
	
	public void TestSimpleBoxingUnboxing()
	{
		int i = 100;
		object box = i;
		
		//boxing
		if (box is int) {} else		
			Fail();

		AssertEquals(box, i);
		AssertEquals(100, box);
		
		//unboxing
		int j = (int) box;
		AssertEquals(100, j);
	}

	public void TestAdvancedBoxingUnboxing()
	{
		//simple object test
		//boxing
		object box = baseClass;
		if (box is BaseClass) {} else
			Fail();
		//unboxing
		BaseClass newBaseClass = (BaseClass) box;
		AssertEquals(10, newBaseClass.getNum(10));

		//advanced object test
		//boxing
		box = derivedClass;
		if (box is DerivedClass) {} else
			Fail();
		if (box is BaseClass) {} else
			Fail();
		//unboxing
		newBaseClass = (BaseClass) box;
		AssertEquals(11, newBaseClass.getNum(10));
		DerivedClass newDerivedClass = (DerivedClass) box;
		AssertEquals(11, newDerivedClass.getNum(10));
	}
}

//-----------------
//class definitions
//-----------------
public class BaseClass
{
	public BaseClass()
	{
	}

	public virtual int getNum(int num)
	{
		return num;
	}
}

public class DerivedClass : BaseClass, INum
{
	public DerivedClass()
	{
	}

	// overridden method from base class
	public override int getNum(int num)
	{
		return num + 1;
	}

	// method from interface
	public int getNum()
	{
		return 666;
	}
}

//---------------------
//interface definitions
//---------------------
public interface INum
{
	int getNum();
}