aboutsummaryrefslogtreecommitdiff
path: root/tests/drivers/local_index_test.py
blob: 95bfd786c8b0f6fca62d0a08177e89311a28dcce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3
# local name heads survive shadowing, scope reuse, closures, and context switches.
import subprocess
import sys
source = '''
fn choose(int x) {
 let total = x;
 { let x = 7; total += x; }
 { let x = 9; total += x; }
 let f = fn(int x) { return x + 1; };
 let g = fn() { return total; };
 return total + x + f(3) + g();
}
o3 int fast(int x) { int result = x; { int x = 8; result += x; } return result + x; }
fn main() { put_n(choose(2)); put_c(32); put_n(fast(3)); put_c(10); return 0; }
'''
result = subprocess.run(sys.argv[1:], input=source, text=True, capture_output=True, timeout=15)
assert result.returncode == 0 and result.stdout == '42 14\n', (result.returncode, result.stdout, result.stderr)
print('ok   local shadow chains, reused scopes, closure parameters, captures, and o3 contexts')
source = 'struct point { int x, y; };\nfn main() { let a[3]; a[1] = 7; let alias = a; point p; p.x = 9; let ref = p; put_n(alias[1]); put_c(32); put_n(ref.x); put_c(10); return 0; }\n'
result = subprocess.run(sys.argv[1:], input=source, text=True, capture_output=True, timeout=15)
assert result.returncode == 0 and result.stdout == '7 9\n', (result.returncode, result.stdout, result.stderr)
print('ok   inferred aliases load array and struct addresses rather than the alias slot')