eoc/tests/test-select-instr.rkt

57 lines
1.7 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 bril-function-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 bril-func
(bril:Function "main" '() (bril:Type 'int)
(list bril-label bril-add bril-return)))
(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)
(list (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)))))
(test-suite
"Function translation"
(test-case
"Simple function"
(check-equal? (bril-function-to-aarch64var bril-func)
(list (Label "main")
(Add (Var "c") (Var "d") (Var "a"))
(LMov (Reg 'x0) (Var "x"))
(RetDefault)))))))