about summary refs log tree commit diff stats
path: root/test/core/interval.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/interval.py')
-rw-r--r--test/core/interval.py156
1 files changed, 156 insertions, 0 deletions
diff --git a/test/core/interval.py b/test/core/interval.py
new file mode 100644
index 00000000..34537d25
--- /dev/null
+++ b/test/core/interval.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+from miasm2.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(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)]))
+
+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 xrange(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 xrange(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 xrange(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 xrange(a, b + 1):
+            if i in i2:
+                assert(i in i_and)
+            else:
+                assert(i not in i_and)
+
+
+for i in xrange(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))