VM Maker: VMMaker.oscog-nice.2916.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-nice.2916.mcz

commits-2
 
Nicolas Cellier uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-nice.2916.mcz

==================== Summary ====================

Name: VMMaker.oscog-nice.2916
Author: nice
Time: 2 January 2021, 6:36:37.586827 pm
UUID: 54320c7b-5fee-4999-8bf3-53731ca0f088
Ancestors: VMMaker.oscog-eem.2915

Save the slang tests provided by Pierre Misse in mailing list - as is.

Thanks Pierre!

=============== Diff against VMMaker.oscog-eem.2915 ===============

Item was added:
+ TestCase subclass: #SlangAbstractTestCase
+ instanceVariableNames: 'ccg'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangAbstractTestCase>>setUp (in category 'running') -----
+ setUp
+ super setUp.
+ ccg := CCodeGenerator new.
+ !

Item was added:
+ SlangAbstractTestCase subclass: #SlangBasicTypeInferenceTest
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!
+
+ !SlangBasicTypeInferenceTest commentStamp: '' prior: 0!
+ Basic tests for the type inference used in CCodeGenerator.
+ Support methods are in SlangTypeInferenceTestClass.
+ There is only one possible type by node, no ambiguities.
+
+ 1 Constant
+ test constantNode in a method.
+ tests are tailor made for the current TConstantNode >> #typeOrNilFrom:in:.
+
+ 2 Return-constant
+ test return a constant node in a method.
+ uses the previous categorie's values.
+
+ 3 Return-temp-assigned-constant
+ assign a temporary node with a constant
+ then returns the temporary variable in the next statement.
+
+ 4 Return-temp-assigned-message
+ assign a temporary node with a message
+ then returns the temporary variable in the next statement.
+
+ 5 Return-explicit-temp
+ returns a temporary typed by a pragma #var:type:.
+
+ 6 Return-explicit-arg
+ returns an argument typed by a pragma #var:type:.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>setUp (in category 'running') -----
+ setUp
+ super setUp.
+ ccg addClass: SlangBasicTypeInferenceTestClass.
+ ccg inferTypesForImplicitlyTypedVariablesAndMethods.
+ !

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testABigNegativeIntegerConstantNode (in category 'constant') -----
+ testABigNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aBigNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAFalseConstantNode (in category 'constant') -----
+ testAFalseConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aFalseConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAFloatConstantNode (in category 'constant') -----
+ testAFloatConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aFloatConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testANilConstantNode (in category 'constant') -----
+ testANilConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aNilConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testASmallNegativeIntegerConstantNode (in category 'constant') -----
+ testASmallNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aSmallNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAStringConstantNode (in category 'constant') -----
+ testAStringConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aStringConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testATrueConstantNode (in category 'constant') -----
+ testATrueConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #aTrueConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAnIntEqual32ConstantNode (in category 'constant') -----
+ testAnIntEqual32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #anIntEqual32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned int'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAnIntEqual64ConstantNode (in category 'constant') -----
+ testAnIntEqual64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #anIntEqual64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned long long'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAnIntGreater64ConstantNode (in category 'constant') -----
+ testAnIntGreater64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #anIntGreater64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testAnIntLess32ConstantNode (in category 'constant') -----
+ testAnIntLess32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #anIntLesser32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ !

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnABigNegativeIntegerConstantNode (in category 'return-constant') -----
+ testReturnABigNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnABigNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'.
+ self assert: tMethod returnType equals: #sqLong!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnABigNegativeIntegerMessageSend (in category 'return-message-send') -----
+ testReturnABigNegativeIntegerMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnABigNegativeIntegerMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqLong.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqLong.
+ self assert: tMethod returnType equals: #sqLong.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAFalseConstantNode (in category 'return-constant') -----
+ testReturnAFalseConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAFalseConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAFalseMessageSend (in category 'return-message-send') -----
+ testReturnAFalseMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAFalseMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAFloatMessageSend (in category 'return-message-send') -----
+ testReturnAFloatMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAFloatMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #double.
+ self assert: tMethod returnType equals: #double.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnANilConstantNode (in category 'return-constant') -----
+ testReturnANilConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnANilConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnANilMessageSend (in category 'return-message-send') -----
+ testReturnANilMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnANilMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnASmallNegativeIntegerConstantNode (in category 'return-constant') -----
+ testReturnASmallNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnASmallNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnASmallNegativeIntegerMessageSend (in category 'return-message-send') -----
+ testReturnASmallNegativeIntegerMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnASmallNegativeIntegerMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAStringConstantNode (in category 'return-constant') -----
+ testReturnAStringConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAStringConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'.
+ self assert: tMethod returnType equals: #'char *'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAStringMessageSend (in category 'return-message-send') -----
+ testReturnAStringMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAStringMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #'char *'.
+ self assert: tMethod returnType equals: #'char *'.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnATrueConstantNode (in category 'return-constant') -----
+ testReturnATrueConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnATrueConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnATrueMessageSend (in category 'return-message-send') -----
+ testReturnATrueMessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnATrueMessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntEqual32ConstantNode (in category 'return-constant') -----
+ testReturnAnIntEqual32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntEqual32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned int'.
+ self assert: tMethod returnType equals: #sqInt
+ "returning an integer constants is the same as returning nothing"
+ "this therefore return a sqInt"
+ "see start of the CCodeGenerator >> harmonizeReturnTypesIn: method"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntEqual32MessageSend (in category 'return-message-send') -----
+ testReturnAnIntEqual32MessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntEqual32MessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.
+ "the method return type is sqint, so it's coherent, see testReturnAnIntEqual32MessageSend"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntEqual64ConstantNode (in category 'return-constant') -----
+ testReturnAnIntEqual64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntEqual64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned long long'.
+ self assert: tMethod returnType equals: #sqInt
+ "returning an integer constants is the same as returning nothing"
+ "this therefore return a sqInt"
+ "see start of the CCodeGenerator >> harmonizeReturnTypesIn: method"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntEqual64MessageSend (in category 'return-message-send') -----
+ testReturnAnIntEqual64MessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntEqual64MessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.
+ "the method return type is sqint, so it's coherent, see testReturnAnIntEqual64MessageSend"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntGreater64ConstantNode (in category 'return-constant') -----
+ testReturnAnIntGreater64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntGreater64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'.
+ self assert: tMethod returnType equals: #sqInt
+ "returning an integer constants is the same as returning nothing"
+ "this therefore return a sqInt"
+ "see start of the CCodeGenerator >> harmonizeReturnTypesIn: method"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntGreater64MessageSend (in category 'return-message-send') -----
+ testReturnAnIntGreater64MessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntGreater64MessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.
+ "the method return type is sqint, so it's coherent, see testReturnAnIntGreater64MessageSend"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntLess32ConstantNode (in category 'return-constant') -----
+ testReturnAnIntLess32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntLesser32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt
+ "returning constants is the same as returning nothing"
+ "this therefore return a sqInt"
+ "see start of the CCodeGenerator >> harmonizeReturnTypesIn: method"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnAnIntLesser32MessageSend (in category 'return-message-send') -----
+ testReturnAnIntLesser32MessageSend
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAnIntLesser32MessageSend.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.
+ "the method return type is sqint, so it's coherent, see testReturnAnIntLesser64MessageSend"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgDouble (in category 'return-explicit-arg') -----
+ testReturnExplicitArgDouble
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgDouble:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double.
+ self assert: tMethod returnType equals: #double!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgFloat (in category 'return-explicit-arg') -----
+ testReturnExplicitArgFloat
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgFloat:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #float.
+ self assert: tMethod returnType equals: #float!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgInt (in category 'return-explicit-arg') -----
+ testReturnExplicitArgInt
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgInt:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgLongLong (in category 'return-explicit-arg') -----
+ testReturnExplicitArgLongLong
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgLongLong:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'.
+ self assert: tMethod returnType equals: #sqLong!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgRandom (in category 'return-explicit-arg') -----
+ testReturnExplicitArgRandom
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgRandom:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #completelyRandom.
+ self assert: tMethod returnType equals: #completelyRandom!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgString (in category 'return-explicit-arg') -----
+ testReturnExplicitArgString
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgString:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'.
+ self assert: tMethod returnType equals: #'char *'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgUnsignedInt (in category 'return-explicit-arg') -----
+ testReturnExplicitArgUnsignedInt
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgUnsignedInt:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned int'.
+ self assert: tMethod returnType equals: #usqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitArgUnsignedLongLong (in category 'return-explicit-arg') -----
+ testReturnExplicitArgUnsignedLongLong
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitArgUnsignedLongLong:.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned long long'.
+ self assert: tMethod returnType equals: #usqLong!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempDouble (in category 'return-explicit-temp') -----
+ testReturnExplicitTempDouble
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempDouble.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double.
+ self assert: tMethod returnType equals: #double!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempFloat (in category 'return-explicit-temp') -----
+ testReturnExplicitTempFloat
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempFloat.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #float.
+ self assert: tMethod returnType equals: #float!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempInt (in category 'return-explicit-temp') -----
+ testReturnExplicitTempInt
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempInt.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int.
+ self assert: tMethod returnType equals: #sqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempLongLong (in category 'return-explicit-temp') -----
+ testReturnExplicitTempLongLong
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempLongLong.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'.
+ self assert: tMethod returnType equals: #sqLong!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempRandom (in category 'return-explicit-temp') -----
+ testReturnExplicitTempRandom
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempRandom.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #completelyRandom.
+ self assert: tMethod returnType equals: #completelyRandom!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempString (in category 'return-explicit-temp') -----
+ testReturnExplicitTempString
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempString.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'.
+ self assert: tMethod returnType equals: #'char *'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempUnsignedInt (in category 'return-explicit-temp') -----
+ testReturnExplicitTempUnsignedInt
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempUnsignedInt.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned int'.
+ self assert: tMethod returnType equals: #usqInt!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnExplicitTempUnsignedLongLong (in category 'return-explicit-temp') -----
+ testReturnExplicitTempUnsignedLongLong
+ | tMethod |
+ tMethod := ccg methodNamed: #returnExplicitTempUnsignedLongLong.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned long long'.
+ self assert: tMethod returnType equals: #usqLong!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnFloatConstantNode (in category 'return-constant') -----
+ testReturnFloatConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnAFloatConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double.
+ self assert: tMethod returnType equals: #double
+ !

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempBigNegativeIntegerConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempBigNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempBigNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #'long long'. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion, shouldn't it be a sqLong?"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempBigNegativeIntegerMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempBigNegativeIntegerMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempBigNegativeIntegerMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqLong.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqLong.
+ self assert: tMethod returnType equals: #sqLong.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempFalseConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempFalseConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempFalseConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #int. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempFalseMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempFalseMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempFalseMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempFloatConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempFloatConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempFloatConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #double. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "type lost"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempFloatMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempFloatMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempFloatMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #double.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "wait what"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntEqual32ConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempIntEqual32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntEqual32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned int'. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #'unsigned int'. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntEqual32MessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempIntEqual32MessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntEqual32MessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntEqual64ConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempIntEqual64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntEqual64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'unsigned long long'. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #'unsigned long long'. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion, shouldn't it at least be an sqLong? or better, an uSqLong"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntEqual64MessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempIntEqual64MessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntEqual64MessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntGreater64ConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempIntGreater64ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntGreater64ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'long long'. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #'long long'. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion, shouldn't it be at least an sqLong?"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntGreater64MessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempIntGreater64MessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntGreater64MessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntLesser32ConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempIntLesser32ConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntLesser32ConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #int. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempIntLesser32MessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempIntLesser32MessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempIntLesser32MessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempNilConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempNilConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempNilConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #int. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempNilMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempNilMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempNilMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempSmallNegativeIntegerConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempSmallNegativeIntegerConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempSmallNegativeIntegerConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #int. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "unexpected type conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempSmallNegativeIntegerMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempSmallNegativeIntegerMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempSmallNegativeIntegerMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempStringConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempStringConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempStringConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #'char *'. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "type lost"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempStringMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempStringMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempStringMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'char *'.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #'char *'.
+ self assert: tMethod returnType equals: #'char *'.!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempTrueConstantNode (in category 'return-temp-assigned-const') -----
+ testReturnTempTrueConstantNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempTrueConstantNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int. " assignementNode "
+ self assert: (ccg typeFor: tMethod statements first value in: tMethod) equals: #int. " value, constantNode "
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt. " variable, temporaryNode "
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false "Unexpected conversion"!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTest>>testReturnTempTrueMessageNode (in category 'return-temp-assigned-message') -----
+ testReturnTempTrueMessageNode
+ | tMethod |
+ tMethod := ccg methodNamed: #returnTempTrueMessageNode.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt.
+ self assert: (ccg typeFor: tMethod statements first variable in: tMethod) equals: #sqInt.
+ self assert: tMethod returnType equals: #sqInt.!

