prog8/compiler/test/codegeneration/TestVariables.kt

103 lines
3.1 KiB
Kotlin
Raw Normal View History

package prog8tests.codegeneration
import io.kotest.core.spec.style.FunSpec
2022-03-07 20:41:12 +00:00
import io.kotest.matchers.shouldNotBe
2022-03-11 19:35:25 +00:00
import prog8.code.target.C64Target
2024-02-09 23:54:15 +00:00
import prog8.code.target.VMTarget
import prog8tests.helpers.compileText
class TestVariables: FunSpec({
test("shared variables without refs not removed for inlined asm") {
val text = """
main {
sub start() {
ubyte[] @shared arrayvar = [1,2,3,4]
str @shared stringvar = "test"
ubyte @shared bytevar = 0
%asm {{
lda p8v_arrayvar
lda p8v_stringvar
lda p8v_bytevar
}}
}
}
"""
2022-03-07 20:41:12 +00:00
compileText(C64Target(), true, text, writeAssembly = true) shouldNotBe null
}
test("array initialization with array literal") {
val text = """
main {
sub start() {
ubyte[] @shared arrayvar = [1,2,3,4]
}
}
"""
2022-03-07 20:41:12 +00:00
compileText(C64Target(), true, text, writeAssembly = true) shouldNotBe null
}
2024-02-10 02:07:49 +00:00
test("array initialization with array var assignment") {
val text = """
main {
sub start() {
2024-02-10 02:07:49 +00:00
ubyte[3] @shared arrayvar=main.values1
arrayvar = main.values2
}
2024-02-10 02:07:49 +00:00
ubyte[] values1 = [1,2,3]
ubyte[] values2 = [1,2,3]
}
"""
2024-02-09 23:54:15 +00:00
compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
2022-03-07 20:41:12 +00:00
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
}
test("pipe character in string literal") {
val text = """
main {
sub start() {
str name = "first|second"
str name2 = "first | second"
}
}
"""
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
}
test("negation of unsigned via casts") {
val text = """
main {
sub start() {
cx16.r0L = -(cx16.r0L as byte) as ubyte
cx16.r0 = -(cx16.r0 as word) as uword
ubyte ub
uword uw
ub = -(ub as byte) as ubyte
uw = -(uw as word) as uword
}
}
"""
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
}
test("initialization of boolean array with single value") {
val text = """
main {
sub start() {
bool[10] sieve0 = false
bool[10] sieve1 = true
bool[10] sieve2 = 42
sieve0[0] = true
sieve1[0] = true
sieve2[0] = true
}
}
"""
compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
}
})