Run read() on a number of examples, supress output, generate summary.
    
    Parameters
    ----------
    examples : list of tuples of three str elements
        Tuples contain the path and cfg argument to the read function,
        as well as the cfg argument to the merge function (*TODO*)
        e.g. [(path, read_cfg, merge_cfg), (...)]
    
    Returns
    -------
    None
        Prints all results to stdout.

def run_examples(examples):
    """Run read() on a number of examples, supress output, generate summary.
    
    Parameters
    ----------
    examples : list of tuples of three str elements
        Tuples contain the path and cfg argument to the read function,
        as well as the cfg argument to the merge function (*TODO*)
        e.g. [(path, read_cfg, merge_cfg), (...)]
    
    Returns
    -------
    None
        Prints all results to stdout.
    """
    
    import inspect

    PATH_TEST_DATA = os.path.join(os.path.dirname(os.path.abspath( \
        inspect.getfile(inspect.currentframe()))), '../local/test_data')
    
    print('running examples ...')
    t0 = datetime.now()
    results = [0, 0, 0]
    for ex in sorted(examples):
        t1 = datetime.now()
        src, cfg, _ = examples[ex]
        src = os.path.abspath(os.path.join(PATH_TEST_DATA, src))
        if not os.path.isfile(src) and not os.path.isdir(src):
            print('{} not a file'.format(src))
            break
        if type(cfg) == str:
            cfg = os.path.abspath(os.path.join(PATH_TEST_DATA, cfg))
            if not os.path.isfile(cfg):
                print('{} not a file'.format(cfg))
                break
        try:
            data = read(src, cfg=cfg, silent=True)
            n_keys = len(data.keys())
            if n_keys > 0:
                print('data {:<15} [SUCCESS]   {:.1f}s, {} dfs, {}'.format(
                    ex, (datetime.now()-t1).total_seconds(), n_keys, mem(data)))
                results[0] += 1
            else:
                print('data {:<15} [NO IMPORT] {:.1f}s'.format(ex, (datetime.now()-t1).total_seconds()))
                results[1] += 1
        except:
            print('data {:<15} [EXCEPTION] {:.1f}s'.format(ex, (datetime.now()-t1).total_seconds()))
            results[2] += 1
    print()
    print('ran {} tests in {:.1f} seconds'.format(len(examples),
        (datetime.now()-t0).total_seconds()))
    print('{} success / {} no import / {} exception'.format(
        str(results[0]), str(results[1]), str(results[2])))