mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
108 lines
2.9 KiB
C++
108 lines
2.9 KiB
C++
|
#include "gtest/gtest.h"
|
||
|
#include "FormRegressionTest.h"
|
||
|
|
||
|
using namespace decompiler;
|
||
|
|
||
|
TEST_F(FormRegressionTest, ExprMethod7Object) {
|
||
|
std::string func =
|
||
|
" sll r0, r0, 0\n"
|
||
|
" or v0, a0, r0\n"
|
||
|
" jr ra\n"
|
||
|
" daddu sp, sp, r0\n";
|
||
|
std::string type = "(function object int object)";
|
||
|
std::string expected = "arg0";
|
||
|
test_with_expr(func, type, expected);
|
||
|
}
|
||
|
|
||
|
TEST_F(FormRegressionTest, ExprLoadPackage) {
|
||
|
std::string func =
|
||
|
" sll r0, r0, 0\n"
|
||
|
"L278:\n"
|
||
|
" daddiu sp, sp, -48\n"
|
||
|
" sd ra, 0(sp)\n"
|
||
|
" sq s5, 16(sp)\n"
|
||
|
" sq gp, 32(sp)\n"
|
||
|
|
||
|
" or gp, a0, r0\n"
|
||
|
" or s5, a1, r0\n"
|
||
|
" lw t9, nmember(s7)\n"
|
||
|
" or a0, gp, r0\n"
|
||
|
" lw a1, *kernel-packages*(s7)\n"
|
||
|
" jalr ra, t9\n"
|
||
|
" sll v0, ra, 0\n"
|
||
|
|
||
|
" bne s7, v0, L279\n"
|
||
|
" or v0, s7, r0\n"
|
||
|
|
||
|
" lw t9, dgo-load(s7)\n"
|
||
|
" or a0, gp, r0\n"
|
||
|
" addiu a2, r0, 15\n"
|
||
|
" lui a3, 32\n"
|
||
|
" or a1, s5, r0\n"
|
||
|
" jalr ra, t9\n"
|
||
|
" sll v0, ra, 0\n"
|
||
|
|
||
|
" lw v1, pair(s7)\n"
|
||
|
" lwu t9, 16(v1)\n"
|
||
|
" daddiu a0, s7, global\n"
|
||
|
" lw a1, pair(s7)\n"
|
||
|
" lw a3, *kernel-packages*(s7)\n"
|
||
|
" or a2, gp, r0\n"
|
||
|
" jalr ra, t9\n"
|
||
|
" sll v0, ra, 0\n"
|
||
|
|
||
|
" sw v0, *kernel-packages*(s7)\n"
|
||
|
"L279:\n"
|
||
|
" ld ra, 0(sp)\n"
|
||
|
" lq gp, 32(sp)\n"
|
||
|
" lq s5, 16(sp)\n"
|
||
|
" jr ra\n"
|
||
|
" daddiu sp, sp, 48\n";
|
||
|
std::string type = "(function string kheap pair)";
|
||
|
std::string expected =
|
||
|
"(when\n"
|
||
|
" (not (nmember arg0 *kernel-packages*))\n"
|
||
|
" (dgo-load arg0 arg1 15 2097152)\n"
|
||
|
" (set! v0-1 (cons arg0 *kernel-packages*))\n"
|
||
|
" (set! *kernel-packages* v0-1)\n"
|
||
|
" v0-1\n"
|
||
|
" )";
|
||
|
test_with_expr(func, type, expected);
|
||
|
}
|
||
|
|
||
|
TEST_F(FormRegressionTest, ExprUnloadPackage) {
|
||
|
std::string func =
|
||
|
" sll r0, r0, 0\n"
|
||
|
" daddiu sp, sp, -16\n"
|
||
|
" sd ra, 0(sp)\n"
|
||
|
" lw t9, nmember(s7)\n"
|
||
|
" lw a1, *kernel-packages*(s7)\n"
|
||
|
" jalr ra, t9\n"
|
||
|
" sll v0, ra, 0\n"
|
||
|
|
||
|
" or v1, v0, r0\n"
|
||
|
" beq s7, v1, L277\n"
|
||
|
" or a0, s7, r0\n"
|
||
|
|
||
|
" lw t9, delete!(s7)\n"
|
||
|
" lw a0, -2(v1)\n"
|
||
|
" lw a1, *kernel-packages*(s7)\n"
|
||
|
" jalr ra, t9\n"
|
||
|
" sll v0, ra, 0\n"
|
||
|
|
||
|
" sw v0, *kernel-packages*(s7)\n"
|
||
|
" or v1, v0, r0\n"
|
||
|
"L277:\n"
|
||
|
" lw v0, *kernel-packages*(s7)\n"
|
||
|
" ld ra, 0(sp)\n"
|
||
|
" jr ra\n"
|
||
|
" daddiu sp, sp, 16\n";
|
||
|
std::string type = "(function string pair)";
|
||
|
std::string expected =
|
||
|
"(begin\n"
|
||
|
" (set! v1-0 (nmember arg0 *kernel-packages*))\n"
|
||
|
" (if v1-0 (set! *kernel-packages* (delete! (car v1-0) *kernel-packages*)))\n"
|
||
|
" *kernel-packages*\n"
|
||
|
" )";
|
||
|
test_with_expr(func, type, expected, true);
|
||
|
}
|