CompiledCodeObjectTests.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 15 Jun 2016 23:46:29 +0100
changeset 23 d2d9a2d4d6bf
parent 12 6e775bad5027
child 24 5aace704e3c8
permissions -rw-r--r--
Added README, licenses and copyright notices.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:dragonfly' }"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
TestCase subclass:#CompiledCodeObjectTests
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'jitEnabled'
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
9
40f9438e9de3 Updated after rename of section type to section format. Implemented section allocation routines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
     8
	poolDictionaries:'CompiledCodeObjectSectionFormat'
12
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
     9
	category:'System-Compiler-Interface-Tests'
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!CompiledCodeObjectTests class methodsFor:'documentation'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
documentation
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    documentation to be added.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    [author:]
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
        Jan Vrany <jan.vrany@fit.cvut.cz>
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
    [instance variables:]
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    [class variables:]
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    [see also:]
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!CompiledCodeObjectTests methodsFor:'running'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
setUp
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
    "common setup - invoked before testing."
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    super setUp.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    jitEnabled := ObjectMemory justInTimeCompilation: true.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    "Modified: / 06-12-2015 / 00:10:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
tearDown
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    "common cleanup - invoked after testing."
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    super tearDown.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    ObjectMemory justInTimeCompilation: jitEnabled
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    "Modified: / 06-12-2015 / 00:11:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
!CompiledCodeObjectTests methodsFor:'test data'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
methodWithConstant
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
    ^ 123
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    "Created: / 06-12-2015 / 00:15:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
methodWithLiteral
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    ^ #(Literal 2)
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    "Created: / 07-12-2015 / 16:52:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
methodWithSend
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    ^ OrderedCollection size + 10
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    "Created: / 07-12-2015 / 16:51:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
!CompiledCodeObjectTests methodsFor:'tests'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
test_01
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    73
    | object section |
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    self ensureCompiled: #methodWithConstant.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    object := (self class >> #methodWithConstant) codeObject.
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    76
    self assert: object compiledCode == (self class >> #methodWithConstant).
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    77
    self assert: object sections size == 2. "/ No literals no ILC's, only code and special cells
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    78
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    79
    section := object sectionNamed: '.text'.
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    80
    self assert: section format = SectionFormatText.
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    81
    self assert: section size > 1.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    82
    self assert: ((1 to: section size) allSatisfy:[:i | (section at: i) <= 255 ]).
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    84
    section := object sectionNamed: '.stx.codeobj.specialcells'. 
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    85
    self assert: section format = SectionFormatINTVector.
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    86
    self assert: section size == 1.
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    87
    self should: [ section at: 0 ] raise: PrimitiveFailure.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    88
    self assert: (section at: 1) isInteger.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    89
    self should: [ section at: 2 ] raise: PrimitiveFailure.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    90
    self should: [ section at: 0 put: 123 ] raise: PrimitiveFailure.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    91
    self should: [ section at: 1 put: 'Invalid' ] raise: PrimitiveFailure.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    92
    self should: [ section at: 2 put: 123 ] raise: PrimitiveFailure.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    93
    section at: 1 put: 10.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    94
    self assert: (section at: 1) == 10.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    self ensureCompiled: #methodWithLiteral.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    object := (self class >> #methodWithLiteral) codeObject.
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    98
    self assert: object sections size == 3. "/ No ILC's but literals, code and special cells
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   100
    section := object sectionNamed: '.text'.
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   101
    section := object sectionNamed: '.stx.codeobj.specialcells'. 
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   102
    section := object sectionNamed: '.stx.codeobj.literals'. 
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   103
    self assert: section format = SectionFormatOBJVector.
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   104
    self assert: section size == 1.
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   105
    self assert: (section at: 1) = #(#Literal 2). 
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   106
    self assert: (self methodWithLiteral) = #(#Literal 2). 
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   107
    section at: 1 put: 123.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   108
    self assert: (section at: 1) == 123. 
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   109
    self assert: (self methodWithLiteral) == 123.
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   110
9
40f9438e9de3 Updated after rename of section type to section format. Implemented section allocation routines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   111
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    self ensureCompiled: #methodWithSend.
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   113
    object := (self class >> #methodWithSend) codeObject.
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   114
    self assert: object sections size == 4. "/ Literals (for the selector), ILC, code and special cells
10
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   115
    section := object sectionNamed: '.text'.
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   116
    section := object sectionNamed: '.stx.codeobj.specialcells'. 
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   117
    section := object sectionNamed: '.stx.codeobj.ilcs'. 
588414eaacff Added CodeObjectSection>>size. Polished tests a bit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   118
    self assert: section format = SectionFormatILCVector.
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   119
    self assert: section size == 2.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    "Created: / 06-12-2015 / 00:15:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
11
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   122
    "Modified: / 23-01-2016 / 22:15:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
cfe5c9d79fbc Added CompiledCodeObjectSection>>at: and at:put:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   123
12
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   124
!
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   125
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   126
test_02a
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   127
    "Tests creation of new code object for method which has
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   128
     not yet been compiled"
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   129
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   130
    | method object section |
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   131
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   132
    method := Method new.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   133
    method numberOfArgs: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   134
    method numberOfVars: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   135
    method stackSize: 0.          
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   136
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   137
    object := CompiledCodeObject forCompiledCode: method text: 6 literals: 1 ilcs: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   138
    self assert: object compiledCode == method.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   139
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   140
    section := object sectionNamed: '.text'.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   141
    self assert: section format = SectionFormatText.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   142
    self assert: section size == 6.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   143
    self assert: ((1 to: section size) allSatisfy:[:i | (section at: i) == 0 ]).
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   144
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   145
    section := object sectionNamed: '.stx.codeobj.literals'.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   146
    self assert: section format = SectionFormatOBJVector.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   147
    self assert: section size == 1.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   148
    self assert: ((1 to: section size) allSatisfy:[:i | (section at: i) isNil ]).
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   149
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   150
    "Created: / 24-01-2016 / 20:49:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   151
!
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   152
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   153
test_02b
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   154
    "Tests creation of new code object for method which has
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   155
     not yet been compiled"
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   156
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   157
    | method object section |
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   158
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   159
    method := Method new.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   160
    method numberOfArgs: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   161
    method numberOfVars: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   162
    method stackSize: 0.          
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   163
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   164
    object := CompiledCodeObject forCompiledCode: method text: 0 literals: 1 ilcs: 0.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   165
    self assert: object compiledCode == method.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   166
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   167
    self assert: (object hasSectionNamed: '.text') not.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   168
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   169
    object allocateTextSection: 10.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   170
    section := object sectionNamed: '.text'.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   171
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   172
    self assert: section format = SectionFormatText.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   173
    self assert: section size == 10.
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   174
    self assert: ((1 to: section size) allSatisfy:[:i | (section at: i) == 0 ]).
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   175
6e775bad5027 More tests for CompiledCodeObject and ObjectFileLoader.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   176
    "Created: / 24-01-2016 / 20:50:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
!CompiledCodeObjectTests methodsFor:'utilities'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
ensureCompiled: selector
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    ((self class >> selector) code isNil or:[ (self class >> selector) byteCode isNil ]) ifTrue:[
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
        self class recompile: selector.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
        self assert: (self class >> selector) code isNil.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
        self perform: selector.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
        self assert: (self class >> selector) code notNil.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    ]
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    "Created: / 06-12-2015 / 00:13:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
!CompiledCodeObjectTests class methodsFor:'documentation'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
version_HG
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
    ^ '$Changeset: <not expanded> $'
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198