OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 v8::HandleScope scope; | 1019 v8::HandleScope scope; |
1020 LocalContext env; | 1020 LocalContext env; |
1021 uint32_t INT32_MAX_AS_UINT = (1U << 31) - 1; | 1021 uint32_t INT32_MAX_AS_UINT = (1U << 31) - 1; |
1022 uint32_t value = INT32_MAX_AS_UINT + 1; | 1022 uint32_t value = INT32_MAX_AS_UINT + 1; |
1023 CHECK(value > INT32_MAX_AS_UINT); // No overflow. | 1023 CHECK(value > INT32_MAX_AS_UINT); // No overflow. |
1024 Local<v8::Integer> value_obj = v8::Integer::NewFromUnsigned(value); | 1024 Local<v8::Integer> value_obj = v8::Integer::NewFromUnsigned(value); |
1025 CHECK_EQ(static_cast<int64_t>(value), value_obj->Value()); | 1025 CHECK_EQ(static_cast<int64_t>(value), value_obj->Value()); |
1026 } | 1026 } |
1027 | 1027 |
1028 | 1028 |
| 1029 THREADED_TEST(IsNativeError) { |
| 1030 v8::HandleScope scope; |
| 1031 LocalContext env; |
| 1032 v8::Handle<Value> syntax_error = CompileRun( |
| 1033 "var out = 0; try { eval(\"#\"); } catch(x) { out = x; } out; "); |
| 1034 CHECK(syntax_error->IsNativeError()); |
| 1035 v8::Handle<Value> not_error = CompileRun("{a:42}"); |
| 1036 CHECK(!not_error->IsNativeError()); |
| 1037 v8::Handle<Value> not_object = CompileRun("42"); |
| 1038 CHECK(!not_object->IsNativeError()); |
| 1039 } |
| 1040 |
| 1041 |
| 1042 THREADED_TEST(StringObject) { |
| 1043 v8::HandleScope scope; |
| 1044 LocalContext env; |
| 1045 v8::Handle<Value> boxed_string = CompileRun("new String(\"test\")"); |
| 1046 CHECK(boxed_string->IsStringObject()); |
| 1047 v8::Handle<Value> unboxed_string = CompileRun("\"test\""); |
| 1048 CHECK(!unboxed_string->IsStringObject()); |
| 1049 v8::Handle<Value> boxed_not_string = CompileRun("new Number(42)"); |
| 1050 CHECK(!boxed_not_string->IsStringObject()); |
| 1051 v8::Handle<Value> not_object = CompileRun("0"); |
| 1052 CHECK(!not_object->IsStringObject()); |
| 1053 v8::Handle<v8::StringObject> as_boxed = boxed_string.As<v8::StringObject>(); |
| 1054 CHECK(!as_boxed.IsEmpty()); |
| 1055 Local<v8::String> the_string = as_boxed->StringValue(); |
| 1056 CHECK(!the_string.IsEmpty()); |
| 1057 ExpectObject("\"test\"", the_string); |
| 1058 v8::Handle<v8::Value> new_boxed_string = v8::StringObject::New(the_string); |
| 1059 CHECK(new_boxed_string->IsStringObject()); |
| 1060 as_boxed = new_boxed_string.As<v8::StringObject>(); |
| 1061 the_string = as_boxed->StringValue(); |
| 1062 CHECK(!the_string.IsEmpty()); |
| 1063 ExpectObject("\"test\"", the_string); |
| 1064 } |
| 1065 |
| 1066 |
| 1067 THREADED_TEST(NumberObject) { |
| 1068 v8::HandleScope scope; |
| 1069 LocalContext env; |
| 1070 v8::Handle<Value> boxed_number = CompileRun("new Number(42)"); |
| 1071 CHECK(boxed_number->IsNumberObject()); |
| 1072 v8::Handle<Value> unboxed_number = CompileRun("42"); |
| 1073 CHECK(!unboxed_number->IsNumberObject()); |
| 1074 v8::Handle<Value> boxed_not_number = CompileRun("new Boolean(false)"); |
| 1075 CHECK(!boxed_not_number->IsNumberObject()); |
| 1076 v8::Handle<v8::NumberObject> as_boxed = boxed_number.As<v8::NumberObject>(); |
| 1077 CHECK(!as_boxed.IsEmpty()); |
| 1078 double the_number = as_boxed->NumberValue(); |
| 1079 CHECK_EQ(42.0, the_number); |
| 1080 v8::Handle<v8::Value> new_boxed_number = v8::NumberObject::New(43); |
| 1081 CHECK(new_boxed_number->IsNumberObject()); |
| 1082 as_boxed = new_boxed_number.As<v8::NumberObject>(); |
| 1083 the_number = as_boxed->NumberValue(); |
| 1084 CHECK_EQ(43.0, the_number); |
| 1085 } |
| 1086 |
| 1087 |
| 1088 THREADED_TEST(BooleanObject) { |
| 1089 v8::HandleScope scope; |
| 1090 LocalContext env; |
| 1091 v8::Handle<Value> boxed_boolean = CompileRun("new Boolean(true)"); |
| 1092 CHECK(boxed_boolean->IsBooleanObject()); |
| 1093 v8::Handle<Value> unboxed_boolean = CompileRun("true"); |
| 1094 CHECK(!unboxed_boolean->IsBooleanObject()); |
| 1095 v8::Handle<Value> boxed_not_boolean = CompileRun("new Number(42)"); |
| 1096 CHECK(!boxed_not_boolean->IsBooleanObject()); |
| 1097 v8::Handle<v8::BooleanObject> as_boxed = |
| 1098 boxed_boolean.As<v8::BooleanObject>(); |
| 1099 CHECK(!as_boxed.IsEmpty()); |
| 1100 bool the_boolean = as_boxed->BooleanValue(); |
| 1101 CHECK_EQ(true, the_boolean); |
| 1102 v8::Handle<v8::Value> boxed_true = v8::BooleanObject::New(true); |
| 1103 v8::Handle<v8::Value> boxed_false = v8::BooleanObject::New(false); |
| 1104 CHECK(boxed_true->IsBooleanObject()); |
| 1105 CHECK(boxed_false->IsBooleanObject()); |
| 1106 as_boxed = boxed_true.As<v8::BooleanObject>(); |
| 1107 CHECK_EQ(true, as_boxed->BooleanValue()); |
| 1108 as_boxed = boxed_false.As<v8::BooleanObject>(); |
| 1109 CHECK_EQ(false, as_boxed->BooleanValue()); |
| 1110 } |
| 1111 |
| 1112 |
1029 THREADED_TEST(Number) { | 1113 THREADED_TEST(Number) { |
1030 v8::HandleScope scope; | 1114 v8::HandleScope scope; |
1031 LocalContext env; | 1115 LocalContext env; |
1032 double PI = 3.1415926; | 1116 double PI = 3.1415926; |
1033 Local<v8::Number> pi_obj = v8::Number::New(PI); | 1117 Local<v8::Number> pi_obj = v8::Number::New(PI); |
1034 CHECK_EQ(PI, pi_obj->NumberValue()); | 1118 CHECK_EQ(PI, pi_obj->NumberValue()); |
1035 } | 1119 } |
1036 | 1120 |
1037 | 1121 |
1038 THREADED_TEST(ToNumber) { | 1122 THREADED_TEST(ToNumber) { |
(...skipping 13640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14679 } | 14763 } |
14680 | 14764 |
14681 i::Isolate::Current()->heap()->CollectAllGarbage(true); | 14765 i::Isolate::Current()->heap()->CollectAllGarbage(true); |
14682 { i::Object* raw_map_cache = i::Isolate::Current()->context()->map_cache(); | 14766 { i::Object* raw_map_cache = i::Isolate::Current()->context()->map_cache(); |
14683 if (raw_map_cache != i::Isolate::Current()->heap()->undefined_value()) { | 14767 if (raw_map_cache != i::Isolate::Current()->heap()->undefined_value()) { |
14684 i::MapCache* map_cache = i::MapCache::cast(raw_map_cache); | 14768 i::MapCache* map_cache = i::MapCache::cast(raw_map_cache); |
14685 CHECK_GT(elements, map_cache->NumberOfElements()); | 14769 CHECK_GT(elements, map_cache->NumberOfElements()); |
14686 } | 14770 } |
14687 } | 14771 } |
14688 } | 14772 } |
OLD | NEW |