code wiki / _hdl_build / _pe_f64tan_test.nx
_pe_f64tan_test.nx source
↩ module page · 24 lines · 1109 B
1// AUTHORED BY THE NISHI BUILDER (pattern: MATH_KERNEL TAN test) -- invariant KATs.
2import "_pe_f64tan.nx"
3import "nx_syscalls.nx"
4func main() -> i64 {
5 var bad: i64 = 0
6 if nx_f64_tan(0) != 0 { bad = bad + 1 }
7 if nx_f64_tan(1 << 63) != (1 << 63) { bad = bad + 1 }
8 if nx_f64_tan(0x7FF8000000000000) != 0x7FF8000000000000 { bad = bad + 1 }
9 if nx_f64_tan(0x7FF0000000000000) != 0x7FF8000000000000 { bad = bad + 1 }
10 if nx_f64_tan(0x4140000000000000) != 0x7FF8000000000000 { bad = bad + 1 }
11 let pv: i64 = nx_f64_tan(0x3FE0000000000000)
12 if nx_f64_tan(0xBFE0000000000000) != (pv | (1 << 63)) { bad = bad + 1 }
13 let below: i64 = nx_f64_tan(0x3FF921FB54442D18)
14 let above: i64 = nx_f64_tan(0x3FF921FB54442D19)
15 if ((below >> 63) & 1) != 0 { bad = bad + 1 }
16 if ((above >> 63) & 1) != 1 { bad = bad + 1 }
17 if ((below >> 52) & 0x7FF) < 1073 { bad = bad + 1 }
18 let nl: *u8 = sys_mmap(4)
19 nl[0] = 10
20 if bad == 0 { sys_write(1, "TAN-TEST GREEN" as *u8, 14) } else { sys_write(1, "TAN-TEST RED" as *u8, 12) }
21 sys_write(1, nl, 1)
22 sys_exit(bad)
23 return bad
24}