Loading...
import Foundation

// sizeof(struct stat) == 144

#define DEFINE_TMO_SWIFT_TEST_CLASS(block, id1, id2) \
    class TestClass##id1##id2 { \
        let a: Int = 0; \
        let b: Int = 0; \
        let c: Int = 0; \
        let d: stat = stat(); \
        let e: stat = stat(); \
        let f: stat = stat(); \
        init() { \
            \
        } \
    };

#define TMO_SWIFT_TEST_CLASS_L1(action, block, id1) \
    action(block, id1, 0) \
    action(block, id1, 1) \
    action(block, id1, 2) \
    action(block, id1, 3) \
    action(block, id1, 4) \
    action(block, id1, 5) \
    action(block, id1, 6) \
    action(block, id1, 7) \
    action(block, id1, 8) \
    action(block, id1, 9)

#define TMO_SWIFT_TEST_CLASS_L2(action, block) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 0) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 1) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 2) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 3) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 4) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 5) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 6) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 7) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 8) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 9) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 10) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 11) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 12) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 13) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 14) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 15) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 16) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 17) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 18) \
    TMO_SWIFT_TEST_CLASS_L1(action, block, 19)

#define FOREACH_SWIFT_TMO_TEST_CLASS(action, block) \
    TMO_SWIFT_TEST_CLASS_L2(action, block)

FOREACH_SWIFT_TMO_TEST_CLASS(DEFINE_TMO_SWIFT_TEST_CLASS, "")

#define INVOKE_FOR_SWIFT_TMO_TEST_CLASS(block, id1, id2) \
    block(TestClass##id1##id2)

@_cdecl("test_swift_bucketing")
func test_swift_bucketing() {
    var objs: [AnyObject] = []

#define append_tmo_test_class(type) objs.append(type());
    FOREACH_SWIFT_TMO_TEST_CLASS(INVOKE_FOR_SWIFT_TMO_TEST_CLASS,
        append_tmo_test_class)

    validate_obj_array(objs)
}