From f54d09dca465c94fb5b02d13a3b31c35ac4b3b67 Mon Sep 17 00:00:00 2001
From: protolambda <proto@protolambda.com>
Date: Tue, 18 Apr 2023 15:44:41 +0200
Subject: [PATCH] mipsevm: test unicorn works

---
 mipsevm/unicorn_crash_test.go | 23 -----------------------
 mipsevm/unicorn_test.go       | 24 ++++++++++++++++++++++++
 2 files changed, 24 insertions(+), 23 deletions(-)
 delete mode 100644 mipsevm/unicorn_crash_test.go
 create mode 100644 mipsevm/unicorn_test.go

diff --git a/mipsevm/unicorn_crash_test.go b/mipsevm/unicorn_crash_test.go
deleted file mode 100644
index d9ee01053..000000000
--- a/mipsevm/unicorn_crash_test.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package main
-
-import (
-	"log"
-	"testing"
-
-	uc "github.com/unicorn-engine/unicorn/bindings/go/unicorn"
-)
-
-func TestUnicornCrash(t *testing.T) {
-	mu, err := uc.NewUnicorn(uc.ARCH_MIPS, uc.MODE_32|uc.MODE_BIG_ENDIAN)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// weird heap grooming (doesn't crash without this)
-	junk := make(map[uint32](uint32))
-	for i := 0; i < 1000000; i += 4 {
-		junk[uint32(i)] = 0xaaaaaaaa
-	}
-
-	mu.Start(0, 4)
-}
diff --git a/mipsevm/unicorn_test.go b/mipsevm/unicorn_test.go
new file mode 100644
index 000000000..73bf86459
--- /dev/null
+++ b/mipsevm/unicorn_test.go
@@ -0,0 +1,24 @@
+package main
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/require"
+	uc "github.com/unicorn-engine/unicorn/bindings/go/unicorn"
+)
+
+// TestUnicorn test that unicorn works
+func TestUnicorn(t *testing.T) {
+	mu, err := NewUnicorn()
+	require.NoError(t, err)
+	defer mu.Close()
+
+	require.NoError(t, mu.MemMap(0, 4096))
+	require.NoError(t, mu.RegWrite(uc.MIPS_REG_RA, 420), "set RA to addr that is multiple of 4")
+	require.NoError(t, mu.MemWrite(0, []byte{0x03, 0xe0, 0x00, 0x08}), "jmp $ra")
+
+	require.NoError(t, RunUnicorn(mu, 0, 1))
+	pc, err := mu.RegRead(uc.MIPS_REG_PC)
+	require.NoError(t, err)
+	require.Equal(t, uint64(420), pc, "jumped")
+}
-- 
2.23.0