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}