authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2015-12-03 11:06:05-07:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2015-12-03 11:06:05-07:00
log0c2cc9d2cffd783a4db159cb84027e4016f618ff
tree1b1d2a5fd01cdc0f768a08017b6e9ca0d38a36e5
parent5af4ef88acb68b66d38846b398e1e34845cccfbf

tests for local variables


2 files changed, 46 insertions(+), 2 deletions(-)

example/expressions/expressions.zig+4-2
...@@ -9,6 +9,8 @@ export fn _start() -> unreachable {...@@ -9,6 +9,8 @@ export fn _start() -> unreachable {
9 let b = 2;9 let b = 2;
10 // let c : i32; // not yet support for const variables10 // let c : i32; // not yet support for const variables
11 // let d; // parse error11 // let d; // parse error
12 puts("Hello, world!");12 if (a + b == 3) {
13 exit(a + b);13 puts("OK");
14 }
15 exit(0);
14}16}
test/run_tests.cpp+42
...@@ -256,6 +256,23 @@ static void add_compiling_test_cases(void) {...@@ -256,6 +256,23 @@ static void add_compiling_test_cases(void) {
256 exit(0);256 exit(0);
257 }257 }
258 )SOURCE", "loop\nloop\nloop\n");258 )SOURCE", "loop\nloop\nloop\n");
259
260 add_simple_case("local variables", R"SOURCE(
261#link("c")
262extern {
263 fn puts(s: *const u8) -> i32;
264 fn exit(code: i32) -> unreachable;
265}
266
267export fn _start() -> unreachable {
268 let a : i32 = 1;
269 let b = 2;
270 if (a + b == 3) {
271 puts("OK");
272 }
273 exit(0);
274}
275 )SOURCE", "OK\n");
259}276}
260277
261static void add_compile_failure_test_cases(void) {278static void add_compile_failure_test_cases(void) {
...@@ -340,6 +357,31 @@ done:...@@ -340,6 +357,31 @@ done:
340fn b() {}357fn b() {}
341 )SOURCE", 1, ".tmp_source.zig:4:5: error: unreachable code");358 )SOURCE", 1, ".tmp_source.zig:4:5: error: unreachable code");
342359
360 add_compile_fail_case("parameter redeclaration", R"SOURCE(
361fn f(a : i32, a : i32) {
362}
363 )SOURCE", 1, ".tmp_source.zig:2:1: error: redeclaration of parameter 'a'.");
364
365 add_compile_fail_case("local variable redeclaration", R"SOURCE(
366fn f() {
367 let a : i32 = 0;
368 let a = 0;
369}
370 )SOURCE", 1, ".tmp_source.zig:4:5: error: redeclaration of variable 'a'.");
371
372 add_compile_fail_case("local variable redeclares parameter", R"SOURCE(
373fn f(a : i32) {
374 let a = 0;
375}
376 )SOURCE", 1, ".tmp_source.zig:3:5: error: redeclaration of variable 'a'.");
377
378 add_compile_fail_case("variable has wrong type", R"SOURCE(
379fn f() -> i32 {
380 let a = "a";
381 a
382}
383 )SOURCE", 1, ".tmp_source.zig:2:15: error: type mismatch. expected i32. got *const u8");
384
343}385}
344386
345static void print_compiler_invokation(TestCase *test_case, Buf *zig_stderr) {387static void print_compiler_invokation(TestCase *test_case, Buf *zig_stderr) {