Files
2019-03-05 16:52:51 +01:00

163 lines
3.8 KiB
Python
Executable File

#! /usr/bin/env python2
#-*- coding:utf-8 -*-
from builtins import range
from miasm.core.interval import *
from random import randint
from pdb import pm
i1 = interval([(1, 3)])
i2 = interval([(2, 5)])
i3 = interval([(3, 5)])
i4 = interval([(5, 8)])
i5 = interval([(1, 5)])
i6 = interval([(1, 3), (5, 8)])
i7 = interval([(2, 8)])
i8 = interval([(1, 8)])
i9 = interval([(4, 5)])
i10 = interval([(1, 1)])
i11 = interval([(1, 2)])
i12 = interval([(2, 2)])
i13 = interval([(2, 4)])
i14 = interval([(0, 1), (3, 5), (7, 10)])
i15 = interval([(0, 12)])
i16 = interval([(2, 8)])
i_empty = interval()
assert(repr(i_empty) == '[]')
assert(interval(i1) == i1)
i1.cannon()
i1.cannon()
assert(cmp_interval(i1.intervals[0], i2.intervals[0]) == INT_JOIN)
assert(cmp_interval(i1.intervals[0], i3.intervals[0]) == INT_JOIN)
assert(cmp_interval(i1.intervals[0], i4.intervals[0]) == INT_DISJOIN)
assert(cmp_interval(i2.intervals[0], i3.intervals[0]) == INT_B_IN_A)
assert(cmp_interval(i3.intervals[0], i2.intervals[0]) == INT_A_IN_B)
assert(cmp_interval(i1.intervals[0], i1.intervals[0]) == INT_EQ)
assert(cmp_interval(i1.intervals[0], i9.intervals[0]) == INT_JOIN_AB)
assert(cmp_interval(i9.intervals[0], i1.intervals[0]) == INT_JOIN_BA)
assert((i1 in i2) is False)
assert((i2 in i1) is False)
assert((i1 in i3) is False)
assert((i2 in i3) is False)
assert((i3 in i2))
assert((i2 in i3) is False)
assert((i3 in i14))
assert(interval.cannon_list(i1.intervals) == i1.intervals)
assert(i1 + i2 == i5)
assert(i1 + i3 == i5)
assert(i1 + i4 == i6)
assert(i2 + i3 == i2)
assert(i2 + i4 == i7)
assert(i1 + i2 + i4 == i8)
assert(i1 - i2 == i10)
assert(i1 - i3 == i11)
assert(i1 - i4 == i1)
assert(i2 - i3 == i12)
assert(i2 - i4 == i13)
assert(i8 - i1 == interval([(4, 8)]))
assert(i8 - i2 == interval([(1, 1), (6, 8)]))
assert(i10 + i12 == i11)
assert(i1 - i1 == interval())
assert(i6 - i6 == interval())
assert(i6 - i6 - i1 == interval())
assert(i1 - i10 == interval([(2, 3)]))
assert(i1 & i1 == i1)
assert(i1 & i2 == interval([(2, 3)]))
assert(i1 & i3 == interval([(3, 3)]))
assert(i3 & i1 == interval([(3, 3)]))
assert(i1 & i4 == interval([]))
assert(i4 & i1 == interval([]))
assert(i1 & i5 == i1)
assert(i5 & i1 == i1)
assert(i1 & i6 == i1)
assert(i5 & i13 == i13)
assert(i6 & i6 == i6)
assert(i14 & i15 == i14)
assert(i15 & i14 == i14)
assert(i14 & i16 == interval([(3, 5), (7, 8)]))
assert(i5.length == 5)
assert(i6.length == 7)
assert((i1 - i1).length == 0)
x1 = [(7, 87), (76, 143), (94, 129), (79, 89), (46, 100)]
assert(interval(x1) == interval([(7, 143)]))
x2 = [(11, 16), (35, 74), (18, 114), (91, 188), (3, 75)]
assert(interval(x2) == interval([(3, 188)]))
i1.hull()
i1.show(dry_run=True)
assert(i_empty.hull() == (None, None))
def gen_random_interval(l=100):
r = []
for j in range(5):
a = randint(0, l)
b = a + randint(0, l)
r.append((a, b))
return r
def check_add(r1, r2):
i_sum = interval(r1) + interval(r2)
for a, b in r1 + r2:
for i in range(a, b + 1):
assert(i in i_sum)
def check_sub(r1, r2):
i1 = interval(r1)
i2 = interval(r2)
i_sub = i1 - i2
for a, b in r1:
for i in range(a, b + 1):
if i in i2:
assert(i not in i_sub)
else:
assert(i in i_sub)
def check_and(r1, r2):
i1 = interval(r1)
i2 = interval(r2)
i_and = i1 & i2
for a, b in r1:
for i in range(a, b + 1):
if i in i2:
assert(i in i_and)
else:
assert(i not in i_and)
for i in range(1000):
r1 = gen_random_interval()
r2 = gen_random_interval()
r3 = gen_random_interval()
check_add(r1, r2)
check_sub(r1, r2)
check_and(r1, r2)
a = interval(r1)
b = interval(r2)
c = interval(r3)
assert((a & b) - c == a & (b - c) == (a - c) & (b - c))
assert(a - (b & c) == (a - b) + (a - c))