aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-09-05 12:17:23 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-09-05 12:17:23 -0700
commit41d10c114da0316f90d1b482cacd61d10c2da5cb (patch)
tree7790bc7adb9cdd9e4b2b982ed1c10cccca8418e7 /tests
parentef417d0e7f4d387e0dc378502651851a5f942a26 (diff)
typeid improvements
Diffstat (limited to 'tests')
-rwxr-xr-xtests/runner.py80
1 files changed, 79 insertions, 1 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 2a22fa8b..f926c723 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -5219,7 +5219,85 @@ int main(int argc, char **argv) {
return 1;
}
''', 'hello world');
-
+
+ def test_typeid(self):
+ self.do_run(r'''
+ #include <stdio.h>
+ #include <string.h>
+ #include <typeinfo>
+ int main() {
+ printf("*\n");
+ #define MAX 100
+ int ptrs[MAX];
+ int groups[MAX];
+ memset(ptrs, 0, MAX*sizeof(int));
+ memset(groups, 0, MAX*sizeof(int));
+ int next_group = 1;
+ #define TEST(X) { \
+ int ptr = (int)&typeid(X); \
+ int group = 0; \
+ int i; \
+ for (i = 0; i < MAX; i++) { \
+ if (!groups[i]) break; \
+ if (ptrs[i] == ptr) { \
+ group = groups[i]; \
+ break; \
+ } \
+ } \
+ if (!group) { \
+ groups[i] = group = next_group++; \
+ ptrs[i] = ptr; \
+ } \
+ printf("%s:%d\n", #X, group); \
+ }
+ TEST(int);
+ TEST(unsigned int);
+ TEST(unsigned);
+ TEST(signed int);
+ TEST(long);
+ TEST(unsigned long);
+ TEST(signed long);
+ TEST(long long);
+ TEST(unsigned long long);
+ TEST(signed long long);
+ TEST(short);
+ TEST(unsigned short);
+ TEST(signed short);
+ TEST(char);
+ TEST(unsigned char);
+ TEST(signed char);
+ TEST(float);
+ TEST(double);
+ TEST(long double);
+ TEST(void);
+ TEST(void*);
+ printf("*\n");
+ }
+ ''', '''*
+int:1
+unsigned int:2
+unsigned:2
+signed int:1
+long:3
+unsigned long:4
+signed long:3
+long long:5
+unsigned long long:6
+signed long long:5
+short:7
+unsigned short:8
+signed short:7
+char:9
+unsigned char:10
+signed char:11
+float:12
+double:13
+long double:14
+void:15
+void*:16
+*
+''');
+
def test_static_variable(self):
if self.emcc_args is None: Settings.SAFE_HEAP = 0 # LLVM mixes i64 and i8 in the guard check
src = '''