Item was added:
+ InterpreterPlugin subclass: #SlangBasicTypeInferenceTestClass
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aBigNegativeIntegerConstantNode (in category 'constant') -----
+ aBigNegativeIntegerConstantNode
+ "SmallInteger maxVal on a 64bit system"
+ -1152921504606846975!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aFalseConstantNode (in category 'constant') -----
+ aFalseConstantNode
+ false!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aFloatConstantNode (in category 'constant') -----
+ aFloatConstantNode
+ 1.0!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aNilConstantNode (in category 'constant') -----
+ aNilConstantNode
+ nil!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aSmallNegativeIntegerConstantNode (in category 'constant') -----
+ aSmallNegativeIntegerConstantNode
+ -30!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aStringConstantNode (in category 'constant') -----
+ aStringConstantNode
+ 'aString'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>aTrueConstantNode (in category 'constant') -----
+ aTrueConstantNode
+ true!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>anIntEqual32ConstantNode (in category 'constant') -----
+ anIntEqual32ConstantNode
+ " 2 ^ 32 - 1"
+ 4294967295!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>anIntEqual64ConstantNode (in category 'constant') -----
+ anIntEqual64ConstantNode
+ " 2 raisedTo: 64 "
+ 18446744073709551615!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>anIntGreater64ConstantNode (in category 'constant') -----
+ anIntGreater64ConstantNode
+ "SmallInteger maxVal on a 64bit system"
+ 1152921504606846975!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>anIntLesser32ConstantNode (in category 'constant') -----
+ anIntLesser32ConstantNode
+ 30!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnABigNegativeIntegerConstantNode (in category 'return-constant') -----
+ returnABigNegativeIntegerConstantNode
+ "SmallInteger maxVal on a 64bit system"
+ ^ -1152921504606846975
+ !

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnABigNegativeIntegerMessageSend (in category 'return-message-send') -----
+ returnABigNegativeIntegerMessageSend
+ ^ self returnABigNegativeIntegerConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAFalseConstantNode (in category 'return-constant') -----
+ returnAFalseConstantNode
+ ^ false!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAFalseMessageSend (in category 'return-message-send') -----
+ returnAFalseMessageSend
+ ^ self returnAFalseConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAFloatConstantNode (in category 'return-constant') -----
+ returnAFloatConstantNode
+ ^ 1.0!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAFloatMessageSend (in category 'return-message-send') -----
+ returnAFloatMessageSend
+ ^ self returnAFloatConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnANilConstantNode (in category 'return-constant') -----
+ returnANilConstantNode
+ ^ nil!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnANilMessageSend (in category 'return-message-send') -----
+ returnANilMessageSend
+ ^ self returnANilConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnASmallNegativeIntegerConstantNode (in category 'return-constant') -----
+ returnASmallNegativeIntegerConstantNode
+ ^ -30!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnASmallNegativeIntegerMessageSend (in category 'return-message-send') -----
+ returnASmallNegativeIntegerMessageSend
+ ^ self returnASmallNegativeIntegerConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAStringConstantNode (in category 'return-constant') -----
+ returnAStringConstantNode
+ ^ 'aString'!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAStringMessageSend (in category 'return-message-send') -----
+ returnAStringMessageSend
+ ^ self returnAStringConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnATrueConstantNode (in category 'return-constant') -----
+ returnATrueConstantNode
+ ^ true!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnATrueMessageSend (in category 'return-message-send') -----
+ returnATrueMessageSend
+ ^ self returnATrueConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntEqual32ConstantNode (in category 'return-constant') -----
+ returnAnIntEqual32ConstantNode
+ " 2 ^ 32 - 1"
+ ^ 4294967295!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntEqual32MessageSend (in category 'return-message-send') -----
+ returnAnIntEqual32MessageSend
+ ^ self returnAnIntEqual32ConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntEqual64ConstantNode (in category 'return-constant') -----
+ returnAnIntEqual64ConstantNode
+ " 2 raisedTo: 64 "
+ ^ 18446744073709551615!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntEqual64MessageSend (in category 'return-message-send') -----
+ returnAnIntEqual64MessageSend
+ ^ self returnAnIntEqual64ConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntGreater64ConstantNode (in category 'return-constant') -----
+ returnAnIntGreater64ConstantNode
+ "SmallInteger maxVal on a 64bit system"
+ ^ 1152921504606846975!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntGreater64MessageSend (in category 'return-message-send') -----
+ returnAnIntGreater64MessageSend
+ ^ self returnAnIntGreater64ConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntLesser32ConstantNode (in category 'return-constant') -----
+ returnAnIntLesser32ConstantNode
+ ^ 30!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnAnIntLesser32MessageSend (in category 'return-message-send') -----
+ returnAnIntLesser32MessageSend
+ ^ self returnAnIntLesser32ConstantNode!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgDouble: (in category 'return-explicit-arg') -----
+ returnExplicitArgDouble: t
+ <var:#t type:#double>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgFloat: (in category 'return-explicit-arg') -----
+ returnExplicitArgFloat: t
+ <var:#t type:#float>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgInt: (in category 'return-explicit-arg') -----
+ returnExplicitArgInt: t
+ <var:#t type:#int>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgLongLong: (in category 'return-explicit-arg') -----
+ returnExplicitArgLongLong: t
+ <var:#t type:#'long long'>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgRandom: (in category 'return-explicit-arg') -----
+ returnExplicitArgRandom: t
+ <var:#t type:#completelyRandom>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgString: (in category 'return-explicit-arg') -----
+ returnExplicitArgString: t
+ <var:#t type:#'char *'>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgUnsignedInt: (in category 'return-explicit-arg') -----
+ returnExplicitArgUnsignedInt: t
+ <var:#t type:#'unsigned int'>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitArgUnsignedLongLong: (in category 'return-explicit-arg') -----
+ returnExplicitArgUnsignedLongLong: t
+ <var:#t type:#'unsigned long long'>
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempDouble (in category 'return-explicit-temp') -----
+ returnExplicitTempDouble
+ <var:#t type:#double>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempFloat (in category 'return-explicit-temp') -----
+ returnExplicitTempFloat
+ <var:#t type:#float>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempInt (in category 'return-explicit-temp') -----
+ returnExplicitTempInt
+ <var:#t type:#int>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempLongLong (in category 'return-explicit-temp') -----
+ returnExplicitTempLongLong
+ <var:#t type:#'long long'>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempRandom (in category 'return-explicit-temp') -----
+ returnExplicitTempRandom
+ <var:#t type:#completelyRandom>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempString (in category 'return-explicit-temp') -----
+ returnExplicitTempString
+ <var:#t type:#'char *'>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempUnsignedInt (in category 'return-explicit-temp') -----
+ returnExplicitTempUnsignedInt
+ <var:#t type:#'unsigned int'>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnExplicitTempUnsignedLongLong (in category 'return-explicit-temp') -----
+ returnExplicitTempUnsignedLongLong
+ <var:#t type:#'unsigned long long'>
+ | t |
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempBigNegativeIntegerConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempBigNegativeIntegerConstantNode
+ | t |
+ "SmallInteger maxVal on a 64bit system"
+ t := -1152921504606846975.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempBigNegativeIntegerMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempBigNegativeIntegerMessageNode
+ | t |
+ t := self returnABigNegativeIntegerConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempFalseConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempFalseConstantNode
+ | t |
+ t := false.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempFalseMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempFalseMessageNode
+ | t |
+ t := self returnAFalseConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempFloatConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempFloatConstantNode
+ | t |
+ t := 1.0.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempFloatMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempFloatMessageNode
+ | t |
+ t := self returnAFloatMessageSend.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntEqual32ConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempIntEqual32ConstantNode
+ " 2 ^ 32 - 1"
+ | t |
+ t := 4294967295.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntEqual32MessageNode (in category 'return-temp-assigned-message') -----
+ returnTempIntEqual32MessageNode
+ | t |
+ t := self returnAnIntEqual32ConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntEqual64ConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempIntEqual64ConstantNode
+ " 2 raisedTo: 64 "
+ | t |
+ t := 18446744073709551615.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntEqual64MessageNode (in category 'return-temp-assigned-message') -----
+ returnTempIntEqual64MessageNode
+ | t |
+ t := self returnAnIntEqual64ConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntGreater64ConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempIntGreater64ConstantNode
+ | t |
+ "SmallInteger maxVal on a 64bit system"
+ t := 1152921504606846975.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntGreater64MessageNode (in category 'return-temp-assigned-message') -----
+ returnTempIntGreater64MessageNode
+ | t |
+ t := self returnAnIntGreater64ConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntLesser32ConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempIntLesser32ConstantNode
+ | t |
+ t := 30.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempIntLesser32MessageNode (in category 'return-temp-assigned-message') -----
+ returnTempIntLesser32MessageNode
+ | t |
+ t := self returnAnIntLesser32ConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempNilConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempNilConstantNode
+ | t |
+ t := nil.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempNilMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempNilMessageNode
+ | t |
+ t := self returnANilConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempSmallNegativeIntegerConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempSmallNegativeIntegerConstantNode
+ | t |
+ t := -30.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempSmallNegativeIntegerMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempSmallNegativeIntegerMessageNode
+ | t |
+ t := self returnASmallNegativeIntegerConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempStringConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempStringConstantNode
+ | t |
+ t := 'aString'.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempStringMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempStringMessageNode
+ | t |
+ t := self returnAStringConstantNode.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempTrueConstantNode (in category 'return-temp-assigned-const') -----
+ returnTempTrueConstantNode
+ | t |
+ t := true.
+ ^ t!

