diff options
Diffstat (limited to 'runtime/primitive_test.cc')
-rw-r--r-- | runtime/primitive_test.cc | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/runtime/primitive_test.cc b/runtime/primitive_test.cc new file mode 100644 index 0000000000..e433b15b61 --- /dev/null +++ b/runtime/primitive_test.cc @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "primitive.h" + +#include "gtest/gtest.h" + +namespace art { + +namespace { + +void CheckPrimitiveTypeWidensTo(Primitive::Type from, + const std::vector<Primitive::Type>& expected_to_types) { + std::vector<Primitive::Type> actual_to_types; + int last = static_cast<int>(Primitive::Type::kPrimLast); + for (int i = 0; i <= last; ++i) { + Primitive::Type to = static_cast<Primitive::Type>(i); + if (Primitive::IsWidenable(from, to)) { + actual_to_types.push_back(to); + } + } + EXPECT_EQ(expected_to_types, actual_to_types); +} + +} // namespace + +TEST(PrimitiveTest, NotWidensTo) { + const std::vector<Primitive::Type> to_types = {}; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimNot, to_types); +} + +TEST(PrimitiveTest, BooleanWidensTo) { + const std::vector<Primitive::Type> to_types = {}; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimBoolean, to_types); +} + +TEST(PrimitiveTest, ByteWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimByte, + Primitive::Type::kPrimShort, + Primitive::Type::kPrimInt, + Primitive::Type::kPrimLong, + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimByte, to_types); +} + +TEST(PrimitiveTest, CharWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimChar, + Primitive::Type::kPrimInt, + Primitive::Type::kPrimLong, + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimChar, to_types); +} + +TEST(PrimitiveTest, ShortWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimShort, + Primitive::Type::kPrimInt, + Primitive::Type::kPrimLong, + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimShort, to_types); +} + +TEST(PrimitiveTest, IntWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimInt, + Primitive::Type::kPrimLong, + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimInt, to_types); +} + +TEST(PrimitiveTest, LongWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimLong, + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimLong, to_types); +} + +TEST(PrimitiveTest, FloatWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimFloat, + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimFloat, to_types); +} + +TEST(PrimitiveTest, DoubleWidensTo) { + const std::vector<Primitive::Type> to_types = { + Primitive::Type::kPrimDouble, + }; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimDouble, to_types); +} + +TEST(PrimitiveTest, VoidWidensTo) { + const std::vector<Primitive::Type> to_types = {}; + CheckPrimitiveTypeWidensTo(Primitive::Type::kPrimVoid, to_types); +} + +} // namespace art |