Files
ww/test/lang/def_float_lit_test.ww
Hojun-Cho 74cc35d488 test: migrate Fam4 static-init/DATA-emit value tests to @test (#30)
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.
2026-06-25 01:32:32 +09:00

63 lines
1.7 KiB
Plaintext

// def_float_lit_test — module-level `def`/`let` f64/f32 literal (incl negation)
// emits DATA, read back from a fn. Migrated from test/wcc/917_def_float_lit_run.c
// (#129 Phase A.1). Pre-fix `def K: f64 = lit;` fell through emit_defs's int-only
// fold gate so no DATAW landed (link: `undefined reference to main.K`); emit_lets's
// float arm never peeled N_UN(MINUS/PLUS, N_FLOATLIT) so `let g: f64 = -1.5;`
// silently zero-emitted. Fix = shared emit_floatlit_data helper (negation via
// IEEE-754 sign-bit XOR). cstage build+run was T1; cs==ww .s byte-id rides T2
// (test-lang-byteid).
//
// drew: assert BIT-EXACT incl sign — the bits()-reinterpret reads the full IEEE
// pattern, so a sign-bit or mantissa drift fails (a truncating `: i32` read would
// alias 1.5 and 1.9). The negative rows pin the sign-XOR byte path.
package def_float_lit_test;
def KDPOS: f64 = 1.5;
def KDNEG: f64 = -1.5;
def KFPOS: f32 = 1.5f32;
def KFNEG: f32 = -1.5f32;
let GDNEG: f64 = -1.5;
let GDPOS: f64 = 1.5;
let GFPOS: f32 = 1.5f32;
fn bits64(v: f64) u64 = {
let x: f64 = v;
let p: *u64 = (&x): *u64;
return *p;
};
fn bits32(v: f32) u32 = {
let x: f32 = v;
let p: *u32 = (&x): *u32;
return *p;
};
@test fn def_f64_pos() void = {
assert(bits64(KDPOS) == 0x3FF8000000000000u64);
};
@test fn def_f64_neg() void = {
assert(bits64(KDNEG) == 0xBFF8000000000000u64);
};
@test fn def_f32_pos() void = {
assert(bits32(KFPOS) == 0x3FC00000u32);
};
@test fn def_f32_neg() void = {
assert(bits32(KFNEG) == 0xBFC00000u32);
};
@test fn let_f64_neg() void = {
assert(bits64(GDNEG) == 0xBFF8000000000000u64);
};
@test fn let_f64_pos() void = {
assert(bits64(GDPOS) == 0x3FF8000000000000u64);
};
@test fn let_f32_pos() void = {
assert(bits32(GFPOS) == 0x3FC00000u32);
};