Item was added:
+ ----- Method: SlangBasicTypeInferenceTestClass>>returnTempTrueMessageNode (in category 'return-temp-assigned-message') -----
+ returnTempTrueMessageNode
+ | t |
+ t := self returnATrueConstantNode.
+ ^ t!

Item was added:
+ SlangAbstractTestCase subclass: #SlangTypeForArithmeticTest
+ instanceVariableNames: 'visitor propertyName'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangTypeForArithmeticTest>>setUp (in category 'running') -----
+ setUp
+ super setUp.
+ ccg addClass: SlangTypeForDereferenceTestClass
+ !

Item was added:
+ ----- Method: SlangTypeForArithmeticTest>>testAtOnMatrix (in category 'tests') -----
+ testAtOnMatrix
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningAnAtOnAMatrix.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #sqInt."at: node"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #sqInt."returnNode"
+ self assert: tMethod returnType equals: #sqInt. " euuu, looks weird. Did i do something wrong?"!

Item was added:
+ SlangAbstractTestCase subclass: #SlangTypeForDereferenceTest
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>setUp (in category 'running') -----
+ setUp
+ super setUp.
+ ccg addClass: SlangTypeForDereferenceTestClass.
+ ccg inferTypesForImplicitlyTypedVariablesAndMethods.!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>testAtOnArray (in category 'tests') -----
+ testAtOnArray
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningAnAtOnAnArray.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #int."at: node"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int."returnNode"
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false. "Unexpected type conversion"!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>testAtOnMatrix (in category 'tests') -----
+ testAtOnMatrix
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningAnAtOnAMatrix.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #'int *'."at: node"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'int *'."returnNode"
+ self assert: tMethod returnType equals: #'int *'.!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>testReturnPointerTypeExplicitTempVariable (in category 'tests') -----
+ testReturnPointerTypeExplicitTempVariable
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningAPointerType.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #'int *'."variable node"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'int *'."return node"
+ self assert: tMethod returnType equals: #'int *'!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>testSelfMessageReturningPointerType (in category 'tests') -----
+ testSelfMessageReturningPointerType
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningAPointerType.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #'int *'."message node"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #'int *'."returnNode"
+ self assert: tMethod returnType equals: #'int *'!

