Continues the test-arch tower past Fam8-13. 11 module-level static-init / DATA-emit value drivers move from test/wcc/*_run.c into @test row- tables under test/lang/; every classification empirically re-probed at HEAD (refuting two stale worklist tags). - value rows -> test/lang/*_test.ww (11 files) - reject rows -> runww //ww:error carriers (3, dual-stage non-vacuous; 947 const-divzero confirmed a both-stage compile-reject, not run-exit) - 840_zeroinit, 944_array_zeroinit, 989_arrlit_tail_zero kept as byte-id .c pins (zero-over-dirtied-frame / DATAW-length is byte-id-blind to a runtime @test; #263), mutation-gated - repoint two stale comment refs to deleted test names (719, 989_structlocal_frame) Migrated static-init @test ride the cs==ww T2 byte-id gate, preserving DATA-emit byte-id. 2D global-struct array-field read (#137/#150) confirmed cs==ww + correct at HEAD. Coverage parity verified row-by-row; two-round reviewed. Floor ratchet follows.
67 lines
2.2 KiB
Plaintext
67 lines
2.2 KiB
Plaintext
// signed_data_emit_test — module-level signed i8..i64 scalar + 1D-array DATA
|
|
// emit, self-asserting the sign survives exactly. Migrated from
|
|
// test/wcc/923_signed_data_emit_run.c. Pre-fix wwstage silently zeroed negative
|
|
// array entries; cstage emitted nothing (link failed). cstage build+run was T1;
|
|
// cs==ww .s byte-id rides T2 (test-lang-byteid).
|
|
//
|
|
// drew: assert SIGN survives exactly — every row compares against the signed
|
|
// typed literal, so a sign-extension or zero-fill drift fails. i64_tilde pins
|
|
// the N_UN(TK_TILDE) fold (~0u64 == -1i64). The arrays mirror the utf8 DFA shape.
|
|
|
|
package signed_data_emit_test;
|
|
|
|
let X_I8N: i8 = -1i8;
|
|
let X_I8P: i8 = 42i8;
|
|
let X_I16N: i16 = -2i16;
|
|
let X_I16P: i16 = 1000i16;
|
|
let X_I32N: i32 = -100i32;
|
|
let X_I32P: i32 = 100000i32;
|
|
let X_I64N: i64 = -1000i64;
|
|
let X_I64P: i64 = 1000000i64;
|
|
let X_TILDE: i64 = (~0u64): i64;
|
|
|
|
let DFA: [8]i8 = [0i8, -1i8, 1i8, 2i8, 0i8, 0i8, -1i8, -1i8];
|
|
let A16: [4]i16 = [1i16, -2i16, 3i16, -4i16];
|
|
let A32: [4]i32 = [10i32, -20i32, 30i32, -40i32];
|
|
let A64: [4]i64 = [100i64, -200i64, 300i64, -400i64];
|
|
|
|
@test fn i8_neg_scalar() void = { assert(X_I8N == -1i8); };
|
|
@test fn i8_pos_scalar() void = { assert(X_I8P == 42i8); };
|
|
@test fn i16_neg_scalar() void = { assert(X_I16N == -2i16); };
|
|
@test fn i16_pos_scalar() void = { assert(X_I16P == 1000i16); };
|
|
@test fn i32_neg_scalar() void = { assert(X_I32N == -100i32); };
|
|
@test fn i32_pos_scalar() void = { assert(X_I32P == 100000i32); };
|
|
@test fn i64_neg_scalar() void = { assert(X_I64N == -1000i64); };
|
|
@test fn i64_pos_scalar() void = { assert(X_I64P == 1000000i64); };
|
|
@test fn i64_tilde_scalar() void = { assert(X_TILDE == -1i64); };
|
|
|
|
@test fn i8_arr_dfa() void = {
|
|
assert(DFA[0] == 0i8);
|
|
assert(DFA[1] == -1i8);
|
|
assert(DFA[2] == 1i8);
|
|
assert(DFA[3] == 2i8);
|
|
assert(DFA[6] == -1i8);
|
|
assert(DFA[7] == -1i8);
|
|
};
|
|
|
|
@test fn i16_arr_mixed() void = {
|
|
assert(A16[0] == 1i16);
|
|
assert(A16[1] == -2i16);
|
|
assert(A16[2] == 3i16);
|
|
assert(A16[3] == -4i16);
|
|
};
|
|
|
|
@test fn i32_arr_mixed() void = {
|
|
assert(A32[0] == 10i32);
|
|
assert(A32[1] == -20i32);
|
|
assert(A32[2] == 30i32);
|
|
assert(A32[3] == -40i32);
|
|
};
|
|
|
|
@test fn i64_arr_mixed() void = {
|
|
assert(A64[0] == 100i64);
|
|
assert(A64[1] == -200i64);
|
|
assert(A64[2] == 300i64);
|
|
assert(A64[3] == -400i64);
|
|
};
|