diff --git a/tests/basic/whileret.e b/tests/basic/whileret.e
new file mode 100644
index 0000000000000000000000000000000000000000..921facb0703457a4ac60fde806d771d080b13175
--- /dev/null
+++ b/tests/basic/whileret.e
@@ -0,0 +1,9 @@
+main(x){
+  while(x > 0){
+    if (x == 3){
+      return 12;
+    }
+    x = x - 1;
+  }
+  return -3;
+}
diff --git a/tests/basic/whileret.e.expect_14_12_3_8_12 b/tests/basic/whileret.e.expect_14_12_3_8_12
new file mode 100644
index 0000000000000000000000000000000000000000..bcf7b802b7bc81daf4f5967753206a451b8eac6e
--- /dev/null
+++ b/tests/basic/whileret.e.expect_14_12_3_8_12
@@ -0,0 +1 @@
+{"output": "", "error": null, "retval": 12}
\ No newline at end of file
diff --git a/tests/basic/whileret.e.expect_1_2_3 b/tests/basic/whileret.e.expect_1_2_3
new file mode 100644
index 0000000000000000000000000000000000000000..e50078bef0dc9408205eb44eb97394dfaff5447d
--- /dev/null
+++ b/tests/basic/whileret.e.expect_1_2_3
@@ -0,0 +1 @@
+{"output": "", "error": null, "retval": -3}
\ No newline at end of file
diff --git a/tests/basic/whileret.e.expect_lexer b/tests/basic/whileret.e.expect_lexer
new file mode 100644
index 0000000000000000000000000000000000000000..8f900ffcd7084813acfd539f3115ca7a34433e04
--- /dev/null
+++ b/tests/basic/whileret.e.expect_lexer
@@ -0,0 +1,36 @@
+SYM_IDENTIFIER(main)
+SYM_LPARENTHESIS
+SYM_IDENTIFIER(x)
+SYM_RPARENTHESIS
+SYM_LBRACE
+SYM_WHILE
+SYM_LPARENTHESIS
+SYM_IDENTIFIER(x)
+SYM_GT
+SYM_INTEGER(0)
+SYM_RPARENTHESIS
+SYM_LBRACE
+SYM_IF
+SYM_LPARENTHESIS
+SYM_IDENTIFIER(x)
+SYM_EQUALITY
+SYM_INTEGER(3)
+SYM_RPARENTHESIS
+SYM_LBRACE
+SYM_RETURN
+SYM_INTEGER(12)
+SYM_SEMICOLON
+SYM_RBRACE
+SYM_IDENTIFIER(x)
+SYM_ASSIGN
+SYM_IDENTIFIER(x)
+SYM_MINUS
+SYM_INTEGER(1)
+SYM_SEMICOLON
+SYM_RBRACE
+SYM_RETURN
+SYM_MINUS
+SYM_INTEGER(3)
+SYM_SEMICOLON
+SYM_RBRACE
+SYM_EOF