/**
 * to prove GROOVY-467 is no longer an issue    
 * 
 * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
 * @version $Revision$
 */

import groovy.DummyMethods

class AmbiguousInvocationTest extends GroovyTestCase { 
    property dummy
    
    void setUp() {
    	dummy = new DummyMethods()
    }
    
    void testAmbiguousInvocationWithFloats() {
   	assert "float args" == dummy.foo("bar",1.0f,2.0f)
   	assert "float args" == dummy.foo("bar",(float)1,(float)2)
   	assert "float args" == dummy.foo("bar",(Float)1,(Float)2)
    }
    void testAmbiguousInvocationWithInts() {
   	assert "int args" == dummy.foo("bar",1,2)
   	assert "int args" == dummy.foo("bar",(int)1,(int)2)
   	assert "int args" == dummy.foo("bar",(Integer)1,(Integer)2)
    }
} 