Item was added:
+ ----- Method: SlangTypeForDereferenceTest>>testTwoAtOnMatrix (in category 'tests') -----
+ testTwoAtOnMatrix
+ | tMethod |
+ tMethod := ccg methodNamed: #aMethodReturningTwoAtOnAMatrix.
+
+ self assert: tMethod isNotNil.
+ self assert: (ccg typeFor: tMethod statements first expression receiver in: tMethod) equals: #'int *'."inner at:"
+ self assert: (ccg typeFor: tMethod statements first expression in: tMethod) equals: #int."outer at:"
+ self assert: (ccg typeFor: tMethod statements first in: tMethod) equals: #int."return node"
+ self assert: tMethod returnType equals: #sqInt.
+
+ self assert: false. "Unexpected type conversion"!

Item was added:
+ InterpreterPlugin subclass: #SlangTypeForDereferenceTestClass
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangTypeForDereferenceTestClass>>aMethodReturningAMessageSendToSelf (in category 'as yet unclassified') -----
+ aMethodReturningAMessageSendToSelf
+ ^ self aMethodReturningAPointerType!

Item was added:
+ ----- Method: SlangTypeForDereferenceTestClass>>aMethodReturningAPointerType (in category 'as yet unclassified') -----
+ aMethodReturningAPointerType
+ <var:#a type:#'int*'>
+ | a |
+ ^ a!

