code wiki / (root) / nx_card_rewards_gate.nx

nx_card_rewards_gate.nx source

↩ module page · 90 lines · 5065 B

1// nx_card_rewards_gate.nx -- proves the rewards-vs-interest engine on REAL, hand-computed scenarios. 2// The headline it verifies: the SAME $480/yr cashback card ($95 fee) EARNS a payer $385 but COSTS a 3// $3,000 revolver $364.70 -- because 24.99% interest on the carried balance dwarfs the rewards. Every 4// number is integer-exact and hand-checked; a negative-control liar-kill proves the engine cannot fake value. 5// license_tier: ORIGINAL expect_exit: 0 6import "nx_card_rewards.nx" 7 8func g_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 9func g_n(v: i64) -> i64 { 10 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 11 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 12 let d: *u8 = sys_mmap(24); var k: i64 = 0 13 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 14 var i: i64 = k - 1; while i >= 0 { let o: *u8 = sys_mmap(1); o[0] = d[i]; sys_write(1, o, 1); i = i - 1 } 15 return 0 16} 17// st = [pass, fail] 18func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 { 19 if got == want { st[0] = st[0] + 1; g_puts(" PASS " as *u8) } 20 else { st[1] = st[1] + 1; g_puts(" FAIL " as *u8) } 21 g_puts(name); g_puts(" got=" as *u8); g_n(got); g_puts(" want=" as *u8); g_n(want); g_puts("\n" as *u8) 22 return 0 23} 24 25func main() -> i64 { 26 let st: *i64 = sys_mmap(32) as *i64 27 st[0] = 0; st[1] = 0 28 g_puts("=== nx_card_rewards_gate: is the interest eating the rewards? (integer-exact, hand-verified) ===\n\n" as *u8) 29 30 // A 3%-on-categories, 1%-base, $95-fee cashback card, on a real annual spend profile. 31 // sp[i*2] = [annual_cents, category] cat: 1=grocery 2=gas 3=dining 0=other 32 let sp: *i64 = sys_mmap(8 * 8) as *i64 33 sp[0] = 600000; sp[1] = 1 34 sp[2] = 240000; sp[3] = 2 35 sp[4] = 360000; sp[5] = 3 36 sp[6] = 1200000; sp[7] = 0 37 let rates: *i64 = sys_mmap(8 * 6) as *i64 38 rates[0] = 100 // other / base = 1% 39 rates[1] = 300 // grocery = 3% 40 rates[2] = 300 // gas = 3% 41 rates[3] = 300 // dining = 3% 42 let rewards: i64 = cr_rewards_annual(sp, 4, rates, 4, 100) 43 chk("rewards on the spend profile ($480.00)" as *u8, rewards, 48000, st) 44 45 let fee: i64 = 9500 // $95 annual fee 46 47 // 1) THE PAYER -- pays in full, 0 interest -> REWARDS WIN 48 let int_payer: i64 = cr_interest_annual(0, 2499, 100) 49 chk("payer interest (pays in full)" as *u8, int_payer, 0, st) 50 let net_payer: i64 = cr_net_annual(rewards, 0, fee, int_payer) 51 chk("payer NET (rewards - fee = $385.00)" as *u8, net_payer, 38500, st) 52 chk("payer verdict = REWARDS WIN (2)" as *u8, cr_verdict(net_payer, 5000), 2, st) 53 54 // 2) THE REVOLVER -- carries $3,000 average at 24.99% APR -> INTEREST EATS THE REWARDS 55 let int_rev: i64 = cr_interest_annual(300000, 2499, 100) 56 chk("revolver interest on $3000 @ 24.99pct ($749.70)" as *u8, int_rev, 74970, st) 57 let net_rev: i64 = cr_net_annual(rewards, 0, fee, int_rev) 58 chk("revolver NET is NEGATIVE (-$364.70)" as *u8, net_rev, 0 - 36470, st) 59 chk("revolver verdict = INTEREST EATS REWARDS (0)" as *u8, cr_verdict(net_rev, 5000), 0, st) 60 61 // 3) BREAK-EVEN carried balance -- interest exactly cancels the net reward (the trap line) 62 let be: i64 = cr_breakeven_balance(rewards, fee, 2499, 100) 63 chk("break-even interest == net reward ($385.00)" as *u8, cr_interest_annual(be, 2499, 100), 38500, st) 64 65 // 4) SIGN-UP bonus reachability (no overspending to chase it) 66 chk("signup: spend meets the min -> $200 bonus" as *u8, cr_signup_value(400000, 400000, 20000), 20000, st) 67 chk("signup: spend falls short -> no bonus" as *u8, cr_signup_value(399900, 400000, 20000), 0, st) 68 69 // 5) POINTS valuation -> cash-equivalent bps (1.5x points at 1.25 cpp = 1.875% = 188 bps half-up) 70 chk("points 1.5x @ 1.25cpp -> 188 bps" as *u8, cr_point_bps(150, 125), 188, st) 71 72 // 6) MARGINAL -- a small positive net is honestly flagged, not oversold 73 chk("marginal net ($5) -> MARGINAL (1)" as *u8, cr_verdict(500, 5000), 1, st) 74 75 // 7) UN-PUSHY PICK -- rank purely by net-to-the-user (no-fee card beats the fee card for this revolver) 76 chk("pick: no-fee card wins for the revolver" as *u8, cr_pick(0 - 27000, net_rev), 0, st) 77 78 // 8) LIAR-KILL negative control -- a no-rewards, $95-fee card must net negative even for a payer 79 chk("neg control: no-reward fee card nets negative" as *u8, cr_net_annual(0, 0, fee, 0), 0 - 9500, st) 80 81 g_puts("\n--- GATE ---\n PASS=" as *u8); g_n(st[0]); g_puts(" FAIL=" as *u8); g_n(st[1]); g_puts("\n" as *u8) 82 if st[1] == 0 { 83 g_puts("VERDICT GREEN -- the rewards-vs-interest engine is integer-exact and the headline holds:\n" as *u8) 84 g_puts(" a $480/yr rewards card ($95 fee) EARNS a payer $385, but COSTS a $3,000 revolver $364.70.\n" as *u8) 85 g_puts(" Above a ~$1,540 carried balance the interest cancels the entire year of rewards.\n" as *u8) 86 sys_exit(0); return 0 87 } 88 g_puts("VERDICT RED -- fix before ship.\n" as *u8) 89 sys_exit(1); return 0 90}