moo/stix/kernel/test-010.st
2016-06-03 16:16:23 +00:00

193 lines
2.9 KiB
Smalltalk

#include 'Stix.st'.
#################################################################
## 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
{
}
#extend SmallInteger
{
#method getTrue: anInteger
{
^anInteger + 9999.
}
#method inc
{
^self + 1.
}
}
#class TestObject(Object)
{
#dcl(#class) Q R.
#dcl(#classinst) a1 a2.
#method test999
{
^self.Q
}
}
#class B.TestObject(Object)
{
#dcl(#class) Q R.
#dcl(#classinst) a1 a2.
#method test000
{
^self.Q
}
}
#pooldic ABC
{
#KKK := 20.
}
#class MyObject(TestObject)
{
#method(#class) main111
{
| s3 |
s3 := Semaphore new.
Processor signal: s3 after: 1 and: 50.
s3 wait.
'END OF MAIN' dump.
}
#method(#class) main
{
|t1 t2 s1 s2 s3|
'START OF MAIN' dump.
s1 := Semaphore new.
s2 := Semaphore forMutualExclusion.
t1 := [
##1000 timesRepeat: ['BLOCK #1' dump].
s2 critical: [
10000 timesRepeat: ['BLOCK #1' dump ].
Exception signal: 'Raised Exception at process t1'.
]
] newProcess.
t2 := [
##1000 timesRepeat: ['BLOCK #2' dump].
s2 critical: [
10000 timesRepeat: ['BLOCK #2' dump. ]
].
s1 signal.
] newProcess.
t1 resume.
t2 resume.
s1 wait.
ABC.KKK dump.
'END OF MAIN' dump.
"
|s1|
s1 := Semaphore new.
s1 signal.
'XXXXXXXXXXXXXXXX' dump.
s1 wait.
"
"
| v1 |
'START OF MAIN' dump.
##[1 xxx] ifCurtailed: ['XXXXXXXX CURTAILED XXXXXXXXX' dump].
##['ENSURE TEST' dump] ensure: ['XXXXXXXXX ENSURE XXXXXXXXXXXXXx' dump].
v1 := [ ['kkk' dump.] ensure: ['XXXXXXXXX ENSURE XXXXXXXXXXXXXx' dump. 30] ] on: Exception do: [:ex | 'EXCEPTION OUTSIDE ENSURE...' dump. ].
v1 dump.
'END OF MAIN' dump."
}
#method(#class) main22222
{
|t1 t2 s1 s2 s3|
'START OF MAIN' dump.
s1 := Semaphore new.
s2 := Semaphore new.
s3 := Semaphore new.
t1 := [
10 timesRepeat: ['BLOCK #1' dump. Processor activeProcess sleep: 1.].
s1 signal
] newProcess.
t2 := [
5 timesRepeat: ['BLOCK #2' dump. "Processor activeProcess sleep: 1." ].
'SIGNALLING S2...' dump. s2 signal.
] newProcess.
t1 resume.
t2 resume.
Processor signal: s3 after: 10.
'STARTED t1 and t2' dump.
s2 wait.
's2 WAITED....' dump.
s1 wait.
's1 WAITED....' dump.
'WAITING ON S3...' dump.
##Processor unsignal: s3.
s3 wait.
10 timesRepeat: ['WAITED t1 and t2' dump].
'END OF MAIN' dump.
}
#method(#class) test_semaphore_heap
{
| sempq a |
sempq := SemaphoreHeap new.
'--------------------------' dump.
1 to: 200 by: 1 do: [ :i |
| sem |
sem := Semaphore new.
sem fireTime: (200 - i).
sempq insert: sem
].
'--------------------------' dump.
sempq deleteAt: 40.
sempq deleteAt: 50.
[sempq size > 0] whileTrue: [
| sem |
sem := sempq popTop.
sem fireTime dump.
]
}
}