| // Protocol Buffers - Google's data interchange format |
| // Copyright 2025 Google LLC. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| |
| #include "conformance/binary_test_util.h" |
| |
| #include <set> |
| #include <vector> |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include "google/protobuf/descriptor.h" |
| |
| namespace google { |
| namespace protobuf { |
| namespace conformance { |
| namespace { |
| |
| using ::testing::ElementsAreArray; |
| using ::testing::UnorderedElementsAreArray; |
| |
| // Enumerates FieldDescriptor::Type independently of the table. |
| TEST(AllFieldTypesExceptGroupTest, IsEveryTypeButGroup) { |
| std::set<FieldDescriptor::Type> all_but_group; |
| for (int i = 1; i <= FieldDescriptor::MAX_TYPE; ++i) { |
| all_but_group.insert(static_cast<FieldDescriptor::Type>(i)); |
| } |
| all_but_group.erase(FieldDescriptor::TYPE_GROUP); |
| EXPECT_THAT(AllFieldTypesExceptGroup(), |
| UnorderedElementsAreArray(all_but_group)); |
| } |
| |
| TEST(PackableFieldTypesTest, IsThePackableSubsetInTableOrder) { |
| std::vector<FieldDescriptor::Type> packable; |
| for (FieldDescriptor::Type type : AllFieldTypesExceptGroup()) { |
| if (FieldDescriptor::IsTypePackable(type)) packable.push_back(type); |
| } |
| EXPECT_THAT(PackableFieldTypes(), ElementsAreArray(packable)); |
| } |
| |
| TEST(LengthDelimitedFieldTypesTest, IsTheNonPackableSubsetInTableOrder) { |
| std::vector<FieldDescriptor::Type> non_packable; |
| for (FieldDescriptor::Type type : AllFieldTypesExceptGroup()) { |
| if (!FieldDescriptor::IsTypePackable(type)) non_packable.push_back(type); |
| } |
| EXPECT_THAT(LengthDelimitedFieldTypes(), ElementsAreArray(non_packable)); |
| } |
| |
| } // namespace |
| } // namespace conformance |
| } // namespace protobuf |
| } // namespace google |