inherit "/a"; inherit "/b"; #include "/inc/msg.inc" string sub() { return "c"; } int check_closure(string file, string name, closure cl) { int errors; msg("Checking: get_type_info(%s, 3) == \"/%s\":\t\t\t", name, file); if(get_type_info(cl, 3) == "/"+file) msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: funcall(%s) == \"%s\":\t\t\t\t", name, file); if(funcall(cl) == file) msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: funcall(lambda(0, ({%s}))) == \"%s\": \t\t", name, file); if(funcall(lambda(0, ({cl}))) == file) msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: restore_value(save_value(%s)) == %s: \t", name, name); if(restore_value(save_value(cl)) == cl) msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: funcall(restore_value(save_value(%s))) == \"%s\":\t", name, file); if(funcall(restore_value(save_value(cl))) == file) msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } return errors; } int run_test() { int errors; errors += check_closure("a", "#'a::sub", #'a::sub); errors += check_closure("b", "#'b::sub", #'b::sub); errors += check_closure("a", "#'::sub", #'::sub); errors += check_closure("c", "#'sub", #'sub); msg("Checking: a::sub() == \"a\":\t\t\t\t\t"); if(a::sub() == "a") msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: b::sub() == \"b\":\t\t\t\t\t"); if(b::sub() == "b") msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } msg("Checking: sub() == \"c\":\t\t\t\t\t\t"); if(sub() == "c") msg("Success.\n"); else { errors++; msg("FAILURE.\n"); } return errors; }