from __future__ import division, absolute_import, print_function

import sys
import re

from numpy.testing.utils import jiffies, memusage


def cmdline():
    m = re.compile(r'\A\d+\Z')
    args = []
    repeat = 1
    for a in sys.argv[1:]:
        if m.match(a):
            repeat = eval(a)
        else:
            args.append(a)
    f2py_opts = ' '.join(args)
    return repeat, f2py_opts


def run(runtest, test_functions, repeat=1):
    l = [(t, repr(t.__doc__.split('\n')[1].strip())) for t in test_functions]
    start_memusage = memusage()
    diff_memusage = None
    start_jiffies = jiffies()
    i = 0
    while i < repeat:
        i += 1
        for t, fname in l:
            runtest(t)
            if start_memusage is None:
                continue
            if diff_memusage is None:
                diff_memusage = memusage() - start_memusage
            else:
                diff_memusage2 = memusage() - start_memusage
                if diff_memusage2 != diff_memusage:
                    print('memory usage change at step %i:' % i,
                          diff_memusage2 - diff_memusage,
                          fname)
                    diff_memusage = diff_memusage2
    current_memusage = memusage()
    print('run', repeat * len(test_functions), 'tests',
          'in %.2f seconds' % ((jiffies() - start_jiffies) / 100.0))
    if start_memusage:
        print('initial virtual memory size:', start_memusage, 'bytes')
        print('current virtual memory size:', current_memusage, 'bytes')
