xref: /aosp_15_r20/external/pigweed/pw_log_tokenized/metadata_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker #include "pw_log_tokenized/metadata.h"
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker #include "pw_unit_test/framework.h"
18*61c4878aSAndroid Build Coastguard Worker 
19*61c4878aSAndroid Build Coastguard Worker namespace pw::log_tokenized {
20*61c4878aSAndroid Build Coastguard Worker namespace {
21*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,NoLineBits)22*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, NoLineBits) {
23*61c4878aSAndroid Build Coastguard Worker   using NoLineBits = GenericMetadata<6, 0, 10, 16>;
24*61c4878aSAndroid Build Coastguard Worker 
25*61c4878aSAndroid Build Coastguard Worker   constexpr NoLineBits test1 = NoLineBits::Set<0, 0, 0>();
26*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.level() == 0);
27*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.module() == 0);
28*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.flags() == 0);
29*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.line_number() == 0);
30*61c4878aSAndroid Build Coastguard Worker 
31*61c4878aSAndroid Build Coastguard Worker   constexpr NoLineBits test2 = NoLineBits::Set<3, 2, 1>();
32*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.level() == 3);
33*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.module() == 2);
34*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.flags() == 1);
35*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.line_number() == 0);
36*61c4878aSAndroid Build Coastguard Worker 
37*61c4878aSAndroid Build Coastguard Worker   constexpr NoLineBits test3 = NoLineBits::Set<63, 65535, 1023>();
38*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.level() == 63);
39*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.module() == 65535);
40*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.flags() == 1023);
41*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.line_number() == 0);
42*61c4878aSAndroid Build Coastguard Worker }
43*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,NoFlagBits)44*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, NoFlagBits) {
45*61c4878aSAndroid Build Coastguard Worker   using NoFlagBits = GenericMetadata<3, 13, 0, 16>;
46*61c4878aSAndroid Build Coastguard Worker 
47*61c4878aSAndroid Build Coastguard Worker   constexpr NoFlagBits test1 = NoFlagBits::Set<0, 0, 0, 0>();
48*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.level() == 0);
49*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.module() == 0);
50*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.flags() == 0);
51*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.line_number() == 0);
52*61c4878aSAndroid Build Coastguard Worker 
53*61c4878aSAndroid Build Coastguard Worker   constexpr NoFlagBits test2 = NoFlagBits::Set<3, 2, 0, 1>();
54*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.level() == 3);
55*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.module() == 2);
56*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.flags() == 0);
57*61c4878aSAndroid Build Coastguard Worker   static_assert(test2.line_number() == 1);
58*61c4878aSAndroid Build Coastguard Worker 
59*61c4878aSAndroid Build Coastguard Worker   constexpr NoFlagBits test3 = NoFlagBits::Set<7, 65535, 0, (1 << 13) - 1>();
60*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.level() == 7);
61*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.module() == 65535);
62*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.flags() == 0);
63*61c4878aSAndroid Build Coastguard Worker   static_assert(test3.line_number() == (1 << 13) - 1);
64*61c4878aSAndroid Build Coastguard Worker }
65*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,EncodedValue_Zero)66*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, EncodedValue_Zero) {
67*61c4878aSAndroid Build Coastguard Worker   constexpr Metadata test1 = Metadata::Set<0, 0, 0, 0>();
68*61c4878aSAndroid Build Coastguard Worker   static_assert(test1.value() == 0);
69*61c4878aSAndroid Build Coastguard Worker }
70*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,EncodedValue_Nonzero)71*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, EncodedValue_Nonzero) {
72*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedLevel = 3;
73*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedLine = 2022;
74*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedFlags = 0b10;
75*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedModule = 1337;
76*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedValue =
77*61c4878aSAndroid Build Coastguard Worker       (kExpectedLevel) | (kExpectedLine << PW_LOG_TOKENIZED_LEVEL_BITS) |
78*61c4878aSAndroid Build Coastguard Worker       (kExpectedFlags << (PW_LOG_TOKENIZED_LEVEL_BITS +
79*61c4878aSAndroid Build Coastguard Worker                           PW_LOG_TOKENIZED_LINE_BITS)) |
80*61c4878aSAndroid Build Coastguard Worker       (kExpectedModule << (PW_LOG_TOKENIZED_LEVEL_BITS +
81*61c4878aSAndroid Build Coastguard Worker                            PW_LOG_TOKENIZED_LINE_BITS +
82*61c4878aSAndroid Build Coastguard Worker                            PW_LOG_TOKENIZED_FLAG_BITS));
83*61c4878aSAndroid Build Coastguard Worker   constexpr Metadata test = Metadata::
84*61c4878aSAndroid Build Coastguard Worker       Set<kExpectedLevel, kExpectedModule, kExpectedFlags, kExpectedLine>();
85*61c4878aSAndroid Build Coastguard Worker   static_assert(test.value() == kExpectedValue);
86*61c4878aSAndroid Build Coastguard Worker }
87*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,EncodedValue_NonzeroConstructor)88*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, EncodedValue_NonzeroConstructor) {
89*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedLevel = 1;
90*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedLine = 99;
91*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedFlags = 0b11;
92*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedModule = 8900;
93*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedValue =
94*61c4878aSAndroid Build Coastguard Worker       (kExpectedLevel) | (kExpectedLine << PW_LOG_TOKENIZED_LEVEL_BITS) |
95*61c4878aSAndroid Build Coastguard Worker       (kExpectedFlags << (PW_LOG_TOKENIZED_LEVEL_BITS +
96*61c4878aSAndroid Build Coastguard Worker                           PW_LOG_TOKENIZED_LINE_BITS)) |
97*61c4878aSAndroid Build Coastguard Worker       (kExpectedModule << (PW_LOG_TOKENIZED_LEVEL_BITS +
98*61c4878aSAndroid Build Coastguard Worker                            PW_LOG_TOKENIZED_LINE_BITS +
99*61c4878aSAndroid Build Coastguard Worker                            PW_LOG_TOKENIZED_FLAG_BITS));
100*61c4878aSAndroid Build Coastguard Worker   constexpr Metadata test =
101*61c4878aSAndroid Build Coastguard Worker       Metadata(kExpectedLevel, kExpectedModule, kExpectedFlags, kExpectedLine);
102*61c4878aSAndroid Build Coastguard Worker   static_assert(test.value() == kExpectedValue);
103*61c4878aSAndroid Build Coastguard Worker }
104*61c4878aSAndroid Build Coastguard Worker 
TEST(Metadata,EncodedValue_Overflow)105*61c4878aSAndroid Build Coastguard Worker TEST(Metadata, EncodedValue_Overflow) {
106*61c4878aSAndroid Build Coastguard Worker   constexpr size_t kExpectedLevel = 144;
107*61c4878aSAndroid Build Coastguard Worker   constexpr Metadata test = Metadata(kExpectedLevel, 0, 0, 0);
108*61c4878aSAndroid Build Coastguard Worker   static_assert(test.value() == 0);
109*61c4878aSAndroid Build Coastguard Worker }
110*61c4878aSAndroid Build Coastguard Worker 
111*61c4878aSAndroid Build Coastguard Worker }  // namespace
112*61c4878aSAndroid Build Coastguard Worker }  // namespace pw::log_tokenized
113