Exemplo n.º 1
0
        public void TestOverloadResolution()
        {
            OverloadTestExpressionOwner owner   = new OverloadTestExpressionOwner();
            ExpressionContext           context = new ExpressionContext(null, owner);

            // Test value types
            this.DoTestOverloadResolution("valuetype1(100)", context, 1);
            this.DoTestOverloadResolution("valuetype1(100.0f)", context, 2);
            this.DoTestOverloadResolution("valuetype1(100.0)", context, 3);
            this.DoTestOverloadResolution("valuetype2(100)", context, 1);

            // Test value type -> reference type
            this.DoTestOverloadResolution("Value_ReferenceType1(100)", context, 1);
            this.DoTestOverloadResolution("Value_ReferenceType2(100)", context, 1);
            //	with interfaces
            this.DoTestOverloadResolution("Value_ReferenceType3(100)", context, 1);

            // Test reference types
            this.DoTestOverloadResolution("ReferenceType1(\"abc\")", context, 2);
            this.DoTestOverloadResolution("ReferenceType1(b)", context, 1);
            this.DoTestOverloadResolution("ReferenceType2(a)", context, 2);
            //	with interfaces
            this.DoTestOverloadResolution("ReferenceType3(\"abc\")", context, 2);

            // Test nulls
            this.DoTestOverloadResolution("ReferenceType1(null)", context, 2);
            this.DoTestOverloadResolution("ReferenceType2(null)", context, 2);

            // Test ambiguous match
            this.DoTestOverloadResolution("valuetype3(100)", context, -1);
            this.DoTestOverloadResolution("Value_ReferenceType4(100)", context, -1);
            this.DoTestOverloadResolution("ReferenceType4(\"abc\")", context, -1);
            this.DoTestOverloadResolution("ReferenceType4(null)", context, -1);

            // Test access control
            this.DoTestOverloadResolution("Access1(\"abc\")", context, 1);
            this.DoTestOverloadResolution("Access2(\"abc\")", context, -1);
            this.DoTestOverloadResolution("Access2(null)", context, -1);

            // Test with multiple arguments
            this.DoTestOverloadResolution("Multiple1(1.0f, 2.0)", context, 1);
            this.DoTestOverloadResolution("Multiple1(100, 2.0)", context, 2);
            this.DoTestOverloadResolution("Multiple1(100, 2.0f)", context, 2);
        }
Exemplo n.º 2
0
        public void TestOverloadResolution()
        {
            OverloadTestExpressionOwner owner = new OverloadTestExpressionOwner();
            ExpressionContext context = new ExpressionContext(null, owner);

            // Test value types
            this.DoTestOverloadResolution("valuetype1(100)", context, 1);
            this.DoTestOverloadResolution("valuetype1(100.0f)", context, 2);
            this.DoTestOverloadResolution("valuetype1(100.0)", context, 3);
            this.DoTestOverloadResolution("valuetype2(100)", context, 1);

            // Test value type -> reference type
            this.DoTestOverloadResolution("Value_ReferenceType1(100)", context, 1);
            this.DoTestOverloadResolution("Value_ReferenceType2(100)", context, 1);
            //	with interfaces
            this.DoTestOverloadResolution("Value_ReferenceType3(100)", context, 1);

            // Test reference types
            this.DoTestOverloadResolution("ReferenceType1(\"abc\")", context, 2);
            this.DoTestOverloadResolution("ReferenceType1(b)", context, 1);
            this.DoTestOverloadResolution("ReferenceType2(a)", context, 2);
            //	with interfaces
            this.DoTestOverloadResolution("ReferenceType3(\"abc\")", context, 2);

            // Test nulls
            this.DoTestOverloadResolution("ReferenceType1(null)", context, 2);
            this.DoTestOverloadResolution("ReferenceType2(null)", context, 2);

            // Test ambiguous match
            this.DoTestOverloadResolution("valuetype3(100)", context, -1);
            this.DoTestOverloadResolution("Value_ReferenceType4(100)", context, -1);
            this.DoTestOverloadResolution("ReferenceType4(\"abc\")", context, -1);
            this.DoTestOverloadResolution("ReferenceType4(null)", context, -1);

            // Test access control
            this.DoTestOverloadResolution("Access1(\"abc\")", context, 1);
            this.DoTestOverloadResolution("Access2(\"abc\")", context, -1);
            this.DoTestOverloadResolution("Access2(null)", context, -1);

            // Test with multiple arguments
            this.DoTestOverloadResolution("Multiple1(1.0f, 2.0)", context, 1);
            this.DoTestOverloadResolution("Multiple1(100, 2.0)", context, 2);
            this.DoTestOverloadResolution("Multiple1(100, 2.0f)", context, 2);
        }