seqlings 3.0.7

Interactive exercises for learning Seq, a stack-based programming language
: is-success? ( Int -- Bool )
    dup 200 i.>= swap 300 i.< and
;

: is-client-error? ( Int -- Bool )
    dup 400 i.>= swap 500 i.< and
;

: is-server-error? ( Int -- Bool )
    dup 500 i.>= swap 600 i.< and
;

: describe-status ( Int -- String )
    dup is-success? if
        drop "success"
    else
        dup is-client-error? if
            drop "client-error"
        else
            is-server-error? if
                "server-error"
            else
                "unknown"
            then
        then
    then
;

: test-errors ( -- )
    200 is-success? test.assert
    201 is-success? test.assert
    299 is-success? test.assert
    300 is-success? not test.assert

    400 is-client-error? test.assert
    404 is-client-error? test.assert
    499 is-client-error? test.assert
    500 is-client-error? not test.assert

    500 is-server-error? test.assert
    503 is-server-error? test.assert
    599 is-server-error? test.assert
    600 is-server-error? not test.assert

    200 describe-status "success" test.assert-eq
    404 describe-status "client-error" test.assert-eq
    500 describe-status "server-error" test.assert-eq
    100 describe-status "unknown" test.assert-eq
;