partly broken smalltalk impl
This commit is contained in:
parent
5d27e61528
commit
5a60f7842c
5 changed files with 207 additions and 0 deletions
9
lab2/zad3/package.xml
Normal file
9
lab2/zad3/package.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<package>
|
||||||
|
<name>GF</name>
|
||||||
|
<namespace>GF</namespace>
|
||||||
|
<test>
|
||||||
|
<filein>test/Test.st</filein>
|
||||||
|
</test>
|
||||||
|
<filein>src/GF.st</filein>
|
||||||
|
<filein>src/main.st</filein>
|
||||||
|
</package>
|
1
lab2/zad3/run.st
Normal file
1
lab2/zad3/run.st
Normal file
|
@ -0,0 +1 @@
|
||||||
|
PackageLoader fileInPackage: #GF.
|
115
lab2/zad3/src/GF.st
Normal file
115
lab2/zad3/src/GF.st
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
Object subclass: GF [
|
||||||
|
| characteristic value |
|
||||||
|
|
||||||
|
GF class >> create: newCharacteristic [
|
||||||
|
^self new initialize: newCharacteristic
|
||||||
|
withValue: 0;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
GF class >> create: newCharacteristic withValue: newValue [
|
||||||
|
^self new initialize: newCharacteristic
|
||||||
|
withValue: newValue;
|
||||||
|
yourself
|
||||||
|
]
|
||||||
|
|
||||||
|
initialize: newCharacteristic withValue: newValue [
|
||||||
|
characteristic := newCharacteristic.
|
||||||
|
value := newValue.
|
||||||
|
]
|
||||||
|
|
||||||
|
verifyCharacteristics: rhs [
|
||||||
|
(characteristic ~= rhs characteristic)
|
||||||
|
ifTrue: [Error signal: 'both arguments must have the same characteristic']
|
||||||
|
]
|
||||||
|
|
||||||
|
+ rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^GF create: characteristic
|
||||||
|
withValue: ((value + rhs value) \\ characteristic)
|
||||||
|
]
|
||||||
|
|
||||||
|
- rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
"^GF create: characteristic
|
||||||
|
withValue: ((value < (rhs value))
|
||||||
|
ifTrue: [ ^(characteristic - ((rhs value) - value)) ]
|
||||||
|
ifFalse: [ ^(value - (rhs value)) ])"
|
||||||
|
(value < (rhs value))
|
||||||
|
ifTrue: [
|
||||||
|
^GF create: characteristic
|
||||||
|
withValue: (characteristic - ((rhs value) - value))
|
||||||
|
]
|
||||||
|
ifFalse: [
|
||||||
|
^GF create: characteristic
|
||||||
|
withvalue: (value - (rhs value))
|
||||||
|
].
|
||||||
|
]
|
||||||
|
|
||||||
|
* rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^GF create: characteristic
|
||||||
|
withValue: ((value * rhs value) \\ characteristic)
|
||||||
|
]
|
||||||
|
|
||||||
|
/ rhs [
|
||||||
|
| inverse |
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
(rhs value = 0) ifTrue: [ZeroDivide signal: 'division by 0 is illegal'].
|
||||||
|
|
||||||
|
1 to: (characteristic - 1) do: [ :i |
|
||||||
|
(((rhs value * i) \\ characteristic) = 1) ifTrue: [
|
||||||
|
inverse := i.
|
||||||
|
]
|
||||||
|
].
|
||||||
|
|
||||||
|
^GF create: characteristic
|
||||||
|
withValue: ((value * inverse) \\ characteristic)
|
||||||
|
]
|
||||||
|
|
||||||
|
= rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value = rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
~= rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value ~= rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
> rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value > rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
< rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value < rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
>= rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value >= rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
<= rhs [
|
||||||
|
self verifyCharacteristics: rhs.
|
||||||
|
^value <= rhs value
|
||||||
|
]
|
||||||
|
|
||||||
|
characteristic [
|
||||||
|
^characteristic
|
||||||
|
]
|
||||||
|
|
||||||
|
value [
|
||||||
|
^value
|
||||||
|
]
|
||||||
|
|
||||||
|
displayOn: stream [
|
||||||
|
'GF<' displayOn: stream.
|
||||||
|
characteristic displayOn: stream.
|
||||||
|
'>(' displayOn: stream.
|
||||||
|
value displayOn: stream.
|
||||||
|
')' displayOn: stream.
|
||||||
|
]
|
||||||
|
]
|
32
lab2/zad3/src/main.st
Normal file
32
lab2/zad3/src/main.st
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
FileStream fileIn: 'src/GF.st'.
|
||||||
|
|
||||||
|
a := GF create: 1234577 withValue: ((stdin nextLine) asInteger).
|
||||||
|
b := GF create: 1234577 withValue: ((stdin nextLine) asInteger).
|
||||||
|
|
||||||
|
a displayOn: stdout.
|
||||||
|
' + ' displayOn: stdout.
|
||||||
|
b displayOn: stdout.
|
||||||
|
' = ' displayOn: stdout.
|
||||||
|
(a + b) displayOn: stdout.
|
||||||
|
'' displayNl.
|
||||||
|
|
||||||
|
a displayOn: stdout.
|
||||||
|
' - ' displayOn: stdout.
|
||||||
|
b displayOn: stdout.
|
||||||
|
' = ' displayOn: stdout.
|
||||||
|
(a - b) displayOn: stdout.
|
||||||
|
'' displayNl.
|
||||||
|
|
||||||
|
a displayOn: stdout.
|
||||||
|
' * ' displayOn: stdout.
|
||||||
|
b displayOn: stdout.
|
||||||
|
' = ' displayOn: stdout.
|
||||||
|
(a * b) displayOn: stdout.
|
||||||
|
'' displayNl.
|
||||||
|
|
||||||
|
a displayOn: stdout.
|
||||||
|
' / ' displayOn: stdout.
|
||||||
|
b displayOn: stdout.
|
||||||
|
' = ' displayOn: stdout.
|
||||||
|
(a / b) displayOn: stdout.
|
||||||
|
'' displayNl.
|
50
lab2/zad3/test/Test.st
Normal file
50
lab2/zad3/test/Test.st
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
FileStream fileIn: 'src/GF.st'.
|
||||||
|
|
||||||
|
a := GF create: 5 withValue: 2.
|
||||||
|
b := GF create: 5 withValue: 4.
|
||||||
|
|
||||||
|
(a + b) = (GF create: 5 withValue: 1)
|
||||||
|
ifFalse: [self error: 'failed on the addition test!'].
|
||||||
|
|
||||||
|
(a - b) = (GF create: 5 withValue: 3)
|
||||||
|
ifFalse: [self error: 'failed on the subtraction test!'].
|
||||||
|
|
||||||
|
a := GF create: 6 withValue: 2.
|
||||||
|
b := GF create: 6 withValue: 4.
|
||||||
|
|
||||||
|
(a * b) = (GF create: 6 withValue: 2)
|
||||||
|
ifFalse: [self error: 'failed on the multiplication test!'].
|
||||||
|
|
||||||
|
a := GF create: 7 withValue: 2.
|
||||||
|
b := GF create: 7 withValue: 4.
|
||||||
|
|
||||||
|
(a / b) = (GF create: 7 withValue: 4)
|
||||||
|
ifFalse: [self error: 'failed on the division test!'].
|
||||||
|
|
||||||
|
a := GF create: 5 withValue: 2.
|
||||||
|
b := GF create: 5 withValue: 0.
|
||||||
|
|
||||||
|
exceptionRaised := false.
|
||||||
|
|
||||||
|
(a / b) on: ZeroDivide do: [ :sig |
|
||||||
|
exceptionRaised := true.
|
||||||
|
((sig errorString) = 'division by 0 is illegal')
|
||||||
|
ifFalse: [self error: 'division by 0 error string doesn''t match!'].
|
||||||
|
].
|
||||||
|
|
||||||
|
exceptionRaised
|
||||||
|
ifFalse: [self error: 'failed on the division by 0 test!'].
|
||||||
|
|
||||||
|
a := GF create: 10 withValue: 5.
|
||||||
|
b := GF create: 8 withValue: 5.
|
||||||
|
|
||||||
|
exceptionRaised := false.
|
||||||
|
|
||||||
|
(a + b) on: Error do: [ :sig |
|
||||||
|
exceptionRaised := true.
|
||||||
|
((sig errorString) = 'both arguments must have the same characteristic')
|
||||||
|
ifFalse: [self error: 'different characteristics error string doesn''t match!'].
|
||||||
|
].
|
||||||
|
|
||||||
|
exceptionRaised
|
||||||
|
ifFalse: [self error: 'failed on the different characteristics test!'].
|
Loading…
Reference in a new issue