Item was added:
+ ----- Method: SlangTypeForDereferenceTestClass>>aMethodReturningAnAtOnAMatrix (in category 'as yet unclassified') -----
+ aMethodReturningAnAtOnAMatrix
+ <var:#a type:#'int**'>
+ | a |
+ ^ a at: 2!

Item was added:
+ ----- Method: SlangTypeForDereferenceTestClass>>aMethodReturningAnAtOnAnArray (in category 'as yet unclassified') -----
+ aMethodReturningAnAtOnAnArray
+ <var:#a type:#'int*'>
+ | a |
+ ^ a at: 2!

Item was added:
+ ----- Method: SlangTypeForDereferenceTestClass>>aMethodReturningTwoAtOnAMatrix (in category 'as yet unclassified') -----
+ aMethodReturningTwoAtOnAMatrix
+ <var:#a type:#'int**'>
+ | a |
+ ^ (a at: 2) at: 2!

Item was added:
+ SlangAbstractTestCase subclass: #SlangTypePromotionTest
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-Tests'!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testCharAndChar (in category 'integer-types') -----
+ testCharAndChar
+ "representative of two types smaller than sizeOf(int) with same size"
+ | firstType secondType resType |
+ firstType := #char.
+ secondType := #char.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #int.
+
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #char).
+ self assert: (ccg sizeOfIntegralCType: #char) equals: 1.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testCharAndFloat (in category 'float-types') -----
+ testCharAndFloat
+ "representative of two types bigger than sizeOf(int) and with same size"
+ | firstType secondType resType |
+ firstType := #char.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+ self assert: (ccg isFloatingPointCType: resType).!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testCharAndLongLong (in category 'integer-types') -----
+ testCharAndLongLong
+ "representative of two types bigger than sizeOf(int) and with same size"
+ | firstType secondType resType |
+ firstType := #char.
+ secondType := #'long long'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #char).
+ self assert: (ccg sizeOfIntegralCType: #char) equals: 1.
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testDoubleAndDouble (in category 'float-types') -----
+ testDoubleAndDouble
+ | firstType secondType resType |
+ firstType := #double.
+ secondType := #double.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #double.
+ self assert: (ccg isFloatingPointCType: resType).!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testDoubleAndFloat (in category 'float-types') -----
+ testDoubleAndFloat
+ | firstType secondType resType |
+ firstType := #double.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #double.
+ self assert: (ccg isFloatingPointCType: resType).
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testFloatAndDouble (in category 'float-types') -----
+ testFloatAndDouble
+ | firstType secondType resType |
+ firstType := #float.
+ secondType := #double.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #double.
+ self assert: (ccg isFloatingPointCType: resType).
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testFloatAndFloat (in category 'float-types') -----
+ testFloatAndFloat
+ | firstType secondType resType |
+ firstType := #float.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+ self assert: (ccg isFloatingPointCType: resType).
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testFloatAndNil (in category 'general') -----
+ testFloatAndNil
+ | firstType secondType resType |
+ firstType := #float.
+ secondType := nil.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+
+ "this feels wrong"
+ "inconsistent with integer types too"
+ self assert: false.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndFloat (in category 'float-types') -----
+ testIntAndFloat
+ | firstType secondType resType |
+ firstType := #int.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+ self assert: (ccg isFloatingPointCType: resType).
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndInt (in category 'integer-types') -----
+ testIntAndInt
+ "representative of two types with size = sizeOf(int) of same size"
+ | firstType secondType resType |
+ firstType := #int.
+ secondType := #int.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #int.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndLongLong (in category 'integer-types') -----
+ testIntAndLongLong
+ "representative of a different size types"
+ | firstType secondType resType |
+ firstType := #int .
+ secondType := #'long long'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndNil (in category 'general') -----
+ testIntAndNil
+ | firstType secondType resType |
+ firstType := #int.
+ secondType := nil.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: nil.
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndUnsignedChar (in category 'unsigned-priority') -----
+ testIntAndUnsignedChar
+ "representative of an unsigned that is ignored because of integerType promotion"
+ | firstType secondType resType |
+ firstType := #int.
+ secondType := #'unsigned char'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #int.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.
+ self assert: (ccg isIntegralCType: #'unsigned char').
+ self assert: (ccg sizeOfIntegralCType: #'unsigned char') equals: 1.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testIntAndUnsignedInt (in category 'unsigned-priority') -----
+ testIntAndUnsignedInt
+ "representative of two types bigger than sizeOf(int) and with same size"
+ | firstType secondType resType |
+ firstType := #int.
+ secondType := #'unsigned int'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'unsigned int'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.
+ self assert: (ccg isIntegralCType: #'unsigned int').
+ self assert: (ccg sizeOfIntegralCType: #'unsigned int') equals: 4.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testLongLongAndChar (in category 'integer-types') -----
+ testLongLongAndChar
+ "representative of different sized types"
+ | firstType secondType resType |
+ firstType := #'long long'.
+ secondType := #char.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.
+ self assert: (ccg isIntegralCType: #char).
+ self assert: (ccg sizeOfIntegralCType: #char) equals: 1.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testLongLongAndFloat (in category 'float-types') -----
+ testLongLongAndFloat
+ | firstType secondType resType |
+ firstType := #'long long'.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+ self assert: (ccg isFloatingPointCType: resType).
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testLongLongAndInt (in category 'integer-types') -----
+ testLongLongAndInt
+ "representative of different sized types"
+ | firstType secondType resType |
+ firstType := #'long long'.
+ secondType := #int.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testLongLongAndSqLong (in category 'integer-types') -----
+ testLongLongAndSqLong
+ "representative of two types bigger than sizeOf(int)"
+ | firstType secondType resType |
+ firstType := #'long long'.
+ secondType := #sqLong.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.
+ self assert: (ccg isIntegralCType: #sqLong).
+ self assert: (ccg sizeOfIntegralCType: #sqLong) equals: 8.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testNilAndFloat (in category 'general') -----
+ testNilAndFloat
+ | firstType secondType resType |
+ firstType := nil.
+ secondType := #float.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #float.
+
+ "this feels wrong"
+ "inconsistent with integer types too"
+ self assert: false.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testNilAndInt (in category 'general') -----
+ testNilAndInt
+ | firstType secondType resType |
+ firstType := nil.
+ secondType := #int.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: nil.
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testNilAndNil (in category 'general') -----
+ testNilAndNil
+ | firstType secondType resType |
+ firstType := nil.
+ secondType := nil.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: nil.
+ !

Item was added:
+ ----- Method: SlangTypePromotionTest>>testUnsignedIntAndInt (in category 'unsigned-priority') -----
+ testUnsignedIntAndInt
+ "representative of two types bigger than sizeOf(int) and with same size"
+ | firstType secondType resType |
+ firstType := #'unsigned int'.
+ secondType := #'int'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'unsigned int'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #'unsigned int').
+ self assert: (ccg sizeOfIntegralCType: #'unsigned int') equals: 4.
+ self assert: (ccg isIntegralCType: #int).
+ self assert: (ccg sizeOfIntegralCType: #int) equals: 4.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testUnsignedIntAndLongLong (in category 'unsigned-priority') -----
+ testUnsignedIntAndLongLong
+ "representative of an unsigned that is ignored because of integerType promotion"
+ | firstType secondType resType |
+ firstType := #'unsigned int'.
+ secondType := #'long long'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #'long long'.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #'unsigned int').
+ self assert: (ccg sizeOfIntegralCType: #'unsigned int') equals: 4.
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.!

Item was added:
+ ----- Method: SlangTypePromotionTest>>testsqLongAndLongLong (in category 'integer-types') -----
+ testsqLongAndLongLong
+ "representative of two types bigger than sizeOf(int) and with same size"
+ | firstType secondType resType |
+ firstType := #sqLong.
+ secondType := #'long long'.
+ resType := ccg promoteArithmeticTypes: firstType and: secondType.
+
+ self assert: resType equals: #sqLong.
+
+ "check that the system is in the assumed state."
+ self assert: (ccg isIntegralCType: #sqLong).
+ self assert: (ccg sizeOfIntegralCType: #sqLong) equals: 8.
+ self assert: (ccg isIntegralCType: #'long long').
+ self assert: (ccg sizeOfIntegralCType: #'long long') equals: 8.!