code wiki / (root) / nx_autofix_mut_iseven_cp.nx

nx_autofix_mut_iseven_cp.nx source

↩ module page · 45 lines · 1718 B

1// nx_autofix_mut_iseven_cp.nx -- MUTATION-GENERATED FOREIGN BUG (class: comparison-constant 2// perturbation, ==0 became ==1 -- parity inverted). Target: iseven. Sibling max2 stays green. 3import "nx_syscalls.nx" 4 5func cw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 6func cn(v: i64) -> i64 { 7 var m: i64 = v 8 if m < 0 { cw("-" as *u8); m = 0 - m } 9 let t: *u8 = sys_mmap(24) 10 var k: i64 = 0 11 if m == 0 { t[0] = 48 as u8; k = 1 } 12 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 13 let o: *u8 = sys_mmap(24) 14 var i: i64 = 0 15 while i < k { o[i] = t[k - 1 - i]; i = i + 1 } 16 sys_write(1, o, k) 17 return 0 18} 19func fncase1(fn: *u8, a: i64, want: i64, got: i64) -> i64 { 20 cw("FNCASE " as *u8); cw(fn); cw(" " as *u8); cn(a) 21 cw(" want " as *u8); cn(want); cw(" got " as *u8); cn(got); cw("\n" as *u8) 22 return 0 23} 24 25func max2(a: i64, b: i64) -> i64 { if a > b { return a } return b } 26func iseven(x: i64) -> i64 { if (x % 2) == 1 { return 1 } return 0 } 27 28func main() -> i64 { 29 var p: i64 = 0 30 var f1: i64 = 0 31 if max2(3, 5) == 5 { f1 = f1 + 1 } 32 if max2(7, 2) == 7 { f1 = f1 + 1 } 33 var f2: i64 = 0 34 let c1: i64 = iseven(4) 35 if c1 == 1 { f2 = f2 + 1 } else { fncase1("iseven" as *u8, 4, 1, c1) } 36 let c2: i64 = iseven(7) 37 if c2 == 0 { f2 = f2 + 1 } else { fncase1("iseven" as *u8, 7, 0, c2) } 38 let c3: i64 = iseven(0) 39 if c3 == 1 { f2 = f2 + 1 } else { fncase1("iseven" as *u8, 0, 1, c3) } 40 p = f1 + f2 41 cw("FNRES max2 " as *u8); cn(f1); cw(" 2\n" as *u8) 42 cw("FNRES iseven " as *u8); cn(f2); cw(" 3\n" as *u8) 43 cw("CGR=" as *u8); cn(p); cw("\n" as *u8) 44 return 0 45}