|
1 | 1 | # Test boundary conditions for various architectures |
2 | 2 |
|
3 | | -TEST_DATA = ( |
4 | | - (3, (0x04030201, 0x08070605, 0x0C0B0A09)), |
5 | | - (63, (0x100F0E0D, 0x14131211, 0x18171615)), |
6 | | - (1023, (0x1C1B1A19, 0x201F1E1D, 0x24232221)), |
7 | | -) |
8 | | - |
9 | 3 | SET_TEMPLATE = """ |
10 | 4 | @micropython.viper |
11 | 5 | def set{off}(dest: ptr32): |
12 | | - dest[{off}] = {val} & 0x3FFFFFFF |
13 | | -set{off}(b) |
14 | | -print(b[{off} * 4:({off} + 1) * 4]) |
| 6 | + dest[{off}] = {val} |
| 7 | +set{off}(buffer) |
| 8 | +print(hex(get_index(buffer, {off}))) |
15 | 9 | """ |
16 | 10 |
|
| 11 | +BIT_THRESHOLDS = (5, 8, 11, 12) |
| 12 | +SIZE = 4 |
| 13 | +MASK = (1 << (8 * SIZE)) - 1 |
| 14 | + |
17 | 15 |
|
18 | 16 | @micropython.viper |
19 | | -def set_index(dest: ptr32, i: int, val: int): |
| 17 | +def set_index(dest: ptr32, i: int, val: uint): |
20 | 18 | dest[i] = val |
21 | 19 |
|
22 | 20 |
|
23 | | -b = bytearray(5000) |
24 | | -for start, vals in TEST_DATA: |
25 | | - for i, v in enumerate(vals): |
26 | | - set_index(b, start + i, v) |
27 | | - print(b[(start + i) * 4 : (start + i + 1) * 4]) |
28 | | - |
29 | | -for i in range(len(b)): |
30 | | - b[i] = 0 |
31 | | - |
32 | | - |
33 | | -for start, vals in TEST_DATA: |
34 | | - for i, v in enumerate(vals): |
35 | | - exec(SET_TEMPLATE.format(off=start + i, val=v + 0x01010101)) |
| 21 | +def get_index(src, i): |
| 22 | + return ( |
| 23 | + src[i * SIZE] |
| 24 | + + (src[(i * SIZE) + 1] << 8) |
| 25 | + + (src[(i * SIZE) + 2] << 16) |
| 26 | + + (src[(i * SIZE) + 3] << 24) |
| 27 | + ) |
| 28 | + |
| 29 | + |
| 30 | +buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024) |
| 31 | +next = 1 |
| 32 | +val = 0 |
| 33 | +for bit in BIT_THRESHOLDS: |
| 34 | + print("---", bit) |
| 35 | + pre, idx, post = ( |
| 36 | + (((1 << bit) - (2 * SIZE)) // SIZE), |
| 37 | + (((1 << bit) - (1 * SIZE)) // SIZE), |
| 38 | + ((1 << bit) // SIZE), |
| 39 | + ) |
| 40 | + val = (val << 8) + next |
| 41 | + next += 1 |
| 42 | + set_index(buffer, pre, val & MASK) |
| 43 | + val = (val << 8) + next |
| 44 | + next += 1 |
| 45 | + set_index(buffer, idx, val & MASK) |
| 46 | + val = (val << 8) + next |
| 47 | + next += 1 |
| 48 | + set_index(buffer, post, val & MASK) |
| 49 | + val = (val << 8) + next |
| 50 | + next += 1 |
| 51 | + print(hex(get_index(buffer, pre)), hex(get_index(buffer, idx)), hex(get_index(buffer, post))) |
| 52 | + exec(SET_TEMPLATE.format(off=pre, val=val & MASK)) |
| 53 | + val = (val << 8) + next |
| 54 | + next += 1 |
| 55 | + exec(SET_TEMPLATE.format(off=idx, val=val & MASK)) |
| 56 | + val = (val << 8) + next |
| 57 | + next += 1 |
| 58 | + exec(SET_TEMPLATE.format(off=post, val=val & MASK)) |
0 commit comments