"""orbit_long.py twin|tm1 N: iterate IncF (twin) or TM1's Inc from x0 for N Inc steps; print exits and progress."""
import sys, time
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
sys.setrecursionlimit(10000)
import symexec as S
twin = sys.argv[1] == 'twin'
N = int(float(sys.argv[2]))
x = S.x0_c(); stats = {}
t = time.time()
exits = 0; lastex = None
maxlen = 0
try:
for k in range(N):
before = sum(v for kk, v in stats.items() if kk.startswith('EXIT'))
S.inc_c(x, twin, stats)
after = sum(v for kk, v in stats.items() if kk.startswith('EXIT'))
if after != before:
exits += 1; lastex = k + 1
maxlen = max(maxlen, len(x[1]))
if (k + 1) % 2000000 == 0:
print(k + 1, 'exits', exits, 'last', lastex, 'len', len(x[1]), S.fmt_c(x, 8), '%.0fs' % (time.time() - t), flush=True)
except S.Inr as e:
print('INR at', k + 1, e, S.fmt_c(x, 12))
except S.TouchedTail:
print('tail touched', k + 1)
print('done', k + 1, 'exits', exits, 'lastexit', lastex, 'maxlen', maxlen, {kk: v for kk, v in stats.items() if kk.startswith('EXIT') or '<-' in kk or kk == 'D001T'})