diff --git a/codewars_test/test_framework.py b/codewars_test/test_framework.py index cbe0993..8a91d6b 100644 --- a/codewars_test/test_framework.py +++ b/codewars_test/test_framework.py @@ -85,6 +85,7 @@ def assert_approx_equals( expect(abs((actual - expected) / div) < margin, message, allow_raise) + ''' Usage: @describe('describe text') @@ -94,7 +95,6 @@ def it1(): # some test cases... ''' - def _timed_block_factory(opening_text): from timeit import default_timer as timer from traceback import format_exception @@ -126,28 +126,37 @@ def wrapper(func): it = _timed_block_factory('IT') -''' -Timeout utility -Usage: -@timeout(sec) -def some_tests(): - any code block... -Note: Timeout value can be a float. -''' - -def timeout(sec): +def timeout(sec, user_msg=""): + def wrapper(func): - from multiprocessing import Process - msg = 'Should not throw any exceptions inside timeout' + from multiprocessing import Process, Value - def wrapped(): - expect_no_error(msg, func) - process = Process(target=wrapped) + def wrapped(finished): + try: + func() + finished.value = 1.0 + except BaseException as e: + finished.value = 1.0 + fail("Should not throw any exceptions inside timeout: {}".format(repr(e))) + + finished = Value('d',0.0) + # needed to know if the process crashed without any "feedback" and before any + # assertion has been done in the wrapped function or the wrapper (happens if + # the heap memory explodes) + + process = Process(target=wrapped, args=(finished,)) process.start() process.join(sec) + if process.is_alive(): - fail('Exceeded time limit of {:.3f} seconds'.format(sec)) + msg = 'Exceeded time limit of {:.3f} seconds'.format(sec) + if user_msg: + msg += ': ' + user_msg + fail(msg) process.terminate() process.join() + elif not finished.value: + fail('Something went wrong: the process running the function crashed without feedback (probably saturating the available memory)') + return wrapper diff --git a/tests/fixtures/timeout_failing_inner_test_assertion.expected.txt b/tests/fixtures/timeout_failing_inner_test_assertion.expected.txt new file mode 100644 index 0000000..2089e87 --- /dev/null +++ b/tests/fixtures/timeout_failing_inner_test_assertion.expected.txt @@ -0,0 +1,6 @@ + +group 1 + +Didn't pass + +30.41 diff --git a/tests/fixtures/timeout_failing_inner_test_assertion.py b/tests/fixtures/timeout_failing_inner_test_assertion.py new file mode 100644 index 0000000..a812e4a --- /dev/null +++ b/tests/fixtures/timeout_failing_inner_test_assertion.py @@ -0,0 +1,8 @@ +import codewars_test as test + + +@test.describe("group 1") +def group_1(): + @test.timeout(0.01) + def test_1(): + test.fail("Didn't pass") diff --git a/tests/fixtures/timeout_failing_memory_crash.expected.txt b/tests/fixtures/timeout_failing_memory_crash.expected.txt new file mode 100644 index 0000000..81c199a --- /dev/null +++ b/tests/fixtures/timeout_failing_memory_crash.expected.txt @@ -0,0 +1,8 @@ + +group 1 + +check memory crash + +Something went wrong: the process running the function crashed without feedback (probably saturating the available memory) + +30.41 diff --git a/tests/fixtures/timeout_failing_memory_crash.py b/tests/fixtures/timeout_failing_memory_crash.py new file mode 100644 index 0000000..020a519 --- /dev/null +++ b/tests/fixtures/timeout_failing_memory_crash.py @@ -0,0 +1,32 @@ +import codewars_test as test + + +from functools import lru_cache +from sys import setrecursionlimit +setrecursionlimit(54000) + +Q = {*"nh|rh|ag|pa|b|h|pu|tb|ru|ts|cs|ir|no|cd|ne|og|np|hs|cu|pt|th|cr|ho|tm|lu|fl|ds|n|rn|k|sc|pm|ti|as|au|fe|pb|rg|s|u|ar|lv|at|hf|w|bh|in|na|tl|mt|v|xe|tc|cn|rb|sr|i|sm|br|ce|os|er|bi|eu|sb|sn|zr|sg|be|p|ni|ac|nb|rf|o|cl|cf|he|db|ra|ge|ga|nd|pr|mn|fr|f|pd|md|am|fm|ca|kr|lr|gd|mo|mc|mg|ta|se|y|bk|yb|si|es|re|co|po|li|te|c|hg|cm|al|zn|dy|la|ba".split('|')} +def XXX(s): + @lru_cache(maxsize=None) + def recurse(ind): + S = 0 + for i in range(2): + W = s[ind] if i == 0 else s[ind] + s[ind + 1] + if W in Q: + S += recurse(i + ind + 1) + return S + return recurse(0) + + + +DATA = "sbinbhscsinbhosmosbinosbinposbhosbinbhsbinhosnhosinbinacnosinosmoscosbinpbhsmcnosinhosnosinosininhsinpbinosinpbhosninhsnosbhsbhscscosinhoscsbinposnpbhsinbhosmnbhscscninbinbinpbinhosnpbinposcninposninhosnosmcsnhsbhscosbhosnposcsmcscninposinirnininbhsinhosbininpbhsbhscoscsbhosmnbhoscsmcscoscsnhsnbhsnosbhosinosmnbinposbininhosininosbinpbininosinirbhsbhosmnpbinhosnhscnhsbhscosmnosinhsinhosnhsbhsnpbinascsnpbhsnhsbirhosbhoscscnbhosnbinosnhosnposbhosinpbinosinoscsninosbhsbinposinhsbhoscscnbhscnposcsmnosmnposnosmcsinposnpbhosnposnbhsnbhsbhsnposcnpbinpbhosmosnoscnbhsnpbhosnasbhsnpbhscnpbinposcnhosinbinhosbhscosbhsbhsnbinosnbhosnosnhoscnacosnpbinosninposnininosmnirhsnpbhsninhscnosbhosbhoscnasinbinhscscnbinosbhsbinhsnhsmcnhsinacnposbhosnbhsnhoscnacsnbhsinpbinposbhsbinhsbhsbhsininpbhsnhosbinhsbinpbhoscscoscsinhsnosnasbhosnpbhosbinposmnhosinpbhscnhsninpbhscnosninbinosbhscnhosininbinpbhsbhsinpbhsirhscsnbininpbinhosnposbinbhoscosnpbhscsinhsinhsmcsnasinposcoscnosininhsnosbinhsnhosmcnirbhosmosbinposnposnbinoscsininposinbhsbhosinpbinbhsnpbhsbhscosnpbhosbhosbhoscsinhscscoscosbhsbhsinascnhosnosbinposbhsnosmninosnposmoscosbinbhscnbhosinhsbhoscnbinbinosbhsnosnposbhosnbininbhsbhsnbhscosbhosbirbhsbinosbhscninhsbhosnosinposnhsnacnasbinbinbinhosinhscsmnpbhsbinposnposninbinpbhsbhsnininoscosnpbinbhoscsbirnosbhosnosnininacsbhsirnposmcnhoscscnacosbhosbhscninpbhoscnosnosbhsbinbhosnpbininbhosinosinbinposinhscnbhsmosirnbinpbhsninposcsnbhscsbhosnposinpbhsinhsbhosbinosirnosnpbhoscsnbhsmcosnpbinpbhosnbhsnhosbhscosnpbhscosbhsbinhsinhsinbinbinirnbhsinirbhsinpbhsbinhscsnpbhosbinbhscsninposininbhoscsbinposinpbinosnpbhosinosinpbhsinoscnpbirbinposcscnpbhosnbinhsninasinposnacosbhosmninposinpbhoscsinacosininpbinoscoscsbhsbhsnasnbhsnpbhosinhscnbhosnhsbhsbhsbhscscnhsinbhsmosbhosininbhoscsirhscsbinposcnbinposcnpbhsbinposinascsnbhsnposbhosinpbininhoscosnpbhoscnhsnposininhosnacsninbinoscsbinhsinhosnbhosbinhscnosnoscoscnposbinosninbhsninbinpbhosinhsinosnosnbinbininposnbinhosbhosbhosininpbhoscosninirnhsinosnpbinosinpbhosbhosninhoscsninposcsinasinbhosnposinosnhoscnpbinininosnpbhsnbhsnosinoscsbinpbinposnpbinpbhosinbhscosnininposnininposcnasbinosninhsinhsbinhsnposcnposbinbhsinhoscosinbinposnposininasbhsnbhsbinbhosnposbinpbhscsnpbhsinbhosinosmnosbhosbhsnininosbinbhsnposbinposnhosinbinposirnbinasinbinposnbhsmcosininosnbhsbinposnbinpbinosmninbinposbhsnoscnacnpbhosnbininhsmninpbinosmoscosbhosbinbinoscsmninbinposcscnbhosbinhosbhosinbhsnbhsnbhosnhoscnasbhsnhsininpbhsninhoscnbhosmcscsninoscninbinoscosbhsnbhosnosbhsninpbinposnbhsinhosinhscoscsmninhsbhsnbhsnacnpbininbinosbininbhsmcsnosbhoscnhosnosinacnbhsnhosinbinhsnpbininhsbhosinosbhosbhosbhosnhoscnacosininbhsninbinhosnhosnposcsinacnposnbinhsbirnposninbinhsninpbinpbhsbhosnacsbhosinhsbinpbhoscsbinposnirnpbhsmnpbinbinhsnoscosnosirbirnbhosnosnbinposcosninbhosnbhscsbhosinbinosnbhscsnbinbinposcosinosnposinbhsbinhscosbinhsinhsnosbhsbinbinosnosninininposmcninpbinpbhsinposnposcnpbinpbhsnbininbhsbhscnposbhscosnpbinhsnacninposnirbininininposcosnpbhscnhsninbhscosnposbhosinpbinbinbinbininposinposbininirhsnpbhsnoscnacsnosinininosninposmcoscnhscnininosinpbhosnosmnosbhscsnhosnbhoscsbhsmcscsmnbinposbinpbinbinhoscosnhsnosinoscnpbinpbhsnposbinbhosnpbinpbhsinhscsbhosbhscosininpbhsnpbhscnosnpbininpbhsbhosininbhosbhosinbhsnbhosnhscsbininposnhscosnbinposnposcsnhsnosinposcnbinpbhscnbinposcnbhsmosinpbinbhsninpbhsnbirbhsnosnbhsininhosnosinbhsninoscnposcosmnirnhosinosinposnosininhscnosnbinhsinhscsnpbhoscnosbinbhsnposmnbhsmnpbhosnpbhsbinpbhsinbhosnbinhsinhsnposbinbhosinpbinirbinpbininposirbhsinosnosnosinpbinhsnbinoscnasbhosbhosinbhsnbhsbhsmnbhosnhscosnhosbhsnbhosnhsnhsinosinbhscnhsnhsmnhscnbinbininhscsmnbinbinirnposnhsbinhscnbinposnbhscsbhosnpbinbinhscnosbinhosnpbhosinpbhsinosbinosnposinpbinosnposnpbinhosnosbinbhscnininbhsnpbhsinbhoscsinhsinbinhsnbirnbhoscsmnhsbhscsbhsininosinininpbinhsmcscnhoscnbhosinpbininoscnbhsninhsbhscosinosnhsnoscscnpbhscsinosninpbinhscnbhsinbhsbhsbinbinhsininbinhscnosbhsmnosnposmcsbinposbinininbhsnhsbhosinirbhosbinposcnosinosbhoscninoscnasbhscoscnpbhosbinpbinininininposcninhsnpbinininhsnbinhsbhsbinosinposnhsinosbinposinpbinbinpbhsnhsbinpbhscnposbhosnhosbhosbinpbhosinpbinosininosinbhsnpbinhsinbhosbhsnhscosinhosbinpbinbinposnhosmosinhsbhsbininhosnasbhsnbhscoscnasnpbhoscsnposnbinosnhosbirbhsnhosinpbhscsbinposinhscnosnposbhsirnbinposninhscsnbirbhsbhoscnosbhsnosinpbinhsininbinhosninposnposnhsninpbinbinininosnbirnbinhosinhsbinoscsnhscscnasninpbhsbhsinpbininosbhsinposcnosinoscnosmcosnposcoscnpbhsnbinpbhsbinbinhosnpbhoscsbhsnhoscosnbinhsbhosbhosbhsinbinbinhosmninoscscscnposnpbhsnbinosnhosbininbininbhosbinhsnhsbinbhsnbhsbhosmcnosnhosbirhsinoscsnposcninhscnpbhsnosbhosnpbininhscscnpbhoscoscsnposininhsnosbhsnposbhscosbhosbhosnhsmcnhsbhscnbinoscnpbinosbhosininhscsninhsnosnhosnbhsbhsinpbhosmcnhosnpbinbhsbinhosinposnbinhsnposcoscnosnpbinpbhoscosbhsnpbhoscosnosirhsnposinbinposnpbinposmnpbhsbhosinbhscnhoscscnhsinpbinhscnosbhosnbhsbhsninbhoscnpbininhosbinosnbhscnposbinhsbhosbinpbhsnhsbinbhosnhosnbhosnposinbhoscsbhscsninposnhscnbirninoscnhsnhosbinbinbhsbhscsmnhsinhosnoscnhoscscscosmninacnpbinosbhscninhsbhoscsnhosnposnposnposnposbhosbhsnpbinosinpbinpbhsbinhoscninpbhosbinbirnirnposnposnposnposbinposinosbhsnbininposnposnposinacoscnoscosnposnbhsnpbhsinhscosinposinposcosininosnhsinhosinbinhosbhsnposnhosbhoscnposcscnpbinpbhosninposcosbhosinhsinhscnpbinininpbinhsbinpbhsininpbhsinposcnosbhosbhosinosinhsmninosnhosinoscsininposnosinosininoscnasnhosbhsnhosmnhscnoscnhosbhosinhsinhscsbinposnbhsnposinposcnhsnbhscsnposnpbhsbinhosbhsnhsbhsnpbinininhscoscsnosinosbhsnhoscosninininposcnosnposcsnbhsbhsbhsinposnosbhoscninosnhscnposcnoscnosmninhscscosnhsnposcnhsinpbhsbhosmosnosinoscninpbhsmcnbhscosbinosbhsnbinposnbhsmninbhosinbhosmoscnposbirbhsbininposnhoscnosbhsnhsinposinosnpbhosninhsinhsbinbhsbhosbinosnpbhsbhscosnbhscnasnposnhosinininbinposnpbhsnhsbhoscsinosinpbhsbirnhsbhosbhscsnosmcnhosnoscnosninposirbininpbirninbinhosnpbinoscnosnpbhsnpbhscsnbinpbinhscnhsnbhsbhsbinpbinhsnpbhoscsbhoscnosbhoscnbinpbhscosinbinhsinosnbinbhsbinbinasnbhosnhosnosbhscsnosinhsbhsnhsmnpbhsnposininpbinoscnosinhsmnhoscoscsinbinhsbinbhsnasbhosbhosirhsninposbhosmcnhscsbinosininposninbinpbhosbinpbinbhscnpbinosinhsmcninhosmnposnosmnhsbinposnoscosinosbhosbinhsninosnhsinhsnbinpbhsirnosininhsnposnbhosnbhscscnposbinpbhoscsinosnposmcscnhsnbhsninosinhsbhsnhsnhoscnhsbhsirnhsnpbininpbhosinpbhscnposcscosnbhscscnininpbhsnbinininpbhscosinpbhosininhscnhsnosinhsnpbinhsbinacsbinposbininpbhoscsinpbinirhscninbhsnhsbhosinpbhscsbhscscnposbhsnosmnosbhosnhsnhoscscosbinhscnposbhsinbhscnpbhscnosbhsbhsinbhscsnbhosnhosnposcnacnposninposinbinposnbhsnosirbinhscnbhosnhoscsbhsbirbinhosmcsnhsbinposcninhsnbinhscninhsnpbhosbhsnhscnascnbhsnpbhsbhosnhscosinhsnhsninposninosmnhsinoscscscnbinhscnposinbhosmosnhosninbhosinbinpbhsnbhosininpbinbinacsbhoscnasinhsbhoscsnposnbhscnpbinhsininpbinpbhscnbhosbhsnosbhosnposcnasinposbhsbhscscosmnbhoscoscosmnosinposinhscnposcnpbinpbhsbhsninpbhsnpbinpbhosinhscnasinininbinininposbhsinhscosnbininbhsnbinbhsinosnpbhsnhsbinposnoscsmnbinosnhscnpbhscoscoscnpbhsninbhsnoscnhscosbhsnposcsbinbirninpbhosininosbhsmosnhsnbinpbinpbinhsinposinhsbhsnpbhsmninosbinbinhoscsbinbhsbhsbinoscosnpbhosbinirnpbinpbinbinbinbhosnbininhsinosbhscnhsnposnhsbinposmosnosbhosnposininbhosinposnbinhscsbinoscnosnbininhsbinposcscsnacsbinhoscnhsnposirnpbinposinbhsbinpbinhsmninpbininposbininbhosinpbinpbhsnbhosbinininbinbinhosbinosninhosbinpbhsnininhosnosbhscnpbinhsnininpbinbirhosinpbhsnposnpbirninbhosbinosnosbinacsninpbhoscnposcosnpbinbhsmninosbhscoscsnposbhosmcnposinposinposnposnbhsinirbinposcsinirbinposinininosbinposmninpbhscnbhsnhsinhsnhscsnposcosinhsinbhosnpbinpbhosnposinoscnposcnosnininoscsbhsninosbhosininininbinhsbhsinbinposbinposbhoscsbinposmosnposnosnbinhsnhsninhsmnbhosmcsmcnbhosbinhsinbhoscsnoscninpbinposcnirnpbinpbinhsnoscnhosnposinbinposbhosnbhoscscsninosnposnbhsinpbinpbinhsnposmosinosbhscscnoscninhsbhosinposbinbhsnbhosmnpbhsinposcosnposnhsmcscninpbinacsnpbinbinbinhoscsbhsinposmcnosinbhosinhsinhscnbirnhsbirnhoscosinoscnbhosnosbhsnpbhscnposcnbhscosnposininosbirnosinpbinhsnbinbinposnposbirhosnposmnhsinbhoscscsnhosbhoscnhsinhsbinhosininpbinhosnbirninhsbhosinhsbhscnhsirnosbinbhsbinpbhsnosinbhosnposbhosbinhosnbinhsnposnbhosnhsirhsinposninbinposininoscoscosnpbirninoscnasinhsmcscosinosinasinbirninposmnpbhsbinbinbinosmcsninbinpbhosbhsnosinpbhosnbhsnposnbinposinbhsnosinbhsnoscnasbininposininosinosinbhosnpbhscsinhosbhsnpbinininosbhoscsbhscosbhsnhsbinposbhosninosnirnposnhscosbhosnhosnposbhosmnosnpbinposbhosinbinhsnhsbhsnosbhosinoscnirbinpbhsninbinhosbinbhscsinhsbhosnposbinposinhscsnhosnpbininbhsbinbhsmnbhoscsnosnhscnasnpbinpbhsbinoscninhsnpbhscninposinosnirnpbinhsnbinbhsninbinhosbinposmcsinhsninbinposnhscnposmcnbhsbhosnosnosbhosinbhoscnasnbinposninbhsbhsirhsinhosbhsnposbinhosbhsnpbhosmosnposinbhsninosininhoscnhoscnascnpbinpbinbhosbhosnpbinosnhsmosbhsbinbhosbinosnpbhsnhsbhosinhsnpbhsmcninbinpbhosnbinhsbhosirbhsbhsnpbhsninpbhsbhsinosnhosbhsnpbinhsnpbinosirbhosininoscnpbhscnosininpbirhosbinpbhscnininoscnbhsbhsnpbhosnhsinposinasbhosbinosnhsnposbhsmnbinhsnposnbinbinposbinposbhsbinposcosbhosmcnposcnhscnasbhosmnhosnosmcoscnpbhsbinpbinposbhsbininosnpbhscsbhsmnhsnhosbirbinosninposmcsnhsnbinhsbhosninpbhosinhsbinhosinosnposcnhsnposnbhscsbhosinposnbirnpbhosnhosnhsnbinbirhoscsnposnbhsinpbhsnpbinposininoscnpbhosninosnposbhosinhosbhsninposbinpbhosmninhscscninhsmninposcnposmnhsnhscscscnbhsinosnpbhosnhoscosbinhscscnhosnasinosinhscosbhscnbinhosbinhscosnbirhsbhosnposnbhsininhsbinpbhoscoscoscscsbinasnbhosinpbhsmcnosnhsmcnhosinosnpbinpbhosmcosmninosnbinosnbhosbhosnosinbhosbhsnininposnhoscnbinosnposnbinhsbhsninosinbininhscsmoscnhscninacosbhoscnpbinbhosbinpbinbinposinposnpbinposcsbhsbirbhosinosmninosmcscosinbhosnpbhsmcnpbinoscnoscnasbhosbhscscsinpbhosinbhosinosbhscosbinpbhosinpbhoscscnirhosmnbhosinposcninoscnhsbinpbhsnpbhosbhosnhsninbhosnhosnposbhsnhsmnosinbinosnposnbhscnbinoscscninposnosbhsbhscoscscsninbininposininosirbhosnoscoscnposmosbhsinhosinbhosinhsnposbinpbhsbhsmcosinposcosinoscsnhsbinbhscnosninbinposbinbinbirnhsbinposinhosinhsnoscscninpbinininosnhosinhsnposcsirhscnacosninposbhscosnpbhsnhsinposcosinosinirbirnbinposmnposnhscsirnbininosnposcnasinosnhosirnpbhscoscnbhoscsnpbinpbhosnosinposnhsnhsnposinbhosninhsnbhsnbhosbhosbhoscnosnbhscscsbhsbinposnbinpbhsbinbhoscsmnpbhscscnbirhosmnhsnposnbhsinpbinhscsbhsninpbhscnbhscsinirnpbinoscosnosbhscninposcnoscnpbhscnoscsnposcosbirhsinbhosninposnbirhsnbirbinbhosbinpbhsmcscosnhsirbinhsnhscosinbinbinbinposbirhsnhscscscnacsninoscsinhosnbhsbininbhsnosinbinposbinpbhsbininbhscosinininosininbhosbhsnpbinosinhosnpbhscnasnhsinininposcsinosbhsnbhscninposinosnhoscninposnacsbhscsinpbhscnpbinbhosmnhsinhscnasbhoscnhsbirbhoscosinbirhosnirhsbhsnposnposbinhsnhscnininbhosinbinpbhscosnbhosninposnirnhoscnhsnhosinhscnacsnascnhsmnosbinposinhsbinposinposnhoscosnbhsbhscosnpbhsnpbhsbhsnoscosninhosnbhosnhosinirbhosbhsbhsbininosnbhosbinirninbhsnposbhoscosbhosbinposinosbhsninhsnasnosmcnhosnposmnhsnposbininhoscsbhsnasbhscsnbinosmnhsninhosnpbhoscnpbhscsbhsbhscnposcsinbhsinpbinposinhsinhosninbinpbhsbinpbinosinosbinbinpbinbhosnposcnosnbinbhscnbinoscnbhoscsinbinininbhsinhosnhsnpbhscosininpbhscsbinoscnposbhscosnpbinbininosbhsnosnbinoscsinpbhsbinosnbhscosnpbhoscnpbinosinosinposninosnhosinbinosnbhscosbhsnpbhsbhsbhscnpbhsbinposcsmnosnpbinpbhosbhsnosnbhsininosininpbhoscsbhosnposninirnposbhosbinposbinposnbhsirhosbinoscsmosbhscninhosnhsmnbhosbhosinasnposnpbhscosnposcnbhoscsnposcnasbhsnpbinpbinbhosinpbinpbhsinhscnasinosnposcnacscsbininbhsnhsnhsnbhsinpbhsninbhsbhscsinbhscsinposinhsbinposmnbhsininposnhosmnosnhsbhosnbininpbinpbirnhscnoscnpbhsinhscnosnpbinhscosnbhscsbhosininhsinpbinbhscnbhoscsnosmosnbhsinbinosnposcsinbhosinbinposcsnhsninosbhsmnposnposnpbhsnhsininbhosinoscoscnposbinbhsnhosbhosnpbhosbhsmcosinposcnosinininosinoscsmcsnosinbinbininosbinhosnposcnposcsnpbhsinpbhsinosinpbinposnhsbinhsnpbinascsmoscnposinhsnposcnosnpbinbininbhosbhosinbinposbhsnacosinoscosbinosmcosinbhsnbhsnasinosbhosmcnhsbhsininpbinoscnhscnpbhscnacnposnposcnposnposnposnpbinbhsnasnposininbinpbhosbirbinosbhsbhsnbininbhsmnosnhsbinpbhsnhsnhsinpbhsinosbinbinposbhscsnascsinbinpbhsbinhsnbinosmnhscsinbhsnbhsnpbhosininbinosmnhsbhsnbhsinbinoscosnbinposcsnposnhsnpbinpbhscnbinhoscnposnascninhsinposnosinosnposcosnhoscoscnbhosbhosininpbhsnposbhsbinirhsinosinoscsmnhosinosinposcnosinhsbhosnposnosnbhosinpbininoscnpbinininbhoscnascnhsbinposninbhsnposbhosnpbhosnposininpbinhosninbhsbirhscnhscscnhosninosinosninposbhosmosninhsbhsnhsinpbhsnposbinacnasnposinhsbhosbhsninhsnpbhosnpbhosinosbhosnhscnhscsmnposmnpbhosbininhsininosbhoscnpbhosinhsbinhsnposbhosmosnhsbhosinhsnhscnposcninhosninbhosnhosmnpbinininhscnininbhosnosnacscsninhscnpbhscnposnpbirbhoscnacsbhsinpbhsninbinoscnbinbinposnbirninposnbinhsnbhscnhoscnhsinhsnposnbhsbhoscscsninirninposnpbhsbinposcnpbhscsinininbinhscsinpbhscosnbinhsbhosmnbirhosinhscscscscnbhsnosininbinosnosnpbhsnasnbinposnpbinosmcosnposininbinpbinposcnosbhscnbhsmnbhosinosnposbhsininhosnhscnpbinosbinposbhsmoscosbhosinoscnbhosnbinbhsbinpbhosbhosirnposninosnbhoscosinpbinbhosnposbhsnposcsmnbininininoscnpbinhscnacnbhsinhsnposnposnacsinbhscosnposbhosnosbhsbhsinoscnosninhsinoscsinhsnposcsbininhosnhscsmcnacosbinposcsbhosmnininhsbhsnposninpbhsnposininhsnoscscscsnhsbhsnosbhscnbhsinbinbhsnposnpbhosnbhscnhsnhosnhscosmnpbininosbhosbinposbhsinposbhosnbinbinbinpbinbhsnbhsinhosnhscnbhosnbhosbinhosbhscsnbhosinosbhosmcnosinpbinosbinhsnpbirninpbhsbhsninosnbinasinhsmnbinposnpbinosininpbinpbhosinhsnhosinoscninhscnposcoscscnbinpbhsnininpbhsmcsbinpbhsinacsinbininhsinposnbinhosinpbinhsnposnasbinhscnhosnoscsinbhsnhscnascnosnhscoscsbinbhscnbinbhsbinpbinhscsbhsbhsbinosnhosinpbinosinoscninbhosinbhsnbirbhsinbhosbhsinposnhscnposinhsbhsnpbhsnpbhsbinirnbinosininosinbhosbinpbinbhsinbinpbhosnposmcnpbhosininhsinhosnbhoscninpbinpbinhsnbhosninbinirhosnposnhsbhscnbininpbhosmnpbinhscsbhsnosinhsbininbinpbininpbinosinoscsbhscosnosnhoscosinbhsnininosninbhsbhoscsbhscscosnposinhsninposininhosnhosbinhsnoscosnininhosnposmcsbhsmnhsininbhsnhsnposbhosbinbhsbinhosininbhsbinininhoscscnposnbinpbhsnbhscsinhosnhscnpbhsbhoscnasbhsbinpbinbinbinhsnhsinposmcnposnininbhsnbininbinhosmcnpbhsnosnposinhsnosnosinhsbhosinposnhsininhsninosbhsinpbhsininpbhsinhsinhsnosirhoscsinasbirnhsnpbhsnpbinhsnbhsnhsbhscnosmninbinpbhsnhsnposbhosnpbhsbininininbinhscninosnpbinosnpbirhsnpbhsbhsinhsnhosnpbhsbhsinposnasinhosnpbhsnbhosnosnosinosbinbhsnposcninhsbhosbhosinposbinpbininininhsinposcosnposnpbhosnposcscsnposinposbhsbhosinpbhsinbhosinposnosnbininposcoscsnbhsnhosbhsbinbhosnpbinhsbhosbininoscnasinpbinirhsnpbinbinpbhsmcoscnininosnhscosnbhsnbinpbinhsinpbirbhsininpbhsbhosnpbinhsinbirbhosbinhoscosnposininbinposnposmnbhosnpbhsbhsnposcsinbinpbhosininpbhsnposbhsnposbhsninposninirnosinbirhsnbhsnosinpbhsinoscnhsinosnbhsininasbhsnbinposcsinosinosmnbinosinpbhosbininposnhosbhsbinpbhscsmnhsninbhsbinhsnosnpbhsinbinhsmcnpbirhosbinhosbhosinosinosnposbhscosbhosnposbhoscnhsbhosnhsbinpbinosbhsnposbhsinhsbinbhsmnoscsnhsbinposcsnpbinbhoscninosmcosnosnosinosnpbhsninhsnbinpbinhosnosninbinhscsbhosinosmcnpbhoscninpbinoscosnbinposinhsbhoscsnbinbhsbinhsmnpbhscsinpbininasinpbinasbhsbhsbinpbininposcnh" + +@test.describe('group 1') +def tests(): + @test.it("check memory crash") + def _(): + @test.timeout(8) + def _(): + test.pass_() + XXX(DATA) # this explodes the heap + test.fail("didn't fail...") diff --git a/tests/fixtures/timeout_failing.expected.txt b/tests/fixtures/timeout_failing_time.expected.txt similarity index 100% rename from tests/fixtures/timeout_failing.expected.txt rename to tests/fixtures/timeout_failing_time.expected.txt diff --git a/tests/fixtures/timeout_failing.py b/tests/fixtures/timeout_failing_time.py similarity index 69% rename from tests/fixtures/timeout_failing.py rename to tests/fixtures/timeout_failing_time.py index 00c2d06..30f85b0 100644 --- a/tests/fixtures/timeout_failing.py +++ b/tests/fixtures/timeout_failing_time.py @@ -5,7 +5,6 @@ def group_1(): @test.timeout(0.01) def test_1(): - x = 0 - while x < 10 ** 9: - x += 1 + while True: + pass test.pass_() diff --git a/tests/fixtures/timeout_failing_user_raise_error.expected.txt b/tests/fixtures/timeout_failing_user_raise_error.expected.txt new file mode 100644 index 0000000..617f7bd --- /dev/null +++ b/tests/fixtures/timeout_failing_user_raise_error.expected.txt @@ -0,0 +1,8 @@ + +group 1 + +it 1 + +Should not throw any exceptions inside timeout: KeyError() + +30.41 diff --git a/tests/fixtures/timeout_failing_user_raise_error.py b/tests/fixtures/timeout_failing_user_raise_error.py new file mode 100644 index 0000000..a632f19 --- /dev/null +++ b/tests/fixtures/timeout_failing_user_raise_error.py @@ -0,0 +1,11 @@ +import codewars_test as test + + +@test.describe("group 1") +def group_1(): + @test.it("it 1") + def group_1(): + @test.timeout(0.2) + def test_1(): + raise KeyError() + test.pass_() diff --git a/tests/fixtures/timeout_failing_with_user_message.expected.txt b/tests/fixtures/timeout_failing_with_user_message.expected.txt new file mode 100644 index 0000000..9779d61 --- /dev/null +++ b/tests/fixtures/timeout_failing_with_user_message.expected.txt @@ -0,0 +1,6 @@ + +group 1 + +Exceeded time limit of 0.010 seconds: nope... + +30.41 diff --git a/tests/fixtures/timeout_failing_with_user_message.py b/tests/fixtures/timeout_failing_with_user_message.py new file mode 100644 index 0000000..243e28a --- /dev/null +++ b/tests/fixtures/timeout_failing_with_user_message.py @@ -0,0 +1,10 @@ +import codewars_test as test + + +@test.describe("group 1") +def group_1(): + @test.timeout(0.01, "nope...") + def test_1(): + while True: + pass + test.pass_() diff --git a/tests/fixtures/timeout_passing.expected.txt b/tests/fixtures/timeout_passing.expected.txt index a0894ac..eed4f76 100644 --- a/tests/fixtures/timeout_passing.expected.txt +++ b/tests/fixtures/timeout_passing.expected.txt @@ -3,6 +3,4 @@ Test Passed -Test Passed - 17.19