test: little-endian ELF field readers in testenv
The test/object observers parse assembler/linker artifacts; the readers reinterpret readfile's byte str and route through endian's canonical legetu* instead of re-deriving the bit math.
This commit is contained in:
@@ -6,6 +6,7 @@ package testenv;
|
|||||||
// test/package/package_test.ww idiom — not a framework: callers own
|
// test/package/package_test.ww idiom — not a framework: callers own
|
||||||
// discovery, assertions, and verdicts.
|
// discovery, assertions, and verdicts.
|
||||||
|
|
||||||
|
import endian;
|
||||||
import os;
|
import os;
|
||||||
import os.exec;
|
import os.exec;
|
||||||
import strings;
|
import strings;
|
||||||
@@ -153,6 +154,35 @@ export fn same(a: str, b: str) bool = {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The ELF observers under test/object read header fields straight out
|
||||||
|
// of readfile's byte-carrying str; these getters reinterpret it as
|
||||||
|
// bytes and route through endian's canonical little-endian readers
|
||||||
|
// instead of re-deriving the bit math. u64 uniformly so one call
|
||||||
|
// shape covers u16/u32/u64 fields; callers narrow for offset math.
|
||||||
|
export fn leu16(s: str, off: i32) u64 = {
|
||||||
|
let b: []u8;
|
||||||
|
b.ptr = &s.ptr[off];
|
||||||
|
b.len = 2;
|
||||||
|
b.cap = 2;
|
||||||
|
return endian.legetu16(b): u64;
|
||||||
|
};
|
||||||
|
|
||||||
|
export fn leu32(s: str, off: i32) u64 = {
|
||||||
|
let b: []u8;
|
||||||
|
b.ptr = &s.ptr[off];
|
||||||
|
b.len = 4;
|
||||||
|
b.cap = 4;
|
||||||
|
return endian.legetu32(b): u64;
|
||||||
|
};
|
||||||
|
|
||||||
|
export fn leu64(s: str, off: i32) u64 = {
|
||||||
|
let b: []u8;
|
||||||
|
b.ptr = &s.ptr[off];
|
||||||
|
b.len = 8;
|
||||||
|
b.cap = 8;
|
||||||
|
return endian.legetu64(b);
|
||||||
|
};
|
||||||
|
|
||||||
export fn occurrences(haystack: str, needle: str) i32 = {
|
export fn occurrences(haystack: str, needle: str) i32 = {
|
||||||
if (needle.len == 0 || haystack.len < needle.len) { return 0; };
|
if (needle.len == 0 || haystack.len < needle.len) { return 0; };
|
||||||
let count: i32 = 0;
|
let count: i32 = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user