58 lines
2.1 KiB
C++
58 lines
2.1 KiB
C++
|
// Copyright 2016 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include <cmath>
|
||
|
#include <iostream>
|
||
|
#include <limits>
|
||
|
|
||
|
#include "src/objects-inl.h"
|
||
|
#include "src/objects.h"
|
||
|
|
||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||
|
|
||
|
namespace v8 {
|
||
|
namespace internal {
|
||
|
|
||
|
TEST(Object, InstanceTypeListOrder) {
|
||
|
int current = 0;
|
||
|
int last = -1;
|
||
|
InstanceType current_type = static_cast<InstanceType>(current);
|
||
|
EXPECT_EQ(current_type, InstanceType::FIRST_TYPE);
|
||
|
EXPECT_EQ(current_type, InstanceType::INTERNALIZED_STRING_TYPE);
|
||
|
#define TEST_INSTANCE_TYPE(type) \
|
||
|
current_type = InstanceType::type; \
|
||
|
current = static_cast<int>(current_type); \
|
||
|
if (current > static_cast<int>(LAST_NAME_TYPE)) { \
|
||
|
EXPECT_EQ(last + 1, current); \
|
||
|
} \
|
||
|
EXPECT_LT(last, current) << " INSTANCE_TYPE_LIST is not ordered: " \
|
||
|
<< "last = " << static_cast<InstanceType>(last) \
|
||
|
<< " vs. current = " << current_type; \
|
||
|
last = current;
|
||
|
|
||
|
INSTANCE_TYPE_LIST(TEST_INSTANCE_TYPE)
|
||
|
#undef TEST_INSTANCE_TYPE
|
||
|
}
|
||
|
|
||
|
TEST(Object, StructListOrder) {
|
||
|
int current = static_cast<int>(InstanceType::ACCESSOR_INFO_TYPE);
|
||
|
int last = current - 1;
|
||
|
ASSERT_LT(0, last);
|
||
|
InstanceType current_type = static_cast<InstanceType>(current);
|
||
|
#define TEST_STRUCT(type, class, name) \
|
||
|
current_type = InstanceType::type##_TYPE; \
|
||
|
current = static_cast<int>(current_type); \
|
||
|
EXPECT_EQ(last + 1, current) \
|
||
|
<< " STRUCT_LIST is not ordered: " \
|
||
|
<< " last = " << static_cast<InstanceType>(last) \
|
||
|
<< " vs. current = " << current_type; \
|
||
|
last = current;
|
||
|
|
||
|
STRUCT_LIST(TEST_STRUCT)
|
||
|
#undef TEST_STRUCT
|
||
|
}
|
||
|
|
||
|
} // namespace internal
|
||
|
} // namespace v8
|