"""Test for the Cachier python package.""" # This file is part of Cachier. # https://github.com/shaypal5/cachier # Licensed under the MIT license: # http://www.opensource.org/licenses/MIT-license # Copyright (c) 2016, Shay Palachy # from os.path import ( # realpath, # dirname # ) from time import ( time, sleep ) from datetime import timedelta from random import random from cachier import cachier # Pickle core tests @cachier(next_time=True) def _test_int_pickling(int_1, int_2): """Add the two given ints.""" return int_1 + int_2 def _test_int_pickling_compare(int_1, int_2): """Add the two given ints.""" return int_1 + int_2 def test_pickle_speed(): """Test speeds""" print(" * Comparing speeds of decorated vs non-decorated functions...") num_of_vals = 100 times = [] for i in range(1, num_of_vals): tic = time() _test_int_pickling_compare(i, i + 1) toc = time() times.append(toc - tic) print(' - Non-decorated average = {:.8f}'.format( sum(times) / num_of_vals)) _test_int_pickling.clear_cache() times = [] for i in range(1, num_of_vals): tic = time() _test_int_pickling(i, i + 1) toc = time() times.append(toc - tic) print(' - Decorated average = {:.8f}'.format( sum(times) / num_of_vals)) @cachier(next_time=False) def _takes_5_seconds(arg_1, arg_2): """Some function.""" sleep(5) return 'arg_1:{}, arg_2:{}'.format(arg_1, arg_2) def test_pickle_core(): """Basic Pickle core functionality.""" _takes_5_seconds.clear_cache() stringi = _takes_5_seconds('a', 'b') start = time() stringi = _takes_5_seconds('a', 'b') end = time() assert end - start < 1 DELTA = timedelta(seconds=3) @cachier(stale_after=DELTA, next_time=False) def _stale_after_seconds(arg_1, arg_2): """Some function.""" return random() def test_stale_after(): """Testing the stale_after functionality.""" _stale_after_seconds.clear_cache() val1 = _stale_after_seconds(1, 2) val2 = _stale_after_seconds(1, 2) val3 = _stale_after_seconds(1, 3) assert val1 == val2 assert val1 != val3 sleep(3) val4 = _stale_after_seconds(1, 2) assert val4 != val1 @cachier(stale_after=DELTA, next_time=True) def _stale_after_next_time(arg_1, arg_2): """Some function.""" return random() def test_stale_after_next_time(): """Testing the stale_after with next_time functionality.""" _stale_after_next_time.clear_cache() val1 = _stale_after_next_time(1, 2) val2 = _stale_after_next_time(1, 2) val3 = _stale_after_next_time(1, 3) assert val1 == val2 assert val1 != val3 sleep(3) val4 = _stale_after_next_time(1, 2) assert val4 == val1 val5 = _stale_after_next_time(1, 2) assert val5 != val1 @cachier() def _random_num(): return random() @cachier() def _random_num_with_arg(a): # print(a) return random() def test_overwrite_cache(): """Tests that the overwrite feature works correctly.""" _random_num.clear_cache() int1 = _random_num() int2 = _random_num() assert int2 == int1 int3 = _random_num(overwrite_cache=True) assert int3 != int1 int4 = _random_num() assert int4 == int3 _random_num_with_arg.clear_cache() int1 = _random_num_with_arg('a') int2 = _random_num_with_arg('a') assert int2 == int1 int3 = _random_num_with_arg('a', overwrite_cache=True) assert int3 != int1 int4 = _random_num_with_arg('a') assert int4 == int3 def test_ignore_cache(): """Tests that the ignore_cache feature works correctly.""" _random_num.clear_cache() int1 = _random_num() int2 = _random_num() assert int2 == int1 int3 = _random_num(ignore_cache=True) assert int3 != int1 int4 = _random_num() assert int4 != int3 assert int4 == int1 _random_num_with_arg.clear_cache() int1 = _random_num_with_arg('a') int2 = _random_num_with_arg('a') assert int2 == int1 int3 = _random_num_with_arg('a', ignore_cache=True) assert int3 != int1 int4 = _random_num_with_arg('a') assert int4 != int3 assert int4 == int1