-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathcomparison.ts
38 lines (37 loc) · 13.7 KB
/
comparison.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const bt = '00000000000000000000000000000001' as const;
const bf = '00000000000000000000000000000000' as const;
export type T = typeof t;
export const t = [
{ a: 0, b: 0, gt_s: 0, gt_u: 0, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 1, le_u: 1, eq: 1, ne: 0, eqz: 1, a_binary: "00000000000000000000000000000000", b_binary: "00000000000000000000000000000000", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bt, eq_binary: bt, ne_binary: bf, eqz_binary: bt, },
{ a: 1, b: 0, gt_s: 1, gt_u: 1, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 0, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000000000000000000001", b_binary: "00000000000000000000000000000000", gt_s_binary: bt, gt_u_binary: bt, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bf, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, },
{ a: 0, b: 1, gt_s: 0, gt_u: 0, ge_s: 0, ge_u: 0, lt_s: 1, lt_u: 1, le_s: 1, le_u: 1, eq: 0, ne: 1, eqz: 1, a_binary: "00000000000000000000000000000000", b_binary: "00000000000000000000000000000001", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bf, ge_u_binary: bf, lt_s_binary: bt, lt_u_binary: bt, le_s_binary: bt, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bt, },
{ a: 1, b: 1, gt_s: 0, gt_u: 0, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 1, le_u: 1, eq: 1, ne: 0, eqz: 0, a_binary: "00000000000000000000000000000001", b_binary: "00000000000000000000000000000001", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bt, eq_binary: bt, ne_binary: bf, eqz_binary: bf, },
{ a: -1, b: 0, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111111111111111111", b_binary: "00000000000000000000000000000000", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, },
{ a: 0, b: -1, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 1, a_binary: "00000000000000000000000000000000", b_binary: "11111111111111111111111111111111", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bt, },
{ a: -1, b: -1, gt_s: 0, gt_u: 0, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 1, le_u: 1, eq: 1, ne: 0, eqz: 0, a_binary: "11111111111111111111111111111111", b_binary: "11111111111111111111111111111111", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bt, eq_binary: bt, ne_binary: bf, eqz_binary: bf, },
{ a: -1, b: 1, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111111111111111111", b_binary: "00000000000000000000000000000001", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, },
{ a: 1, b: -1, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000000000000000000001", b_binary: "11111111111111111111111111111111", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, },
{ a: -1, b: -1, gt_s: 0, gt_u: 0, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 1, le_u: 1, eq: 1, ne: 0, eqz: 0, a_binary: "11111111111111111111111111111111", b_binary: "11111111111111111111111111111111", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bt, eq_binary: bt, ne_binary: bf, eqz_binary: bf, },
{ a: 2147483647, b: -2147483648, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "01111111111111111111111111111111", b_binary: "10000000000000000000000000000000", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Max int vs Min int (overflow/underflow case)
{ a: -2147483648, b: 2147483647, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "10000000000000000000000000000000", b_binary: "01111111111111111111111111111111", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Min int vs Max int
{ a: 2147483647, b: 2147483646, gt_s: 1, gt_u: 1, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 0, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "01111111111111111111111111111111", b_binary: "01111111111111111111111111111110", gt_s_binary: bt, gt_u_binary: bt, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bf, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Max int and just below max int
{ a: -2147483648, b: -2147483647, gt_s: 0, gt_u: 0, ge_s: 0, ge_u: 0, lt_s: 1, lt_u: 1, le_s: 1, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "10000000000000000000000000000000", b_binary: "10000000000000000000000000000001", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bf, ge_u_binary: bf, lt_s_binary: bt, lt_u_binary: bt, le_s_binary: bt, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Min int and just above min int
{ a: -2147483648, b: 0, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "10000000000000000000000000000000", b_binary: "00000000000000000000000000000000", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Min int vs 0
{ a: 2147483647, b: 0, gt_s: 1, gt_u: 1, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 0, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "01111111111111111111111111111111", b_binary: "00000000000000000000000000000000", gt_s_binary: bt, gt_u_binary: bt, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bf, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Max int vs 0
{ a: 0, b: 2147483647, gt_s: 0, gt_u: 0, ge_s: 0, ge_u: 0, lt_s: 1, lt_u: 1, le_s: 1, le_u: 1, eq: 0, ne: 1, eqz: 1, a_binary: "00000000000000000000000000000000", b_binary: "01111111111111111111111111111111", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bf, ge_u_binary: bf, lt_s_binary: bt, lt_u_binary: bt, le_s_binary: bt, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bt, }, // 0 vs Max int
{ a: 0, b: -2147483648, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 1, a_binary: "00000000000000000000000000000000", b_binary: "10000000000000000000000000000000", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bt, }, // 0 vs Min int
{ a: 32767, b: -32768, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000000111111111111111", b_binary: "11111111111111111000000000000000", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Max 16-bit signed int vs Min 16-bit signed int
{ a: -32768, b: 32767, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111000000000000000", b_binary: "00000000000000000111111111111111", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Min 16-bit signed int vs Max 16-bit signed int
{ a: 32767, b: 32766, gt_s: 1, gt_u: 1, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 0, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000000111111111111111", b_binary: "00000000000000000111111111111110", gt_s_binary: bt, gt_u_binary: bt, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bf, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Near max 16-bit signed int comparison
{ a: -32768, b: -32767, gt_s: 0, gt_u: 0, ge_s: 0, ge_u: 0, lt_s: 1, lt_u: 1, le_s: 1, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111000000000000000", b_binary: "11111111111111111000000000000001", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bf, ge_u_binary: bf, lt_s_binary: bt, lt_u_binary: bt, le_s_binary: bt, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Near min 16-bit signed int comparison
{ a: 65535, b: -1, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000001111111111111111", b_binary: "11111111111111111111111111111111", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Max unsigned 16-bit vs -1 (considering two's complement for 32-bit)
{ a: -1, b: 65535, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111111111111111111", b_binary: "00000000000000001111111111111111", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // -1 vs Max unsigned 16-bit (considering two's complement for 32-bit)
{ a: -2147483647, b: 2147483646, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "10000000000000000000000000000001", b_binary: "01111111111111111111111111111110", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Almost min int vs almost max int
{ a: 2147483646, b: -2147483647, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "01111111111111111111111111111110", b_binary: "10000000000000000000000000000001", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Almost max int vs almost min int
{ a: -100000, b: 100000, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111100111100101100000", b_binary: "00000000000000011000011010100000", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Negative vs positive larger range
{ a: 100000, b: -100000, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000011000011010100000", b_binary: "11111111111111100111100101100000", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Positive vs negative larger range
{ a: -2, b: 2, gt_s: 0, gt_u: 1, ge_s: 0, ge_u: 1, lt_s: 1, lt_u: 0, le_s: 1, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "11111111111111111111111111111110", b_binary: "00000000000000000000000000000010", gt_s_binary: bf, gt_u_binary: bt, ge_s_binary: bf, ge_u_binary: bt, lt_s_binary: bt, lt_u_binary: bf, le_s_binary: bt, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Symmetric negative vs positive
{ a: 2, b: -2, gt_s: 1, gt_u: 0, ge_s: 1, ge_u: 0, lt_s: 0, lt_u: 1, le_s: 0, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000000000000000000000000000010", b_binary: "11111111111111111111111111111110", gt_s_binary: bt, gt_u_binary: bf, ge_s_binary: bt, ge_u_binary: bf, lt_s_binary: bf, lt_u_binary: bt, le_s_binary: bf, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Symmetric positive vs negative
{ a: 123456789, b: 987654321, gt_s: 0, gt_u: 0, ge_s: 0, ge_u: 0, lt_s: 1, lt_u: 1, le_s: 1, le_u: 1, eq: 0, ne: 1, eqz: 0, a_binary: "00000111010110111100110100010101", b_binary: "00111010110111100110100010110001", gt_s_binary: bf, gt_u_binary: bf, ge_s_binary: bf, ge_u_binary: bf, lt_s_binary: bt, lt_u_binary: bt, le_s_binary: bt, le_u_binary: bt, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Random large numbers
{ a: 987654321, b: 123456789, gt_s: 1, gt_u: 1, ge_s: 1, ge_u: 1, lt_s: 0, lt_u: 0, le_s: 0, le_u: 0, eq: 0, ne: 1, eqz: 0, a_binary: "00111010110111100110100010110001", b_binary: "00000111010110111100110100010101", gt_s_binary: bt, gt_u_binary: bt, ge_s_binary: bt, ge_u_binary: bt, lt_s_binary: bf, lt_u_binary: bf, le_s_binary: bf, le_u_binary: bf, eq_binary: bf, ne_binary: bt, eqz_binary: bf, }, // Reverse of the above
] as const;