<commit_before>USING: kernel math namespaces io tools.test sequences vectors
continuations debugger parser memory arrays words
kernel.private accessors eval ;
IN: continuations.tests

: (callcc1-test) ( n obj -- n' obj )
    [ 1 - dup ] dip ?push
    over 0 = [ "test-cc" get continue-with ] when
    (callcc1-test) ;

: callcc1-test ( x -- list )
    [
        "test-cc" set V{ } clone (callcc1-test)
    ] callcc1 nip ;

: callcc-namespace-test ( -- ? )
    [
        "test-cc" set
        5 "x" set
        [
            6 "x" set "test-cc" get continue
        ] with-scope
    ] callcc0 "x" get 5 = ;

[ t ] [ 10 callcc1-test 10 reverse >vector = ] unit-test
[ t ] [ callcc-namespace-test ] unit-test

[ 5 throw ] [ 5 = ] must-fail-with

[ t ] [
    [ "Hello" throw ] ignore-errors
    error get-global
    "Hello" =
] unit-test

"!!! The following error is part of the test" print

[ ] [ [ 6 [ 12 [ "2 car" ] ] ] print-error ] unit-test

"!!! The following error is part of the test" print

[ ] [ [ [ "2 car" ] eval ] try ] unit-test

[ f throw ] must-fail

! Weird PowerPC bug.
[ ] [
    [ "4" throw ] ignore-errors
    gc
    gc
] unit-test

! ! See how well callstack overflow is handled
! [ clear drop ] must-fail
! 
! : callstack-overflow callstack-overflow f ;
! [ callstack-overflow ] must-fail

: don't-compile-me ( -- ) ;
: foo ( -- ) callstack "c" set don't-compile-me ;
: bar ( -- a b ) 1 foo 2 ;

<< { don't-compile-me foo bar } [ t "no-compile" set-word-prop ] each >>

[ 1 2 ] [ bar ] unit-test

[ t ] [ \ bar def>> "c" get innermost-frame-quot = ] unit-test

[ 1 ] [ "c" get innermost-frame-scan ] unit-test

SYMBOL: always-counter
SYMBOL: error-counter

[
    0 always-counter set
    0 error-counter set

    [ ] [ always-counter inc ] [ error-counter inc ] cleanup

    [ 1 ] [ always-counter get ] unit-test
    [ 0 ] [ error-counter get ] unit-test

    [
        [ "a" throw ]
        [ always-counter inc ]
        [ error-counter inc ] cleanup
    ] [ "a" = ] must-fail-with

    [ 2 ] [ always-counter get ] unit-test
    [ 1 ] [ error-counter get ] unit-test

    [<commit_msg>continuations: update tests for word renaming<commit_after>USING: kernel math namespaces io tools.test sequences vectors
continuations debugger parser memory arrays words
kernel.private accessors eval ;
IN: continuations.tests

: (callcc1-test) ( n obj -- n' obj )
    [ 1 - dup ] dip ?push
    over 0 = [ "test-cc" get continue-with ] when
    (callcc1-test) ;

: callcc1-test ( x -- list )
    [
        "test-cc" set V{ } clone (callcc1-test)
    ] callcc1 nip ;

: callcc-namespace-test ( -- ? )
    [
        "test-cc" set
        5 "x" set
        [
            6 "x" set "test-cc" get continue
        ] with-scope
    ] callcc0 "x" get 5 = ;

[ t ] [ 10 callcc1-test 10 reverse >vector = ] unit-test
[ t ] [ callcc-namespace-test ] unit-test

[ 5 throw ] [ 5 = ] must-fail-with

[ t ] [
    [ "Hello" throw ] ignore-errors
    error get-global
    "Hello" =
] unit-test

"!!! The following error is part of the test" print

[ ] [ [ 6 [ 12 [ "2 car" ] ] ] print-error ] unit-test

"!!! The following error is part of the test" print

[ ] [ [ [ "2 car" ] eval ] try ] unit-test

[ f throw ] must-fail

! Weird PowerPC bug.
[ ] [
    [ "4" throw ] ignore-errors
    gc
    gc
] unit-test

! ! See how well callstack overflow is handled
! [ clear drop ] must-fail
! 
! : callstack-overflow callstack-overflow f ;
! [ callstack-overflow ] must-fail

: don't-compile-me ( -- ) ;
: foo ( -- ) callstack "c" set don't-compile-me ;
: bar ( -- a b ) 1 foo 2 ;

<< { don't-compile-me foo bar } [ t "no-compile" set-word-prop ] each >>

[ 1 2 ] [ bar ] unit-test

[ t ] [ \ bar def>> "c" get innermost-frame-executing = ] unit-test

[ 1 ] [ "c" get innermost-frame-scan ] unit-test

SYMBOL: always-counter
SYMBOL: error-counter

[
    0 always-counter set
    0 error-counter set

    [ ] [ always-counter inc ] [ error-counter inc ] cleanup

    [ 1 ] [ always-counter get ] unit-test
    [ 0 ] [ error-counter get ] unit-test

    [
        [ "a" throw ]
        [ always-counter inc ]
        [ error-counter inc ] cleanup
    ] [ "a" = ] must-fail-with

    [ 2 ] [ always-counter get ] unit-test
    [ 1 ] [ error-counter get ] unit-test

    [
{'fraction_non_alphanumeric': 0.14507406536562426, 'fraction_numerical': 0.016458970138725604, 'mean_word_length': 2.2276176024279213, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3861215', 'n_tokens_mistral': 1548, 'n_tokens_neox': 1481, 'n_words': 435}