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]
    #l = [(t,'') 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')
