// 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 struct GTU : IPlusT, IMinusT, IMinusTPlusU {} public struct GTArrUArr : IMinusT, IPlusT, IMinusTPlusU {} public struct GRefTRefU : IMinusT>, IMinusT>, IMinusTPlusU, IPlusT> {} public struct GRefTArrRefUArr : IMinusT>, IMinusT>, IMinusTPlusU,IPlusT> {} public struct GArrRefTArrRefU : IMinusT[]>, IMinusT[]>, IMinusTPlusU[],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); } } public static bool UIsInstT(bool expected) { try { return (expected == (Activator.CreateInstance(typeof(U)) is T)); } catch(Exception E) { Console.WriteLine("Unexpected Exception {0}, with T = {1} and U = {2}", E, typeof(T).Name, typeof(U).Name); return false; } } private static bool RunTests() { Eval("Test001", UIsInstT>, GTU,Base>>(false)); Eval("Test002", UIsInstT>, GTU>>(false)); Eval("Test003", UIsInstT, GTU>(false)); Eval("Test004", UIsInstT>, GTU,Base>>(false)); Eval("Test005", UIsInstT>, GTU>>(false)); Eval("Test006", UIsInstT, GTU>(false)); Eval("Test007", UIsInstT>>, GTU>,GBase>>(false)); Eval("Test008", UIsInstT>>, GTU,IMinusT>>>(false)); Eval("Test009", UIsInstT,GSubT>, GTU,GBase>>(false)); Eval("Test010", UIsInstT[]>>, GTU[]>,GBase[]>>(false)); Eval("Test011", UIsInstT[]>>, GTU[],IMinusT[]>>>(false)); Eval("Test012", UIsInstT[],GSubT[]>, GTU[],GBase[]>>(false)); Eval("Test101", UIsInstT[]>, GTArrUArr,Base>>(false)); Eval("Test102", UIsInstT[]>, GTArrUArr>>(false)); Eval("Test103", UIsInstT, GTArrUArr>(false)); Eval("Test104", UIsInstT[]>, GTArrUArr,Base>>(false)); Eval("Test105", UIsInstT[]>, GTArrUArr>>(false)); Eval("Test106", UIsInstT, GTArrUArr>(false)); Eval("Test107", UIsInstT>[]>, GTArrUArr>,GBase>>(false)); Eval("Test108", UIsInstT[]>>, GTArrUArr,IMinusT>>>(false)); Eval("Test109", UIsInstT,GSubT>, GTArrUArr,GBase>>(false)); Eval("Test110", UIsInstT[]>>[], GTArrUArr[]>,GBase[]>>(false)); Eval("Test111", UIsInstT[]>[]>, GTArrUArr[],IMinusT[]>>>(false)); Eval("Test112", UIsInstT[][],GSubT[][]>, GTArrUArr[],GBase[]>>(false)); Eval("Test201", UIsInstT>, GRefTRefU>(false)); Eval("Test202", UIsInstT>, GRefTRefU>(false)); Eval("Test203", UIsInstT,IPlusT>, GRefTRefU>(false)); Eval("Test204", UIsInstT>, GRefTRefU>(false)); Eval("Test205", UIsInstT>, GRefTRefU>(false)); Eval("Test206", UIsInstT,IPlusT>, GRefTRefU>(false)); Eval("Test207", UIsInstT>>, GRefTRefU,GBase>>(false)); Eval("Test208", UIsInstT>>, GRefTRefU,GBase>>(false)); Eval("Test209", UIsInstT>,IPlusT>>, GRefTRefU,GBase>>(false)); Eval("Test210", UIsInstT[]>>, GRefTRefU[],GBase[]>>(false)); Eval("Test211", UIsInstT[]>>, GRefTRefU[],GBase[]>>(false)); Eval("Test212", UIsInstT[]>,IPlusT[]>>, GRefTRefU[],GBase[]>>(false)); Eval("Test301", UIsInstT>, GRefTArrRefUArr>(false)); Eval("Test302", UIsInstT>, GRefTArrRefUArr>(false)); Eval("Test303", UIsInstT,IPlusT>, GRefTArrRefUArr>(false)); Eval("Test304", UIsInstT>, GRefTArrRefUArr>(false)); Eval("Test305", UIsInstT>, GRefTArrRefUArr>(false)); Eval("Test306", UIsInstT,IPlusT>, GRefTArrRefUArr>(false)); Eval("Test307", UIsInstT[]>>, GRefTArrRefUArr,GBase>>(false)); Eval("Test308", UIsInstT[]>>, GRefTArrRefUArr,GBase>>(false)); Eval("Test309", UIsInstT[]>,IPlusT[]>>, GRefTArrRefUArr,GBase>>(false)); Eval("Test310", UIsInstT[][]>>, GRefTArrRefUArr[],GBase[]>>(false)); Eval("Test311", UIsInstT[][]>>, GRefTArrRefUArr[],GBase[]>>(false)); Eval("Test312", UIsInstT[][]>,IPlusT[][]>>, GRefTArrRefUArr[],GBase[]>>(false)); Eval("Test401", UIsInstT[]>, GArrRefTArrRefU>(false)); Eval("Test402", UIsInstT[]>, GArrRefTArrRefU>(false)); Eval("Test403", UIsInstT[],IPlusT[]>, GArrRefTArrRefU>(false)); Eval("Test404", UIsInstT[]>, GArrRefTArrRefU>(false)); Eval("Test405", UIsInstT[]>, GArrRefTArrRefU>(false)); Eval("Test406", UIsInstT[],IPlusT[]>, GArrRefTArrRefU>(false)); Eval("Test407", UIsInstT>[]>, GArrRefTArrRefU,GBase>>(false)); Eval("Test408", UIsInstT>[]>, GArrRefTArrRefU,GBase>>(false)); Eval("Test409", UIsInstT>[],IPlusT>[]>, GArrRefTArrRefU,GBase>>(false)); Eval("Test410", UIsInstT[]>[]>, GArrRefTArrRefU[],GBase[]>>(false)); Eval("Test411", UIsInstT[]>[]>, GArrRefTArrRefU[],GBase[]>>(false)); Eval("Test412", UIsInstT[]>[],IPlusT[]>[]>, GArrRefTArrRefU[],GBase[]>>(false)); 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; } }