IN: python
: py-test ( result quot -- )
- '[ _ with-destructors ] unit-test ; inline
+ '[ python-dll-loaded? [ _ [ _ with-destructors ] unit-test ] when ] call ; inline
! None testing
{ t } [
"sys" py-import "getrefcount" getattr
<none> <1py-tuple> call-object py>
] with-destructors ;
+
{ t } [
! For some reason, the count increased by one the first time.
count-none-refs drop
count-none-refs count-none-refs =
-] unit-test
+] py-test
{ } [ { f f f } >py drop ] py-test
{ } [ 123 <alien> unsteal-ref ] unit-test
-{ t } [ Py_GetVersion string? ] unit-test
+{ t } [ Py_GetVersion string? ] py-test
[ "os" ] [ "os" py-import PyModule_GetName ] py-test
-[ t ] [
+{ t } [
"os" py-import "getpid" getattr
{ } >py call-object py> 0 >
] py-test
-[ t ] [ Py_IsInitialized ] py-test
+{ t } [ Py_IsInitialized ] py-test
! py-importing
[ { "ImportError" "No module named kolobi" f } ] [
] py-test
! setattr
-[ 73 ] [
+{ 73 } [
"sys" py-import "testit" [ 73 >py setattr ] [ getattr py> ] 2bi
] py-test
! Tuples
-[ 2 ] [ 2 <py-tuple> py-tuple-size ] py-test
+{ 2 } [ 2 <py-tuple> py-tuple-size ] py-test
: py-datepy> ( py-obj -- timestamp )
{ "year" "month" "day" } [ getattr py> ] with map
first3 0 0 0 instant <timestamp> ;
! Lists
-[ t ] [ V{ 4 8 15 16 23 42 } dup >py py> = ] py-test
+{ t } [ V{ 4 8 15 16 23 42 } dup >py py> = ] py-test
! ! Datetimes
-[ t ] [
+{ t } [
[ py-datepy> ] "date" py-type-dispatch get set-at
"datetime" py-import "date" getattr "today" getattr
{ } >py call-object py>
] py-test
! Unicode
-[ "غثههح" ] [
+{ "غثههح" } [
"os.path" py-import "basename" getattr { "غثههح" } >py call-object py>
] py-test
! Instance variables
-[ 7 ] [
+{ 7 } [
"datetime" py-import "timedelta" getattr
{ 7 } >py call-object "days" getattr py>
] py-test
! Create a dictonary
-[ 0 ] [ <py-dict> py-dict-size ] py-test
+{ 0 } [ <py-dict> py-dict-size ] py-test
! Dictionary with object keys
-[ 1 ] [
+{ 1 } [
<py-dict> dup 0 >py 33 >py py-dict-set-item py-dict-size
] py-test
! Dictionary with string keys
-[ 1 ] [
+{ 1 } [
<py-dict> [ "foo" 33 >py py-dict-set-item-string ] [ py-dict-size ] bi
] py-test
! Get dictionary items
-[ 33 ] [
+{ 33 } [
<py-dict> "tjaba"
[ 33 >py py-dict-set-item-string ]
[ py-dict-get-item-string py> ] 2bi
] py-test
! Nest dicts
-[ 0 ] [
+{ 0 } [
<py-dict> "foo"
[ <py-dict> py-dict-set-item-string ]
[ py-dict-get-item-string ] 2bi
] py-test
! Nested tuples
-[ 3 ] [
+{ 3 } [
1 <py-tuple> dup 0 3 <py-tuple> py-tuple-set-item
0 py-tuple-get-item py-tuple-size
] py-test
! Round tripping!
-[ { "foo" { 99 77 } } ] [ { "foo" { 99 77 } } >py py> ] py-test
+{ { "foo" { 99 77 } } }
+[ { "foo" { 99 77 } } >py py> ] py-test
-[ H{ { "foo" "bar" } { 3 4 } } ] [
+{ H{ { "foo" "bar" } { 3 4 } } } [
H{ { "foo" "bar" } { 3 4 } } >py py>
] py-test
! Kwargs
-[ 2014 10 22 ] [
+{ 2014 10 22 } [
"datetime" py-import "date" getattr
{ } >py H{ { "year" 2014 } { "month" 10 } { "day" 22 } } >py
call-object-full py>
] py-test
! Modules
-[ t ] [
+{ t } [
"os" py-import PyModule_GetDict dup Py_IncRef &Py_DecRef py-dict-size 100 >
] py-test
IN: python.syntax.tests
: py-test ( result quot -- )
- '[ _ with-destructors ] unit-test ; inline
+ '[ python-dll-loaded? [ _ [ _ with-destructors ] unit-test ] when ] call ; inline
+
+: long-py-test ( result quot -- )
+ '[ python-dll-loaded? [ _ [ _ with-destructors ] long-unit-test ] when ] call ; inline
{ t } [ getpid py> integer? ] py-test
[ ] [ 0 >py sleep ] py-test
! Module variables are bound as zero-arg functions
-[ t ] [ $path py> s:sequence? ] py-test
+{ t } [ $path py> s:sequence? ] py-test
-[ t ] [ $path len int py> 5 > ] py-test
+{ t } [ $path len int py> 5 > ] py-test
[ 10 ] [ 10 >py range len py> ] py-test
! Callables
-[ t ] [
+{ t } [
"os" py-import "getpid" getattr
[ callable ] [ PyCallable_Check 1 = ] bi and
] py-test
! Reference counting
-[ 1 ] [ 3 <py-tuple> getrefcount py> ] py-test
+{ 1 } [ 3 <py-tuple> getrefcount py> ] py-test
-[ -1 ] [
+{ -1 } [
H{ { "foo" 33 } { "bar" 44 } } >py
[ "foo" py-dict-get-item-string getrefcount py> ]
[
[ "foo" py-dict-get-item-string getrefcount py> ] tri -
] py-test
-[ -1 ] [
+{ -1 } [
"abcd" >py <1py-tuple>
[ 0 py-tuple-get-item getrefcount py> ]
[
[ always-destructors get [ alien>> = ] with s:count ] bi =
] py-test
-[ t ] [
+{ t } [
"python-file" temp-file >py "wb" >py open
[ tell ] [ fileno ] [ close ] tri
[ py> integer? ] both?
] py-test
! Method chaining
-[ t ] [
+{ t } [
"hello there" >py title 20 >py zfill "00" >py startswith py>
] py-test
PY-METHODS: code =>
co_argcount ( code -- n ) ;
-[ 1 ] [ $splitext $func_code $co_argcount py> ] py-test
+{ 1 } [ $splitext $func_code $co_argcount py> ] py-test
! Change sys.path
-[ t ] [
+{ t } [
$path "test" >py [ append ] [ drop py> ] [ remove ] 2tri
"test" swap in?
] py-test
] py-test
! Kwargs in methods
-[ t ] [
+{ t } [
[
ArgumentParser dup
"--foo" >py H{ { "help" "badger" } } >py add_argument
100000 [
[ [ 987 >py basename drop ] ignore-errors ] with-destructors
] times
-] long-unit-test
+] long-py-test
! Another leaky test
{ } [
1000000 [
[ { 9 8 7 6 5 4 3 2 1 } >py ] with-destructors drop
] times
-] long-unit-test
+] long-py-test
! Working with types
PY-QUALIFIED-FROM: types => UnicodeType ( -- ) ;