// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; public class Base {} public class Sub : Base {} public class GBase {} public class GSubT : GBase {} public class GTU : IPlusT, IMinusT, IPlusTMinusU {} public class GTArrUArr : IPlusT, IMinusT, IPlusTMinusU {} public class GRefTRefU : IPlusT>, IPlusT>, IPlusTMinusU, IPlusT> {} public class GRefTArrRefUArr : IPlusT>, IPlusT>, IPlusTMinusU,IPlusT> {} public class GArrRefTArrRefU : IPlusT[]>, IPlusT[]>, IPlusTMinusU[],IPlusT[]> {} public class TestClass { static int iTestCount= 0; static int iErrorCount= 0; static int iExitCode = 101; public static void Eval(string location, bool exp) { ++iTestCount; if ( !(exp)) { iErrorCount++; Console.WriteLine("Test Failed at location: {0} @ count {1} ", location, iTestCount); } } private static void UnboxUToTInternal() { T t = (T) Activator.CreateInstance(typeof(U)); } private static void CaseClassUToTWrapper() { UnboxUToTInternal(); } public static bool UnboxUToT(bool expected) { try { CaseClassUToTWrapper(); if (expected) { return true; } else { return false; } } catch (InvalidCastException) { if (expected) { Console.WriteLine("Unexpected Exception InvalidCastException"); return false; } else { return true; } } catch(Exception E) { Console.WriteLine("Unexpected Exception {0}, with T = {1} and U = {2}", E, typeof(T), typeof(U)); return false; } } private static bool RunTests() { Eval("Test001", UnboxUToT, GTU>(true)); Eval("Test002", UnboxUToT, GTU>(true)); Eval("Test003", UnboxUToT, GTU>(true)); Eval("Test004", UnboxUToT, GTU>(true)); Eval("Test005", UnboxUToT, GTU>(true)); Eval("Test006", UnboxUToT, GTU>(true)); Eval("Test007", UnboxUToT>, GTU,GBase>>(true)); Eval("Test008", UnboxUToT>, GTU,GBase>>(true)); Eval("Test009", UnboxUToT,GSubT>, GTU,GBase>>(true)); Eval("Test010", UnboxUToT[]>, GTU[],GBase[]>>(true)); Eval("Test011", UnboxUToT[]>, GTU[],GBase[]>>(true)); Eval("Test012", UnboxUToT[],GSubT[]>, GTU[],GBase[]>>(true)); Eval("Test101", UnboxUToT, GTArrUArr>(true)); Eval("Test102", UnboxUToT, GTArrUArr>(true)); Eval("Test103", UnboxUToT, GTArrUArr>(true)); Eval("Test104", UnboxUToT, GTArrUArr>(true)); Eval("Test105", UnboxUToT, GTArrUArr>(true)); Eval("Test106", UnboxUToT, GTArrUArr>(true)); Eval("Test107", UnboxUToT[]>, GTArrUArr,GBase>>(true)); Eval("Test108", UnboxUToT[]>, GTArrUArr,GBase>>(true)); Eval("Test109", UnboxUToT[],GSubT[]>, GTArrUArr,GBase>>(true)); Eval("Test110", UnboxUToT[][]>, GTArrUArr[],GBase[]>>(true)); Eval("Test111", UnboxUToT[][]>, GTArrUArr[],GBase[]>>(true)); Eval("Test112", UnboxUToT[][],GSubT[][]>, GTArrUArr[],GBase[]>>(true)); Eval("Test201", UnboxUToT>, GRefTRefU>(true)); Eval("Test202", UnboxUToT>, GRefTRefU>(true)); Eval("Test203", UnboxUToT,IPlusT>, GRefTRefU>(true)); Eval("Test204", UnboxUToT>, GRefTRefU>(true)); Eval("Test205", UnboxUToT>, GRefTRefU>(true)); Eval("Test206", UnboxUToT,IPlusT>, GRefTRefU>(true)); Eval("Test207", UnboxUToT>>, GRefTRefU,GBase>>(true)); Eval("Test208", UnboxUToT>>, GRefTRefU,GBase>>(true)); Eval("Test209", UnboxUToT>,IPlusT>>, GRefTRefU,GBase>>(true)); Eval("Test210", UnboxUToT[]>>, GRefTRefU[],GBase[]>>(true)); Eval("Test211", UnboxUToT[]>>, GRefTRefU[],GBase[]>>(true)); Eval("Test212", UnboxUToT[]>,IPlusT[]>>, GRefTRefU[],GBase[]>>(true)); Eval("Test301", UnboxUToT>, GRefTArrRefUArr>(true)); Eval("Test302", UnboxUToT>, GRefTArrRefUArr>(true)); Eval("Test303", UnboxUToT,IPlusT>, GRefTArrRefUArr>(true)); Eval("Test304", UnboxUToT>, GRefTArrRefUArr>(true)); Eval("Test305", UnboxUToT>, GRefTArrRefUArr>(true)); Eval("Test306", UnboxUToT,IPlusT>, GRefTArrRefUArr>(true)); Eval("Test307", UnboxUToT[]>>, GRefTArrRefUArr,GBase>>(true)); Eval("Test308", UnboxUToT[]>>, GRefTArrRefUArr,GBase>>(true)); Eval("Test309", UnboxUToT[]>,IPlusT[]>>, GRefTArrRefUArr,GBase>>(true)); Eval("Test310", UnboxUToT[][]>>, GRefTArrRefUArr[],GBase[]>>(true)); Eval("Test311", UnboxUToT[][]>>, GRefTArrRefUArr[],GBase[]>>(true)); Eval("Test312", UnboxUToT[][]>,IPlusT[][]>>, GRefTArrRefUArr[],GBase[]>>(true)); Eval("Test401", UnboxUToT[]>, GArrRefTArrRefU>(true)); Eval("Test402", UnboxUToT[]>, GArrRefTArrRefU>(true)); Eval("Test403", UnboxUToT[],IPlusT[]>, GArrRefTArrRefU>(true)); Eval("Test404", UnboxUToT[]>, GArrRefTArrRefU>(true)); Eval("Test405", UnboxUToT[]>, GArrRefTArrRefU>(true)); Eval("Test406", UnboxUToT[],IPlusT[]>, GArrRefTArrRefU>(true)); Eval("Test407", UnboxUToT>[]>, GArrRefTArrRefU,GBase>>(true)); Eval("Test408", UnboxUToT>[]>, GArrRefTArrRefU,GBase>>(true)); Eval("Test409", UnboxUToT>[],IPlusT>[]>, GArrRefTArrRefU,GBase>>(true)); Eval("Test410", UnboxUToT[]>[]>, GArrRefTArrRefU[],GBase[]>>(true)); Eval("Test411", UnboxUToT[]>[]>, GArrRefTArrRefU[],GBase[]>>(true)); Eval("Test412", UnboxUToT[]>[],IPlusT[]>[]>, GArrRefTArrRefU[],GBase[]>>(true)); if( iErrorCount > 0 ) { Console.WriteLine( "Total test cases: " + iTestCount + " Failed test cases: " + iErrorCount ); return false; } else { Console.WriteLine( "Total test cases: " + iTestCount ); return true; } } public static int Main(String [] args) { if( RunTests() ) { iExitCode = 100; Console.WriteLine( "All test cases passed" ); } else { iExitCode = 101; Console.WriteLine( "Test failed" ); } return iExitCode; } }