1 #include "test.inc"
2 #include <see/see.h>
3
4 void
test()5 test()
6 {
7 struct SEE_interpreter interp_storage1, *interp1 = &interp_storage1;
8 struct SEE_interpreter interp_storage2, *interp2 = &interp_storage2;
9 struct SEE_string *gstr, *str1, *str2, *s;
10
11 TEST_DESCRIBE("bug 105, SEE_intern between interpreters");
12
13 /* Globally interning a string should return a string with no interp */
14 gstr = SEE_intern_global("something");
15 TEST_NULL(gstr->interpreter);
16
17 /* Re-interning the "something" should result in the same pointer */
18 s = SEE_intern_global("something");
19 TEST_EQ_PTR(s, gstr);
20
21 /* Construct two separate interpreter contexts */
22 SEE_interpreter_init(interp1);
23 SEE_interpreter_init(interp2);
24
25 /* Interning a string in interp #1 should result in a simple string */
26 str1 = SEE_intern_ascii(interp1, "dispatchEvent");
27 TEST_NOT_NULL(str1);
28 TEST_EQ_PTR(str1->interpreter, interp1);
29
30 /* MAIN TEST: interning the string from interp1 into interp2
31 * should return a duplicated pointer that is local to interp2 */
32 str2 = SEE_intern(interp2, str1);
33 TEST_NOT_NULL(str2);
34 TEST_NOT_EQ_PTR(str1, str2);
35 TEST_EQ_STRING(str1, str2);
36 TEST_EQ_PTR(str2->interpreter, interp2);
37 TEST_EQ_PTR(str1->interpreter, interp1);
38
39 /* Re-interning the str1 in interp1 shouldn't change it */
40 s = SEE_intern(interp1, str1);
41 TEST_EQ_PTR(s, str1);
42 TEST_EQ_PTR(s->interpreter, interp1);
43
44 /* Re-interning the str2 in interp2 shouldn't change it */
45 s = SEE_intern(interp2, str2);
46 TEST_EQ_PTR(s, str2);
47 TEST_EQ_PTR(s->interpreter, interp2);
48
49 /* Re-interning str2 into interp1 should get str1! */
50 s = SEE_intern(interp1, str2);
51 TEST_EQ_PTR(s, str1);
52
53 /* Interning the global "something" should always result in gstr */
54 s = SEE_intern(interp1, gstr);
55 TEST_EQ_PTR(s, gstr);
56 s = SEE_intern_ascii(interp1, "something");
57 TEST_EQ_PTR(s, gstr);
58 s = SEE_intern(interp2, gstr);
59 TEST_EQ_PTR(s, gstr);
60 s = SEE_intern_ascii(interp2, "something");
61 TEST_EQ_PTR(s, gstr);
62 }
63