/*
* Copyright 2015 S. Webber
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.oakgp.function;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.oakgp.TestUtils.assertUnmodifiable;
import static org.oakgp.Type.booleanType;
import static org.oakgp.Type.integerType;
import static org.oakgp.function.Signature.createSignature;
import java.util.List;
import org.junit.Test;
import org.oakgp.Type;
public class SignatureTest {
@Test
public void testGetArgumentType() {
Signature signature = createSignature(integerType(), booleanType(), integerType(), booleanType());
assertEquals(3, signature.getArgumentTypesLength());
assertSame(integerType(), signature.getReturnType());
assertSame(booleanType(), signature.getArgumentType(0));
assertSame(integerType(), signature.getArgumentType(1));
assertSame(booleanType(), signature.getArgumentType(2));
assertArrayIndexOutOfBoundsException(signature, -1);
assertArrayIndexOutOfBoundsException(signature, 3);
}
private void assertArrayIndexOutOfBoundsException(Signature signature, int index) {
try {
signature.getArgumentType(index);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
// expected
}
}
@Test
public void testGetArgumemntTypes() {
Signature signature = createSignature(integerType(), booleanType(), integerType(), booleanType());
List<Type> types = signature.getArgumentTypes();
assertEquals(3, types.size());
assertSame(booleanType(), types.get(0));
assertSame(integerType(), types.get(1));
assertSame(booleanType(), types.get(2));
assertUnmodifiable(types);
}
@Test
public void testToString() {
Signature signature = createSignature(integerType(), booleanType(), integerType(), booleanType());
assertEquals("integer [boolean, integer, boolean]", signature.toString());
}
@Test
public void testEquals() {
Signature s1 = createSignature(integerType(), booleanType(), integerType(), booleanType());
Signature s2 = createSignature(integerType(), booleanType(), integerType(), booleanType());
assertEquals(s1.hashCode(), s2.hashCode());
assertTrue(s1.equals(s1));
assertTrue(s1.equals(s2));
assertTrue(s2.equals(s1));
}
@Test
public void testNotEquals() {
Signature s1 = createSignature(integerType(), booleanType(), integerType(), booleanType());
Signature s2 = createSignature(integerType(), integerType(), booleanType(), booleanType());
Signature s3 = createSignature(booleanType(), booleanType(), integerType(), booleanType());
Signature s4 = createSignature(integerType(), booleanType(), integerType(), booleanType(), integerType());
Signature s5 = createSignature(integerType(), booleanType(), integerType(), booleanType(), booleanType());
assertTrue(s1.equals(s1));
assertFalse(s1.equals(s2));
assertFalse(s1.equals(s3));
assertFalse(s1.equals(s4));
assertFalse(s1.equals(s5));
assertTrue(s2.equals(s2));
assertFalse(s2.equals(s1));
assertFalse(s2.equals(s3));
assertFalse(s2.equals(s4));
assertFalse(s2.equals(s5));
assertTrue(s3.equals(s3));
assertFalse(s3.equals(s1));
assertFalse(s3.equals(s2));
assertFalse(s3.equals(s4));
assertFalse(s3.equals(s5));
assertTrue(s4.equals(s4));
assertFalse(s4.equals(s1));
assertFalse(s4.equals(s2));
assertFalse(s4.equals(s3));
assertFalse(s4.equals(s5));
assertTrue(s5.equals(s5));
assertFalse(s5.equals(s1));
assertFalse(s5.equals(s2));
assertFalse(s5.equals(s3));
assertFalse(s5.equals(s4));
assertFalse(s1.equals("string"));
}
}