How we shall test it.

§1.

void Unit::test_compatibility(OUTPUT_STREAM) {
    Unit::test_one(OUT, I"for all");
    Unit::test_one(OUT, I"all");
    Unit::test_one(OUT, I"not for all");
    Unit::test_one(OUT, I"not all");
    Unit::test_one(OUT, I"for none");
    Unit::test_one(OUT, I"none");
    Unit::test_one(OUT, I"not for none");
    Unit::test_one(OUT, I"not none");
    Unit::test_one(OUT, I"for 16-bit with debugging");
    Unit::test_one(OUT, I"not for 32-bit");
    Unit::test_one(OUT, I"for 16-bit with debugging or 32-bit with debugging");
    Unit::test_one(OUT, I"not for 32-bit or 16-bit");
    Unit::test_one(OUT, I"for 16-bit with debugging, 32-bit with debugging or 32-bit");
    Unit::test_one(OUT, I"not for 16-bit with debugging, 32-bit with debugging or 32-bit");
    Unit::test_one(OUT, I"for glulx");
    Unit::test_one(OUT, I"for glulx or z-machine version 8");
    Unit::test_one(OUT, I"for glulx without debugging");
    Unit::test_one(OUT, I"for z-machine version 8");
    Unit::test_one(OUT, I"for z-machine version 5 with debugging");
    Unit::test_one(OUT, I"for z-machine version 8, or Glulx without debugging");
    Unit::test_one(OUT, I"for z-machine version 5 or 8");
    Unit::test_one(OUT, I"for C");
    Unit::test_one(OUT, I"for Inform6 version 8");
}

void Unit::test_one(OUTPUT_STREAM, text_stream *test) {
    WRITE("'%S': ", test);
    compatibility_specification *C = Compatibility::from_text(test);
    if (C == NULL) { WRITE("not a valid compatibility specification\n\n"); return; }
    Compatibility::write(OUT, C);
    WRITE(":\n"); INDENT;
    target_vm *VM;
    LOOP_OVER(VM, target_vm) {
        if (Compatibility::test(C, VM)) {
            TargetVMs::write(OUT, VM);
            WRITE("\n");
        }
    }
    OUTDENT; WRITE("\n");
}