summaryrefslogtreecommitdiffstats
path: root/tests/bugs/distribute/overlap.py
blob: 2813979787b983735b35e581a1e397e5fdbe659f (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

from __future__ import print_function
import sys

def calculate_one (ov, nv):
    old_start = int(ov[18:26], 16)
    old_end = int(ov[26:34], 16)
    new_start = int(nv[18:26], 16)
    new_end = int(nv[26:34], 16)
    if (new_end < old_start) or (new_start > old_end):
        #print '%s, %s -> ZERO' % (ov, nv)
        return 0
    all_start = max(old_start, new_start)
    all_end = min(old_end, new_end)
    #print '%s, %s -> %08x' % (ov, nv, all_end - all_start + 1)
    return all_end - all_start + 1

def calculate_all (values):
    total = 0
    nv_index = len(values) // 2
    for old_val in values[:nv_index]:
        new_val = values[nv_index]
        nv_index += 1
        total += calculate_one(old_val, new_val)
    return total

"""
test1_vals = [
    '0x0000000000000000000000003fffffff',   # first quarter
    '0x0000000000000000400000007fffffff',   # second quarter
    '0x000000000000000080000000ffffffff',   # second half
    '0x00000000000000000000000055555554',   # first third
    '0x000000000000000055555555aaaaaaa9',   # second third
    '0x0000000000000000aaaaaaaaffffffff',   # last third
]

test2_vals = [
    '0x0000000000000000000000003fffffff',   # first quarter
    '0x0000000000000000400000007fffffff',   # second quarter
    '0x000000000000000080000000ffffffff',   # second half
    '0x00000000000000000000000055555554',   # first third
    # Next two are (incorrectly) swapped.
    '0x0000000000000000aaaaaaaaffffffff',   # last third
    '0x000000000000000055555555aaaaaaa9',   # second third
]

print '%08x' % calculate_one(test1_vals[0], test1_vals[3])
print '%08x' % calculate_one(test1_vals[1], test1_vals[4])
print '%08x' % calculate_one(test1_vals[2], test1_vals[5])
print '= %08x' % calculate_all(test1_vals)
print '%08x' % calculate_one(test2_vals[0], test2_vals[3])
print '%08x' % calculate_one(test2_vals[1], test2_vals[4])
print '%08x' % calculate_one(test2_vals[2], test2_vals[5])
print '= %08x' % calculate_all(test2_vals)
"""

if __name__ == '__main__':
    # Return decimal so bash can reason about it.
    print('%d' % calculate_all(sys.argv[1:]))