mirror of
				https://github.com/irmen/prog8.git
				synced 2025-11-04 10:16:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
package prog8tests.codegeneration
 | 
						|
 | 
						|
import io.kotest.core.spec.style.FunSpec
 | 
						|
import io.kotest.matchers.shouldNotBe
 | 
						|
import prog8.code.target.C64Target
 | 
						|
import prog8.code.target.VMTarget
 | 
						|
import prog8tests.helpers.compileText
 | 
						|
 | 
						|
class TestArrayInplaceAssign: FunSpec({
 | 
						|
    test("assign prefix var to array should compile fine and is not split into inplace array modification") {
 | 
						|
        val text = """
 | 
						|
            main {
 | 
						|
                sub start() {
 | 
						|
                    byte[5] array
 | 
						|
                    byte bb
 | 
						|
                    array[1] = -bb
 | 
						|
                }
 | 
						|
            }
 | 
						|
        """
 | 
						|
        compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
        compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
    }
 | 
						|
 | 
						|
    test("array in-place negation (integer types)") {
 | 
						|
        val text = """
 | 
						|
main {
 | 
						|
  byte[10] foo
 | 
						|
  ubyte[10] foou
 | 
						|
  word[10] foow
 | 
						|
  uword[10] foowu
 | 
						|
 | 
						|
  sub start() {
 | 
						|
    foo[1] = 42
 | 
						|
    foo[1] = -foo[1]
 | 
						|
 | 
						|
    foow[1] = 4242
 | 
						|
    foow[1] = -foow[1]
 | 
						|
  }
 | 
						|
}"""
 | 
						|
        compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
        compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
    }
 | 
						|
 | 
						|
    test("array in-place negation (float type) vm target") {
 | 
						|
        val text = """
 | 
						|
%import floats
 | 
						|
 | 
						|
main {
 | 
						|
  float[10] flt
 | 
						|
 | 
						|
  sub start() {
 | 
						|
    flt[1] = 42.42
 | 
						|
    flt[1] = -flt[1]
 | 
						|
  }
 | 
						|
}"""
 | 
						|
        compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
    }
 | 
						|
 | 
						|
    test("array in-place negation (float type) 6502 target") {
 | 
						|
        val text = """
 | 
						|
%import floats
 | 
						|
 | 
						|
main {
 | 
						|
  float[10] flt
 | 
						|
 | 
						|
  sub start() {
 | 
						|
    flt[1] = 42.42
 | 
						|
    flt[1] = -flt[1]
 | 
						|
  }
 | 
						|
}"""
 | 
						|
        compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
    }
 | 
						|
 | 
						|
    test("array in-place invert") {
 | 
						|
        val text = """
 | 
						|
main {
 | 
						|
  ubyte[10] foo
 | 
						|
  uword[10] foow
 | 
						|
 | 
						|
  sub start() {
 | 
						|
    foo[1] = 42
 | 
						|
    foo[1] = ~foo[1]
 | 
						|
 | 
						|
    foow[1] = 4242
 | 
						|
    foow[1] = ~foow[1]
 | 
						|
  }
 | 
						|
}"""
 | 
						|
        compileText(C64Target(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
        compileText(VMTarget(), false, text, writeAssembly = true) shouldNotBe null
 | 
						|
    }
 | 
						|
})
 | 
						|
 |