41 lines
1.2 KiB
Racket
41 lines
1.2 KiB
Racket
#lang racket
|
|
|
|
(provide select-instr-tests)
|
|
|
|
(require rackunit)
|
|
|
|
(require (prefix-in bril: bril/lang))
|
|
(require "../aarch64var.rkt")
|
|
(require/expose "../select-instr.rkt" (bril-instr-to-aarch64var))
|
|
|
|
(define bril-label (bril:Label "main"))
|
|
(define bril-add
|
|
(bril:ValueInstr 'add "a" (bril:Type 'int) '("c" "d") '() '()))
|
|
(define bril-const
|
|
(bril:ConstantInstr "a" (bril:Type 'int) (bril:Int 21)))
|
|
(define bril-return
|
|
(bril:EffectInstr 'return '("x") '() '()))
|
|
|
|
(define select-instr-tests
|
|
(test-suite
|
|
"Instruction Selection Tests"
|
|
(test-suite
|
|
"Single instruction selection"
|
|
(test-case
|
|
"Label"
|
|
(check-equal? (bril-instr-to-aarch64var bril-label)
|
|
(Label "main")))
|
|
(test-case
|
|
"Addition"
|
|
(check-equal? (bril-instr-to-aarch64var bril-add)
|
|
(list (Add (Var "c") (Var "d") (Var "a")))))
|
|
(test-case
|
|
"Constant Instr"
|
|
(check-equal? (bril-instr-to-aarch64var bril-const)
|
|
(list (LMov (Imm 21) (Var "a")))))
|
|
(test-case
|
|
"Return"
|
|
(check-equal? (bril-instr-to-aarch64var bril-return)
|
|
(list (LMov (Reg 'x0) (Var "x"))
|
|
(RetDefault)))))))
|