From 74e272b7b5df5db5e83b75ee05a05287401ac23f Mon Sep 17 00:00:00 2001
From: tracer-ysyx <tracer@ysyx.org>
Date: Sat, 13 Jan 2024 09:25:24 +0800
Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?=
 =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.1.69=20#1-Nix?=
 =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Wed=20Dec=2020=2016:00:29=20UTC?=
 =?UTF-8?q?=202023=20x86=5F64=20GNU/Linux=20=2009:25:24=20=20up=201=20day?=
 =?UTF-8?q?=20=209:41,=20=202=20users,=20=20load=20average:=200.21,=200.43?=
 =?UTF-8?q?,=200.48?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 nemu/test              | Bin 0 -> 15688 bytes
 nemu/test.c            |   8 ++++++++
 nemu/tests/expr_test.c |  17 ++++++++++++-----
 3 files changed, 20 insertions(+), 5 deletions(-)
 create mode 100755 nemu/test
 create mode 100644 nemu/test.c

diff --git a/nemu/test b/nemu/test
new file mode 100755
index 0000000000000000000000000000000000000000..74295cc37644f48114e51d564687c5976f4d25c5
GIT binary patch
literal 15688
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
B(g6Sf

literal 0
HcmV?d00001

diff --git a/nemu/test.c b/nemu/test.c
new file mode 100644
index 0000000..caaed92
--- /dev/null
+++ b/nemu/test.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <stdint.h>
+int main() {
+  uint32_t result = (0xdU) * (31U / ((((0x45U)) - 75U)) * (0x41U) + 53U / (0xaU) - (0x50U));
+  printf("%u", result);
+  return 0;
+}
+
diff --git a/nemu/tests/expr_test.c b/nemu/tests/expr_test.c
index 93b682a..6d26327 100644
--- a/nemu/tests/expr_test.c
+++ b/nemu/tests/expr_test.c
@@ -9,10 +9,10 @@
 #include <assert.h>
 #include <time.h>
 
-char buf[65536] = {};
+char buf[65536] = {}, ref_buf[65536] = {};
 static char code_buf[65536 + 128] = {}; // a little larger than `buf`
 const int buf_start_pos = 0;
-char *buf_ptr = buf + buf_start_pos;
+char *buf_ptr = buf + buf_start_pos, *ref_buf_ptr = ref_buf;
 static char *code_format =
 "#include <stdio.h>\n"
 "#include <stdint.h>\n"
@@ -25,21 +25,25 @@ static char *code_format =
 
 void gen(char c) {
   *(buf_ptr++) = c;
+  *(ref_buf_ptr) = c;
 }
 
 void gen_num(void) {
   uint32_t num = rand() % 100;
-  int len = 0;
+  int len = 0, ref_len = 0;
   switch(rand() % 2) {
     case 0:
       len = snprintf(buf_ptr, 100, "%u", num);
+      ref_len = snprintf(buf_ptr, 100, "%uU", num);
       break;
     case 1:
       len = snprintf(buf_ptr, 100, "0x%x", num);
+      ref_len = snprintf(buf_ptr, 100, "%uU", num);
       break;
     default: assert(0);
   }
   buf_ptr += len;
+  ref_buf_ptr += ref_len;
 }
 
 void gen_rand_op(void) {
@@ -71,7 +75,7 @@ START_TEST(test_expr_random_100) {
   ck_assert(!yyparse(&addr));
   yylex_destroy();
 
-  sprintf(code_buf, code_format, buf);
+  sprintf(code_buf, code_format, ref_buf);
 
   FILE *fp = fopen("/tmp/.code.c", "w");
   ck_assert(fp != NULL);
@@ -93,7 +97,10 @@ START_TEST(test_expr_random_100) {
   ck_assert_msg(addr == reference, "\n\tbuf = %s\n\taddr = %u, reference = %u\n", buf, addr, reference);
 
   while(buf_ptr != buf + buf_start_pos) {
-      *(--buf_ptr) = '\0';
+    *(--buf_ptr) = '\0';
+  }
+  while(ref_buf_ptr != ref_buf) {
+    *(--ref_buf_ptr) = '\0';
   }
 } END_TEST