Esempio n. 1
0
void
st_methods_ptr(void)
{
  useclass(Counter);
  usegeneric((gincr)gincr_s,
             (gincrBy1)gincrBy1_s, (gincrBy2)gincrBy2_s, (gincrBy3)gincrBy3_s,
             (gincrBy4)gincrBy4_s, (gincrBy5)gincrBy5_s);

  OBJ cnt = gnew(Counter);
  OBJ ret;

  IMP1 gincr_p    = cos_method_lookup1((SEL)gincr_s   , cos_object_id(cnt));
  IMP1 gincrBy1_p = cos_method_lookup1((SEL)gincrBy1_s, cos_object_id(cnt));
  IMP1 gincrBy2_p = cos_method_lookup1((SEL)gincrBy2_s, cos_object_id(cnt));
  IMP1 gincrBy3_p = cos_method_lookup1((SEL)gincrBy3_s, cos_object_id(cnt));
  IMP1 gincrBy4_p = cos_method_lookup1((SEL)gincrBy4_s, cos_object_id(cnt));
  IMP1 gincrBy5_p = cos_method_lookup1((SEL)gincrBy5_s, cos_object_id(cnt));

  gincrBy1_arg_t arg1 = { 1 };
  gincrBy2_arg_t arg2 = { 1,1 };
  gincrBy3_arg_t arg3 = { 1,1,1 };
  gincrBy4_arg_t arg4 = { 1,1,1,1 };
  gincrBy5_arg_t arg5 = { 1,1,1,1,1 };

  STEST( "method pointer (0 argument )", N, gincr_p   ((SEL)gincr_s   ,cnt,0    ,&ret) );
  STEST( "method pointer (1 argument )", N, gincrBy1_p((SEL)gincrBy1_s,cnt,&arg1,&ret) );
  STEST( "method pointer (2 arguments)", N, gincrBy2_p((SEL)gincrBy2_s,cnt,&arg2,&ret) );
  STEST( "method pointer (3 arguments)", N, gincrBy3_p((SEL)gincrBy3_s,cnt,&arg3,&ret) );
  STEST( "method pointer (4 arguments)", N, gincrBy4_p((SEL)gincrBy4_s,cnt,&arg4,&ret) );
  STEST( "method pointer (5 arguments)", N, gincrBy5_p((SEL)gincrBy5_s,cnt,&arg5,&ret) );
  
  test_assert( gint(cnt) == N+N+2*N+3*N+4*N+5*N );

  grelease(cnt);
}
Esempio n. 2
0
void
st_multimethods_ptr(void)
{
  useclass(Counter);
  usegeneric((gaddTo1)gaddTo1_s, (gaddTo2)gaddTo2_s,
             (gaddTo3)gaddTo3_s, (gaddTo4)gaddTo4_s);

  OBJ cnt = gnew(Counter);
  OBJ one = gincr(gnew(Counter));
  OBJ ret;

  U32 cid = cos_object_id(cnt);
  U32 oid = cos_object_id(one);

  IMP2 gaddTo1_p = cos_method_lookup2((SEL)gaddTo1_s, cid, oid);
  IMP3 gaddTo2_p = cos_method_lookup3((SEL)gaddTo2_s, cid, oid, oid);
  IMP4 gaddTo3_p = cos_method_lookup4((SEL)gaddTo3_s, cid, oid, oid, oid);
  IMP5 gaddTo4_p = cos_method_lookup5((SEL)gaddTo4_s, cid, oid, oid, oid, oid);

  STEST( "multimethod pointer (rank 2)", N, gaddTo1_p((SEL)gaddTo1_s,cnt,one,0,&ret) );
  STEST( "multimethod pointer (rank 3)", N, gaddTo2_p((SEL)gaddTo2_s,cnt,one,one,0,&ret) );
  STEST( "multimethod pointer (rank 4)", N, gaddTo3_p((SEL)gaddTo3_s,cnt,one,one,one,0,&ret) );
  STEST( "multimethod pointer (rank 5)", N, gaddTo4_p((SEL)gaddTo4_s,cnt,one,one,one,one,0,&ret) );
  
  test_assert( gint(cnt) == N+2*N+3*N+4*N );

  grelease(cnt);
  grelease(one);
}
Esempio n. 3
0
void
ut_methods(void)
{
  useclass(Object, Class, MetaClass, PropMetaClass);

  usegeneric((gunderstandMessage1)gum1);
  usegeneric((ginstancesUnderstandMessage1)gium1);
  usegeneric(gclass , gclassName);
  usegeneric(gretain, grelease);
  usegeneric(galloc , gdealloc  );
  usegeneric(gisKindOf);

  UTEST_START("method invocation & knowledge")

    // Object
    UTEST(          gunderstandMessage1(Object, (SEL)gum1)       == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gum1)       == True  );

    UTEST(          gunderstandMessage1(Object, (SEL)gium1)      == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gium1)      == False );

    UTEST(          gunderstandMessage1(Object, (SEL)galloc)     == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)galloc)     == False );

    UTEST(          gunderstandMessage1(Object, (SEL)gdealloc)   == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gdealloc)   == True  );

    UTEST(          gunderstandMessage1(Object, (SEL)gclass)     == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gclass)     == True  );

    UTEST(          gunderstandMessage1(Object, (SEL)gclassName) == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gclassName) == True  );
    
    UTEST(          gunderstandMessage1(Object, (SEL)gretain)    == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)gretain)    == True  );

    UTEST(          gunderstandMessage1(Object, (SEL)grelease)   == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)grelease)   == True  );

    UTEST(          gunderstandMessage1(Object, (SEL)grelease)    == True  );
    UTEST( ginstancesUnderstandMessage1(Object, (SEL)grelease)    == True  );

    UTEST(          gunderstandMessage2(Object, Object, (SEL)gisKindOf) == True  );
    UTEST( ginstancesUnderstandMessage2(Object, Object, (SEL)gisKindOf) == False );

    UTEST(          gunderstandMessage2(Object, Class, (SEL)gisKindOf)  == True  );
    UTEST( ginstancesUnderstandMessage2(Object, Class, (SEL)gisKindOf)  == True  );

    // Class
    UTEST(          gunderstandMessage1(Class, (SEL)galloc)     == True );
    UTEST( ginstancesUnderstandMessage1(Class, (SEL)gdealloc)   == True );

    UTEST(          gunderstandMessage1(Class, (SEL)gclass)     == True );
    UTEST( ginstancesUnderstandMessage1(Class, (SEL)gclassName) == True );
    
    UTEST(          gunderstandMessage1(Class, (SEL)gretain)    == True );
    UTEST( ginstancesUnderstandMessage1(Class, (SEL)grelease)   == True );
    UTEST( ginstancesUnderstandMessage1(Class, (SEL)grelease)    == True );

    // MetaClass
    UTEST(          gunderstandMessage1(MetaClass, (SEL)galloc)     == True );
    UTEST( ginstancesUnderstandMessage1(MetaClass, (SEL)gdealloc)   == True );

    UTEST(          gunderstandMessage1(MetaClass, (SEL)gclass)     == True );
    UTEST( ginstancesUnderstandMessage1(MetaClass, (SEL)gclassName) == True );
    
    UTEST(          gunderstandMessage1(MetaClass, (SEL)gretain)    == True );
    UTEST( ginstancesUnderstandMessage1(MetaClass, (SEL)grelease)   == True );
    UTEST( ginstancesUnderstandMessage1(MetaClass, (SEL)grelease)    == True );

    // PropMetaClass
    UTEST(          gunderstandMessage1(PropMetaClass, (SEL)galloc)     == True );
    UTEST( ginstancesUnderstandMessage1(PropMetaClass, (SEL)gdealloc)   == True );

    UTEST(          gunderstandMessage1(PropMetaClass, (SEL)gclass)     == True );
    UTEST( ginstancesUnderstandMessage1(PropMetaClass, (SEL)gclassName) == True );
    
    UTEST(          gunderstandMessage1(PropMetaClass, (SEL)gretain)    == True );
    UTEST( ginstancesUnderstandMessage1(PropMetaClass, (SEL)grelease)   == True );
    UTEST( ginstancesUnderstandMessage1(PropMetaClass, (SEL)grelease)    == True );
    
  UTEST_END
}