diff --git a/moo/kernel/test-001.moo b/moo/kernel/test-001.moo index 981011f..8bdc47e 100644 --- a/moo/kernel/test-001.moo +++ b/moo/kernel/test-001.moo @@ -1,68 +1,174 @@ - +## TODO: use this file as a regress testing source. +## rename it to test-001.moo and use it as a test case file. #include 'Moo.moo'. -################################################################# -## MAIN -################################################################# -## TODO: use #define to define a class or use #class to define a class. -## use #extend to extend a class -## using #class for both feels confusing. - -extend Apex +class MyObject(Object) { - } -extend SmallInteger +class MyObject.Donkey (MyObject) { - method getTrue: anInteger - { - ^anInteger + 9999. - } - - method inc - { - ^self + 1. - } + var(#class) Cat := MyObject, Party := 5555, X := 'test string'. + + method(#class) v { ^901982 } } -class TestObject(Object) +pooldic MyObject.Code { - var(#class) Q, R. - var(#classinst) a1, a2. + FAST := 20. + FASTER := 40. + FASTER2X := self.FASTER. + FASTER3X := #(self.FAST self.FASTER self.FASTER2X #(MyObject.Donkey selfns.Donkey self.FAST FASTER) FASTER2X). } - -class MyObject(TestObject) +class MyObject.Donkey.Party (MyObject.Donkey) { - var(#classinst) t1, t2. - method(#class) xxxx - { - | g1 g2 | - t1 dump. - t2 := [ g1 := 50. g2 := 100. ^g1 + g2 ]. - (t1 < 100) ifFalse: [ ^self ]. - t1 := t1 + 1. - ^self xxxx. - } +} - method(#class) zzz - { - 'zzzzzzzzzzzzzzzzzz' dump. - ^self. - } - method(#class) yyy - { - ^[123456789 dump. ^200]. - } +class MyObject.Donkey.Party.Party (MyObject.Donkey) +{ +} + +extend MyObject.Donkey.Party +{ + method(#class) party1 { ^Party } + method(#class) party2 { ^selfns.Party } + method(#class) party3 { ^self.Party } + method(#class) party4 { ^selfns.Party.Party } + + method(#class) cat1 { ^Cat } + method(#class) code1 { ^MyObject.Code } +} + +class MyObject.System.Donkey (MyObject) +{ + var t1, t2. + method t1 { ^t1 } + method(#class) v { ^89123 } +} + +class MyObject.System.Horse (Donkey) +{ + method(#class) myns1 { ^selfns } + method(#class) myns2 { [^selfns] value } + + method(#class) donkey1 { ^Donkey } + method(#class) donkey2 { ^selfns.Donkey } ## should return same as MyObject.System.Donkey + method(#class) donkey3 { ^MyObject.Donkey } + + method(#class) horse1 { ^Horse } + method(#class) horse2 { ^selfns.Horse } +} + +pooldic XX +{ + Horse := MyObject.System.Horse. + Party := MyObject.Donkey.Party. + AAAA := 'AAAAAAAAAAAAAAAAAAAAAAAAA'. + FFFF := 'FFFFFFFFFFFFFFFFFFFFFFFFF'. +} + +class MyObject.System.System (selfns.Donkey) +{ + var(#classinst,#get,#set) a, b, c. + var(#get) ii := 0, jj := 0. +} +class MyObject.System.System.System (MyObject.System.System) +{ + var(#classinst,#get) d, dd, ddd. + var(#class,#get) KING := #KING. +} + +class MyObject.System.System.System.System (MyObject.System.System.System) +{ + var(#classinst,#get) e, f := XX.FFFF. + var(#get) kk := #KK. +} + +class MyObject.System.Stallion (selfns.Donkey) +{ + import System.XX. + + var(#set,#get) x := MyObject.Code.FASTER3X, rvd. + var yyy. + var(#set,#get) zebra, qatar := MyObject.Code.FASTER2X. + + + method(#class) party { ^Party } + method(#class) system1 { ^System } ## Single word. can be looked up in the current workspace. + method(#class) system2 { ^System.System } ## Dotted. The search begins at the top. +} + +extend MyObject +{ +## TODO: support import in extend?? method(#class) main { - 'START OF MAIN' dump. - ['1111111' dump. '111111111' dump. '22222222222' dump. - '3333333' dump. '444444444' dump. '55555555555' dump] newProcess resume. - 'EDN OF MAIN' dump. - } + | tc limit | + + tc := #{ + ## 0 - 4 + [MyObject.Donkey v == 901982], + [selfns.MyObject.Donkey v == 901982], + [MyObject.System.Donkey v == 89123], + [MyObject.System.Horse v == 89123], + [selfns.MyObject.System.Donkey v == 89123], + + ## 5 - 9 + [MyObject.System.Horse donkey1 == MyObject.System.Donkey], + [MyObject.System.Horse donkey2 == MyObject.System.Donkey], + [MyObject.System.Horse donkey2 v == 89123], + [MyObject.System.Horse donkey3 v == 901982], + [MyObject.System.Horse horse1 == MyObject.System.Horse], + + ## 10 - 14 + [MyObject.System.Horse horse2 == MyObject.System.Horse], + [MyObject.System.Horse superclass == MyObject.System.Donkey], + [MyObject.System.Donkey superclass == MyObject], + [selfns == System nsdic], + [MyObject.System.Horse myns1 == MyObject.System], + + ## 15 - 19 + [MyObject.System.Horse myns2 == MyObject.System], + [MyObject.System == self.System], + [MyObject.System.Donkey == self.System.Donkey], + [MyObject.System.Stallion superclass == self.System.Donkey], + [MyObject.Donkey.Party party1 == 5555], + + ## 20 - 24 + [MyObject.Donkey.Party party2 == MyObject.Donkey.Party], + [MyObject.Donkey.Party party3 == 5555], + [MyObject.Donkey.Party party4 == MyObject.Donkey.Party.Party], + [MyObject.Donkey.Party cat1 == MyObject], + [MyObject.Code.FASTER2X == 40], + + ## 25 - 29 + [MyObject.Code.FASTER2X == MyObject.Code.FASTER], + [((MyObject.Code.FASTER3X at: 3) at: 1) == MyObject.Donkey], + [MyObject.System.Stallion new x == MyObject.Code.FASTER3X], + [MyObject.System.Stallion party == MyObject.Donkey.Party], + [MyObject.System.Stallion system1 == MyObject.System.System], + + ## 30 - 34 + [MyObject.System.Stallion system2 == System.System], + [MyObject.System.System.System.System f == XX.FFFF], + [MyObject.System.System a == XX.AAAA], + [MyObject.System.System.System.System a == nil] , + [MyObject.System.System.System.System new kk == #KK], + + ## 35 - 39 + [MyObject.System.System.System KING == #KING] + }. + limit := tc size. + MyObject.System.System a: XX.AAAA. + + 0 priorTo: limit by: 1 do: [ :idx | + | tb | + tb := tc at: idx. + System log(System.Log.INFO, idx asString, (if (tb value) { ' PASS' } else { ' FAIL' }), S'\n'). + ] + } } diff --git a/moo/kernel/test-002.moo b/moo/kernel/test-002.moo index 4376134..9e95e58 100644 --- a/moo/kernel/test-002.moo +++ b/moo/kernel/test-002.moo @@ -5,83 +5,33 @@ ## MAIN ################################################################# -## TODO: use #define to define a class or use #class to define a class. -## use #extend to extend a class -## using #class for both feels confusing. - -extend Apex +class MyObject(Object) { + var(#class) a := 100. -} - -extend SmallInteger -{ - method getTrue: anInteger + method(#class) proc1 { - ^anInteger + 9999. - } - - method inc - { - ^self + 1. - } -} - -class TestObject(Object) -{ - var(#class) Q, R. - var(#classinst) a1, a2. -} - - -class MyObject(TestObject) -{ - var(#classinst) t1, t2. - method(#class) xxxx - { - | g1 g2 | - t1 dump. - t2 := [ g1 := 50. g2 := 100. ^g1 + g2 ]. - (t1 < 100) ifFalse: [ ^self ]. - t1 := t1 + 1. - ^self xxxx. - } - - method(#class) zzz - { - 'zzzzzzzzzzzzzzzzzz' dump. - ^self. - } - method(#class) yyy - { - ^[123456789 dump. ^200]. - } - - method(#class) main2 - { - 'START OF MAIN2' dump. - ##[thisContext dump. ^100] newProcess resume. - [ |k| thisContext dump. self zzz. "k := self yyy. k value." ['ok' dump. ^100] value] newProcess resume. - '1111' dump. - '1111' dump. - '1111' dump. - '1111' dump. - '1111' dump. - 'EDN OF MAIN2' dump. - } - - method(#class) main1 - { - 'START OF MAIN1' dump. - self main2. - 'END OF MAIN1' dump. + [ Processor sleepFor: 1. a := a + 100 ] newProcess resume. + ^a } method(#class) main { - 'START OF MAIN' dump. - self main1. - 'EDN OF MAIN' dump. + | tc limit | + + tc := #{ + ## 0 - 4 + [ self proc1 == 100 ], + [ Processor sleepFor: 2. self proc1 == 200 ] + }. + + limit := tc size. + + 0 priorTo: limit by: 1 do: [ :idx | + | tb | + tb := tc at: idx. + System log(System.Log.INFO, idx asString, (if (tb value) { ' PASS' } else { ' FAIL' }), S'\n'). + ] } }