Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Side by Side Diff: runtime/vm/object_test.cc

Issue 10832199: Add a weak property type to the virtual machine. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: minor clean-up Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/assert.h" 5 #include "platform/assert.h"
6 #include "vm/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/object_store.h" 10 #include "vm/object_store.h"
(...skipping 2850 matching lines...) Expand 10 before | Expand all | Expand 10 after
2861 "#3 _bar (dart:test-lib:16:3)\n" 2861 "#3 _bar (dart:test-lib:16:3)\n"
2862 "#4 MyClass.field (dart:test-lib:25:9)\n" 2862 "#4 MyClass.field (dart:test-lib:25:9)\n"
2863 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n" 2863 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n"
2864 "#6 MyClass.foo (dart:test-lib:32:14)\n" 2864 "#6 MyClass.foo (dart:test-lib:32:14)\n"
2865 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n" 2865 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n"
2866 "#8 MyClass.MyClass (dart:test-lib:21:18)\n" 2866 "#8 MyClass.MyClass (dart:test-lib:21:18)\n"
2867 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n" 2867 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n"
2868 "#10 main (dart:test-lib:37:24)"); 2868 "#10 main (dart:test-lib:37:24)");
2869 } 2869 }
2870 2870
2871
2872 TEST_CASE(WeakProperty_PreserveOne_NewSpace) {
turnidge 2012/08/09 18:34:34 Tests look good to me.
cshapiro 2012/08/14 04:58:18 Thanks!
2873 Isolate* isolate = Isolate::Current();
2874 WeakProperty& weak = WeakProperty::Handle();
2875 OneByteString& key = OneByteString::Handle();
2876 key ^= OneByteString::New("key");
2877 {
2878 HANDLESCOPE(isolate);
2879 OneByteString& value = OneByteString::Handle();
2880 value ^= OneByteString::New("value");
2881 weak ^= WeakProperty::New();
2882 weak.set_key(key);
2883 weak.set_value(value);
2884 }
2885 isolate->heap()->CollectAllGarbage();
2886 EXPECT(weak.key() != Object::null());
2887 EXPECT(weak.value() != Object::null());
2888 }
2889
2890
2891 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) {
2892 Isolate* isolate = Isolate::Current();
2893 WeakProperty& weak1 = WeakProperty::Handle();
2894 OneByteString& key1 = OneByteString::Handle();
2895 key1 ^= OneByteString::New("key1");
2896 WeakProperty& weak2 = WeakProperty::Handle();
2897 OneByteString& key2 = OneByteString::Handle();
2898 key2 ^= OneByteString::New("key2");
2899 {
2900 HANDLESCOPE(isolate);
2901 OneByteString& value1 = OneByteString::Handle();
2902 value1 ^= OneByteString::New("value1");
2903 weak1 ^= WeakProperty::New();
2904 weak1.set_key(key1);
2905 weak1.set_value(value1);
2906 OneByteString& value2 = OneByteString::Handle();
2907 value2 ^= OneByteString::New("value2");
2908 weak2 ^= WeakProperty::New();
2909 weak2.set_key(key2);
2910 weak2.set_value(value2);
2911 }
2912 isolate->heap()->CollectAllGarbage();
2913 EXPECT(weak1.key() != Object::null());
2914 EXPECT(weak1.value() != Object::null());
2915 EXPECT(weak2.key() != Object::null());
2916 EXPECT(weak2.value() != Object::null());
2917 }
2918
2919
2920 TEST_CASE(WeakProperty_PreserveTwoShared_NewSpace) {
2921 Isolate* isolate = Isolate::Current();
2922 WeakProperty& weak1 = WeakProperty::Handle();
2923 WeakProperty& weak2 = WeakProperty::Handle();
2924 OneByteString& key = OneByteString::Handle();
2925 key ^= OneByteString::New("key");
2926 {
2927 HANDLESCOPE(isolate);
2928 OneByteString& value1 = OneByteString::Handle();
2929 value1 ^= OneByteString::New("value1");
2930 weak1 ^= WeakProperty::New();
2931 weak1.set_key(key);
2932 weak1.set_value(value1);
2933 OneByteString& value2 = OneByteString::Handle();
2934 value2 ^= OneByteString::New("value2");
2935 weak2 ^= WeakProperty::New();
2936 weak2.set_key(key);
2937 weak2.set_value(value2);
2938 }
2939 isolate->heap()->CollectAllGarbage();
2940 EXPECT(weak1.key() != Object::null());
2941 EXPECT(weak1.value() != Object::null());
2942 EXPECT(weak2.key() != Object::null());
2943 EXPECT(weak2.value() != Object::null());
2944 }
2945
2946
2947 TEST_CASE(WeakProperty_PreserveOne_OldSpace) {
2948 Isolate* isolate = Isolate::Current();
2949 WeakProperty& weak = WeakProperty::Handle();
2950 OneByteString& key = OneByteString::Handle();
2951 key ^= OneByteString::New("key", Heap::kOld);
2952 {
2953 HANDLESCOPE(isolate);
2954 OneByteString& value = OneByteString::Handle();
2955 value ^= OneByteString::New("value", Heap::kOld);
2956 weak ^= WeakProperty::New(Heap::kOld);
2957 weak.set_key(key);
2958 weak.set_value(value);
2959 }
2960 isolate->heap()->CollectAllGarbage();
2961 EXPECT(weak.key() != Object::null());
2962 EXPECT(weak.value() != Object::null());
2963 }
2964
2965
2966 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) {
2967 Isolate* isolate = Isolate::Current();
2968 WeakProperty& weak1 = WeakProperty::Handle();
2969 OneByteString& key1 = OneByteString::Handle();
2970 key1 ^= OneByteString::New("key1", Heap::kOld);
2971 WeakProperty& weak2 = WeakProperty::Handle();
2972 OneByteString& key2 = OneByteString::Handle();
2973 key2 ^= OneByteString::New("key2", Heap::kOld);
2974 {
2975 HANDLESCOPE(isolate);
2976 OneByteString& value1 = OneByteString::Handle();
2977 value1 ^= OneByteString::New("value1", Heap::kOld);
2978 weak1 ^= WeakProperty::New(Heap::kOld);
2979 weak1.set_key(key1);
2980 weak1.set_value(value1);
2981 OneByteString& value2 = OneByteString::Handle();
2982 value2 ^= OneByteString::New("value2", Heap::kOld);
2983 weak2 ^= WeakProperty::New(Heap::kOld);
2984 weak2.set_key(key2);
2985 weak2.set_value(value2);
2986 }
2987 isolate->heap()->CollectAllGarbage();
2988 EXPECT(weak1.key() != Object::null());
2989 EXPECT(weak1.value() != Object::null());
2990 EXPECT(weak2.key() != Object::null());
2991 EXPECT(weak2.value() != Object::null());
2992 }
2993
2994
2995 TEST_CASE(WeakProperty_PreserveTwoShared_OldSpace) {
2996 Isolate* isolate = Isolate::Current();
2997 WeakProperty& weak1 = WeakProperty::Handle();
2998 WeakProperty& weak2 = WeakProperty::Handle();
2999 OneByteString& key = OneByteString::Handle();
3000 key ^= OneByteString::New("key", Heap::kOld);
3001 {
3002 HANDLESCOPE(isolate);
3003 OneByteString& value1 = OneByteString::Handle();
3004 value1 ^= OneByteString::New("value1", Heap::kOld);
3005 weak1 ^= WeakProperty::New(Heap::kOld);
3006 weak1.set_key(key);
3007 weak1.set_value(value1);
3008 OneByteString& value2 = OneByteString::Handle();
3009 value2 ^= OneByteString::New("value2", Heap::kOld);
3010 weak2 ^= WeakProperty::New(Heap::kOld);
3011 weak2.set_key(key);
3012 weak2.set_value(value2);
3013 }
3014 isolate->heap()->CollectAllGarbage();
3015 EXPECT(weak1.key() != Object::null());
3016 EXPECT(weak1.value() != Object::null());
3017 EXPECT(weak2.key() != Object::null());
3018 EXPECT(weak2.value() != Object::null());
3019 }
3020
3021
3022 TEST_CASE(WeakProperty_ClearOne_NewSpace) {
3023 Isolate* isolate = Isolate::Current();
3024 WeakProperty& weak = WeakProperty::Handle();
3025 {
3026 HANDLESCOPE(isolate);
3027 OneByteString& key = OneByteString::Handle();
3028 key ^= OneByteString::New("key");
3029 OneByteString& value = OneByteString::Handle();
3030 value ^= OneByteString::New("value");
3031 weak ^= WeakProperty::New();
3032 weak.set_key(key);
3033 weak.set_value(value);
3034 key ^= OneByteString::null();
3035 value ^= OneByteString::null();
3036 }
3037 isolate->heap()->CollectAllGarbage();
3038 EXPECT(weak.key() == Object::null());
3039 EXPECT(weak.value() == Object::null());
3040 }
3041
3042
3043 TEST_CASE(WeakProperty_ClearTwoShared_NewSpace) {
3044 Isolate* isolate = Isolate::Current();
3045 WeakProperty& weak1 = WeakProperty::Handle();
3046 WeakProperty& weak2 = WeakProperty::Handle();
3047 {
3048 HANDLESCOPE(isolate);
3049 OneByteString& key = OneByteString::Handle();
3050 key ^= OneByteString::New("key");
3051 OneByteString& value1 = OneByteString::Handle();
3052 value1 ^= OneByteString::New("value1");
3053 weak1 ^= WeakProperty::New();
3054 weak1.set_key(key);
3055 weak1.set_value(value1);
3056 OneByteString& value2 = OneByteString::Handle();
3057 value2 ^= OneByteString::New("value2");
3058 weak2 ^= WeakProperty::New();
3059 weak2.set_key(key);
3060 weak2.set_value(value2);
3061 }
3062 isolate->heap()->CollectAllGarbage();
3063 EXPECT(weak1.key() == Object::null());
3064 EXPECT(weak1.value() == Object::null());
3065 EXPECT(weak2.key() == Object::null());
3066 EXPECT(weak2.value() == Object::null());
3067 }
3068
3069
3070 TEST_CASE(WeakProperty_ClearOne_OldSpace) {
3071 Isolate* isolate = Isolate::Current();
3072 WeakProperty& weak = WeakProperty::Handle();
3073 {
3074 HANDLESCOPE(isolate);
3075 OneByteString& key = OneByteString::Handle();
3076 key ^= OneByteString::New("key", Heap::kOld);
3077 OneByteString& value = OneByteString::Handle();
3078 value ^= OneByteString::New("value", Heap::kOld);
3079 weak ^= WeakProperty::New(Heap::kOld);
3080 weak.set_key(key);
3081 weak.set_value(value);
3082 key ^= OneByteString::null();
3083 value ^= OneByteString::null();
3084 }
3085 isolate->heap()->CollectAllGarbage();
3086 EXPECT(weak.key() == Object::null());
3087 EXPECT(weak.value() == Object::null());
3088 }
3089
3090
3091 TEST_CASE(WeakProperty_ClearTwoShared_OldSpace) {
3092 Isolate* isolate = Isolate::Current();
3093 WeakProperty& weak1 = WeakProperty::Handle();
3094 WeakProperty& weak2 = WeakProperty::Handle();
3095 {
3096 HANDLESCOPE(isolate);
3097 OneByteString& key = OneByteString::Handle();
3098 key ^= OneByteString::New("key", Heap::kOld);
3099 OneByteString& value1 = OneByteString::Handle();
3100 value1 ^= OneByteString::New("value1");
3101 weak1 ^= WeakProperty::New(Heap::kOld);
3102 weak1.set_key(key);
3103 weak1.set_value(value1);
3104 OneByteString& value2 = OneByteString::Handle();
3105 value2 ^= OneByteString::New("value2", Heap::kOld);
3106 weak2 ^= WeakProperty::New(Heap::kOld);
3107 weak2.set_key(key);
3108 weak2.set_value(value2);
3109 }
3110 isolate->heap()->CollectAllGarbage();
3111 EXPECT(weak1.key() == Object::null());
3112 EXPECT(weak1.value() == Object::null());
3113 EXPECT(weak2.key() == Object::null());
3114 EXPECT(weak2.value() == Object::null());
3115 }
3116
2871 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 3117 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
2872 3118
2873 } // namespace dart 3119 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698