    @Test
    public void testRecursiveSubtype() {

        ObjectType o1 = new ObjectType();
        o1.setProperty("f", o1);
        ObjectType o2 = new ObjectType();
        o2.setProperty("f", o2);
        Assert.assertTrue(Types.isSubtype(o1, o2));

        FunctionType f1 = new FunctionType(oneElementArrayList(null), oneElementArrayList("1"), new VoidType());
        f1.setParamType(f1, 0);
        FunctionType f2 = new FunctionType(oneElementArrayList(null), oneElementArrayList("1"), new VoidType());
        f2.setParamType(f2, 0);
        Assert.assertTrue(Types.isSubtype(f1, f2));
    }