diff tests/mini/aa7.d @ 490:f8c979770af3

Fixed a critical bug in the runtime, where _d_allocmemoryT would mark the memory block as having pointers (for scanning) opposite of what it should. So pointers would not be seen and freed. Should fix a bunch of regressions with AAs.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 10 Aug 2008 17:28:01 +0200
parents a34078905d01
children
line wrap: on
line diff
--- a/tests/mini/aa7.d	Sun Aug 10 13:42:08 2008 +0200
+++ b/tests/mini/aa7.d	Sun Aug 10 17:28:01 2008 +0200
@@ -1,56 +1,19 @@
-// adapted from dstress.run.a.associative_array_19_A to catch regressions early
+// adapted from dstress.run.a.associative_array_19_<n> to catch regressions early
 
 module mini.aa7;
 
 extern (C) int printf(char*, ...);
-
 extern (C) void gc_collect();
 
-union Key{
-    char x;
-}
-
-class Payload {
-    this(Key value) {
-        value.x += 1;
-        _value = value;
-    }
-
-    Key value() {
-        return _value;
-    }
-
-    Key _value;
-}
 
 int main(){
-    Payload[Key] aa;
-
-    Key[] allKeys;
-    static Key a = { 'a' };
-    static Key b = { 'b' };
-    static Key c = { 'c' };
-    allKeys ~= a;
-    allKeys ~= b;
-    allKeys ~= c;
-
-    foreach(Key key; allKeys) {
-        aa[key] = new Payload(key);
-    }
+    char*[char] aa;
 
-    int i = 0;
-    foreach(Key key; allKeys) {
-        printf("1st #%d\n", i++);
-        assert(key in aa);
-    }
-
+    char key = 'a';
+    aa[key] = &key;
     gc_collect();
-
-    i = 0;
-    foreach(Key key; allKeys) {
-        printf("2nd #%d\n", i++);
-        assert(key in aa);
-    }
+    assert(aa[key] == &key);
+    assert(key in aa);
 
     return 0;
 }