1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2024 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #include <broadcastradio-utils-aidl/Utils.h>
18*4d7e907cSAndroid Build Coastguard Worker #include <gtest/gtest.h>
19*4d7e907cSAndroid Build Coastguard Worker
20*4d7e907cSAndroid Build Coastguard Worker namespace aidl::android::hardware::broadcastradio {
21*4d7e907cSAndroid Build Coastguard Worker
22*4d7e907cSAndroid Build Coastguard Worker namespace {
23*4d7e907cSAndroid Build Coastguard Worker constexpr int64_t kFmFrequencyKHz = 97900;
24*4d7e907cSAndroid Build Coastguard Worker constexpr uint32_t kDabSid = 0x0000C221u;
25*4d7e907cSAndroid Build Coastguard Worker constexpr int kDabEccCode = 0xE1u;
26*4d7e907cSAndroid Build Coastguard Worker constexpr int kDabSCIdS = 0x1u;
27*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDabSidExt = static_cast<uint64_t>(kDabSid) |
28*4d7e907cSAndroid Build Coastguard Worker (static_cast<uint64_t>(kDabEccCode) << 32) |
29*4d7e907cSAndroid Build Coastguard Worker (static_cast<uint64_t>(kDabSCIdS) << 40);
30*4d7e907cSAndroid Build Coastguard Worker constexpr uint32_t kDabEnsemble = 0xCE15u;
31*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kDabFrequencyKhz = 225648u;
32*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdStationId = 0xA0000001u;
33*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdSubChannel = 1u;
34*4d7e907cSAndroid Build Coastguard Worker constexpr uint64_t kHdFrequency = 97700u;
35*4d7e907cSAndroid Build Coastguard Worker constexpr int64_t kRdsValue = 0xBEEF;
36*4d7e907cSAndroid Build Coastguard Worker
37*4d7e907cSAndroid Build Coastguard Worker const Properties kAmFmTunerProp = {
38*4d7e907cSAndroid Build Coastguard Worker .maker = "makerTest",
39*4d7e907cSAndroid Build Coastguard Worker .product = "productTest",
40*4d7e907cSAndroid Build Coastguard Worker .supportedIdentifierTypes = {IdentifierType::AMFM_FREQUENCY_KHZ, IdentifierType::RDS_PI,
41*4d7e907cSAndroid Build Coastguard Worker IdentifierType::HD_STATION_ID_EXT}};
42*4d7e907cSAndroid Build Coastguard Worker
43*4d7e907cSAndroid Build Coastguard Worker struct GetBandTestCase {
44*4d7e907cSAndroid Build Coastguard Worker std::string name;
45*4d7e907cSAndroid Build Coastguard Worker int64_t frequency;
46*4d7e907cSAndroid Build Coastguard Worker utils::FrequencyBand bandResult;
47*4d7e907cSAndroid Build Coastguard Worker };
48*4d7e907cSAndroid Build Coastguard Worker
getBandTestCases()49*4d7e907cSAndroid Build Coastguard Worker std::vector<GetBandTestCase> getBandTestCases() {
50*4d7e907cSAndroid Build Coastguard Worker return std::vector<GetBandTestCase>(
51*4d7e907cSAndroid Build Coastguard Worker {GetBandTestCase{.name = "unknown_low_band",
52*4d7e907cSAndroid Build Coastguard Worker .frequency = 0,
53*4d7e907cSAndroid Build Coastguard Worker .bandResult = utils::FrequencyBand::UNKNOWN},
54*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase{.name = "am_lw_band",
55*4d7e907cSAndroid Build Coastguard Worker .frequency = 30,
56*4d7e907cSAndroid Build Coastguard Worker .bandResult = utils::FrequencyBand::AM_LW},
57*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase{.name = "am_mw_band",
58*4d7e907cSAndroid Build Coastguard Worker .frequency = 700,
59*4d7e907cSAndroid Build Coastguard Worker .bandResult = utils::FrequencyBand::AM_MW},
60*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase{.name = "am_sw_band",
61*4d7e907cSAndroid Build Coastguard Worker .frequency = 2000,
62*4d7e907cSAndroid Build Coastguard Worker .bandResult = utils::FrequencyBand::AM_SW},
63*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase{
64*4d7e907cSAndroid Build Coastguard Worker .name = "fm_band", .frequency = 97900, .bandResult = utils::FrequencyBand::FM},
65*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase{.name = "unknown_high_band",
66*4d7e907cSAndroid Build Coastguard Worker .frequency = 110000,
67*4d7e907cSAndroid Build Coastguard Worker .bandResult = utils::FrequencyBand::UNKNOWN}});
68*4d7e907cSAndroid Build Coastguard Worker }
69*4d7e907cSAndroid Build Coastguard Worker } // namespace
70*4d7e907cSAndroid Build Coastguard Worker
71*4d7e907cSAndroid Build Coastguard Worker class GetBandTest : public testing::TestWithParam<GetBandTestCase> {};
72*4d7e907cSAndroid Build Coastguard Worker
73*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(GetBandTests, GetBandTest, testing::ValuesIn(getBandTestCases()),
__anonfc9d049b0202(const testing::TestParamInfo<GetBandTest::ParamType>& info) 74*4d7e907cSAndroid Build Coastguard Worker [](const testing::TestParamInfo<GetBandTest::ParamType>& info) {
75*4d7e907cSAndroid Build Coastguard Worker return info.param.name;
76*4d7e907cSAndroid Build Coastguard Worker });
77*4d7e907cSAndroid Build Coastguard Worker
TEST_P(GetBandTest,GetBand)78*4d7e907cSAndroid Build Coastguard Worker TEST_P(GetBandTest, GetBand) {
79*4d7e907cSAndroid Build Coastguard Worker GetBandTestCase testcase = GetParam();
80*4d7e907cSAndroid Build Coastguard Worker
81*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getBand(testcase.frequency), testcase.bandResult);
82*4d7e907cSAndroid Build Coastguard Worker }
83*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorBegin)84*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorBegin) {
85*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = {
86*4d7e907cSAndroid Build Coastguard Worker .primaryId = utils::makeIdentifier(IdentifierType::RDS_PI, kRdsValue),
87*4d7e907cSAndroid Build Coastguard Worker .secondaryIds = {
88*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
89*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ,
90*4d7e907cSAndroid Build Coastguard Worker kFmFrequencyKHz + 200)}};
91*4d7e907cSAndroid Build Coastguard Worker
92*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it = begin(sel);
93*4d7e907cSAndroid Build Coastguard Worker
94*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator selEnd = end(sel);
95*4d7e907cSAndroid Build Coastguard Worker ASSERT_NE(selEnd, it);
96*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId, *it);
97*4d7e907cSAndroid Build Coastguard Worker }
98*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorIncrement)99*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorIncrement) {
100*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = {
101*4d7e907cSAndroid Build Coastguard Worker .primaryId = utils::makeIdentifier(IdentifierType::RDS_PI, kRdsValue),
102*4d7e907cSAndroid Build Coastguard Worker .secondaryIds = {
103*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
104*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ,
105*4d7e907cSAndroid Build Coastguard Worker kFmFrequencyKHz + 200)}};
106*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it = begin(sel);
107*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator selEnd = end(sel);
108*4d7e907cSAndroid Build Coastguard Worker
109*4d7e907cSAndroid Build Coastguard Worker ASSERT_NE(selEnd, ++it);
110*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.secondaryIds[0], *it);
111*4d7e907cSAndroid Build Coastguard Worker ASSERT_NE(selEnd, ++it);
112*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.secondaryIds[1], *it);
113*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(selEnd, ++it);
114*4d7e907cSAndroid Build Coastguard Worker }
115*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorIncrementWithValue)116*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorIncrementWithValue) {
117*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = {
118*4d7e907cSAndroid Build Coastguard Worker .primaryId = utils::makeIdentifier(IdentifierType::RDS_PI, kRdsValue),
119*4d7e907cSAndroid Build Coastguard Worker .secondaryIds = {
120*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
121*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ,
122*4d7e907cSAndroid Build Coastguard Worker kFmFrequencyKHz + 200)}};
123*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it1 = begin(sel);
124*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it2 = it1;
125*4d7e907cSAndroid Build Coastguard Worker it2++;
126*4d7e907cSAndroid Build Coastguard Worker it2++;
127*4d7e907cSAndroid Build Coastguard Worker
128*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(it1 + 2, it2);
129*4d7e907cSAndroid Build Coastguard Worker }
130*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorBeginEndWithoutSecondaryIds)131*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorBeginEndWithoutSecondaryIds) {
132*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = {.primaryId = utils::makeIdentifier(IdentifierType::RDS_PI, kRdsValue)};
133*4d7e907cSAndroid Build Coastguard Worker
134*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it = begin(sel);
135*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator selEnd = end(sel);
136*4d7e907cSAndroid Build Coastguard Worker
137*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(selEnd, ++it);
138*4d7e907cSAndroid Build Coastguard Worker }
139*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorBeginEndWithDifferentObjects)140*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorBeginEndWithDifferentObjects) {
141*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorAmfm(kFmFrequencyKHz);
142*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorAmfm(kFmFrequencyKHz);
143*4d7e907cSAndroid Build Coastguard Worker
144*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it1 = begin(sel1);
145*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it2 = begin(sel2);
146*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator end1 = end(sel1);
147*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator end2 = end(sel2);
148*4d7e907cSAndroid Build Coastguard Worker
149*4d7e907cSAndroid Build Coastguard Worker ASSERT_NE(it1, it2);
150*4d7e907cSAndroid Build Coastguard Worker ASSERT_NE(end1, end2);
151*4d7e907cSAndroid Build Coastguard Worker }
152*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IdentifierIteratorBeginEndWithTheSameObject)153*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IdentifierIteratorBeginEndWithTheSameObject) {
154*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
155*4d7e907cSAndroid Build Coastguard Worker
156*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it1 = begin(sel);
157*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator it2 = begin(sel);
158*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator end1 = end(sel);
159*4d7e907cSAndroid Build Coastguard Worker utils::IdentifierIterator end2 = end(sel);
160*4d7e907cSAndroid Build Coastguard Worker
161*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(it1, it2);
162*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(end1, end2);
163*4d7e907cSAndroid Build Coastguard Worker }
164*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IsSupportedWithSupportedSelector)165*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IsSupportedWithSupportedSelector) {
166*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
167*4d7e907cSAndroid Build Coastguard Worker
168*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::isSupported(kAmFmTunerProp, sel));
169*4d7e907cSAndroid Build Coastguard Worker }
170*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,IsSupportedWithUnsupportedSelector)171*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, IsSupportedWithUnsupportedSelector) {
172*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
173*4d7e907cSAndroid Build Coastguard Worker
174*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::isSupported(kAmFmTunerProp, sel));
175*4d7e907cSAndroid Build Coastguard Worker }
176*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetBandWithFmFrequency)177*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetBandWithFmFrequency) {
178*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
179*4d7e907cSAndroid Build Coastguard Worker
180*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
181*4d7e907cSAndroid Build Coastguard Worker }
182*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasIdWithPrimaryIdType)183*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasIdWithPrimaryIdType) {
184*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
185*4d7e907cSAndroid Build Coastguard Worker
186*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
187*4d7e907cSAndroid Build Coastguard Worker }
188*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasIdWithSecondaryIdType)189*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasIdWithSecondaryIdType) {
190*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
191*4d7e907cSAndroid Build Coastguard Worker
192*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::hasId(sel, IdentifierType::DAB_FREQUENCY_KHZ));
193*4d7e907cSAndroid Build Coastguard Worker }
194*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasIdWithIdNotInSelector)195*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasIdWithIdNotInSelector) {
196*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
197*4d7e907cSAndroid Build Coastguard Worker
198*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
199*4d7e907cSAndroid Build Coastguard Worker }
200*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetIdWithPrimaryIdType)201*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetIdWithPrimaryIdType) {
202*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
203*4d7e907cSAndroid Build Coastguard Worker
204*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT), static_cast<int64_t>(kDabSidExt));
205*4d7e907cSAndroid Build Coastguard Worker }
206*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetIdWithSecondaryIdType)207*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetIdWithSecondaryIdType) {
208*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
209*4d7e907cSAndroid Build Coastguard Worker
210*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_ENSEMBLE), static_cast<int64_t>(kDabEnsemble));
211*4d7e907cSAndroid Build Coastguard Worker }
212*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetIdWithIdNotFound)213*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFound) {
214*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
215*4d7e907cSAndroid Build Coastguard Worker
216*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ), 0);
217*4d7e907cSAndroid Build Coastguard Worker }
218*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetIdWithIdFoundAndDefaultValue)219*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetIdWithIdFoundAndDefaultValue) {
220*4d7e907cSAndroid Build Coastguard Worker int64_t defaultValue = 0x0E10000C222u;
221*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
222*4d7e907cSAndroid Build Coastguard Worker
223*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT, defaultValue),
224*4d7e907cSAndroid Build Coastguard Worker static_cast<int64_t>(kDabSidExt));
225*4d7e907cSAndroid Build Coastguard Worker }
226*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetIdWithIdNotFoundAndDefaultValue)227*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFoundAndDefaultValue) {
228*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
229*4d7e907cSAndroid Build Coastguard Worker
230*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
231*4d7e907cSAndroid Build Coastguard Worker static_cast<int64_t>(kFmFrequencyKHz));
232*4d7e907cSAndroid Build Coastguard Worker }
233*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAllIdsWithAvailableIds)234*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAllIdsWithAvailableIds) {
235*4d7e907cSAndroid Build Coastguard Worker int64_t secondaryFrequencyKHz = kFmFrequencyKHz + 200;
236*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
237*4d7e907cSAndroid Build Coastguard Worker sel.secondaryIds.push_back(
238*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, secondaryFrequencyKHz));
239*4d7e907cSAndroid Build Coastguard Worker
240*4d7e907cSAndroid Build Coastguard Worker std::vector<int64_t> allIds = utils::getAllIds(sel, IdentifierType::AMFM_FREQUENCY_KHZ);
241*4d7e907cSAndroid Build Coastguard Worker
242*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(allIds.size(), 2u);
243*4d7e907cSAndroid Build Coastguard Worker EXPECT_NE(std::find(allIds.begin(), allIds.end(), kFmFrequencyKHz), allIds.end());
244*4d7e907cSAndroid Build Coastguard Worker EXPECT_NE(std::find(allIds.begin(), allIds.end(), secondaryFrequencyKHz), allIds.end());
245*4d7e907cSAndroid Build Coastguard Worker }
246*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAllIdsWithIdLongerThan32Bit)247*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAllIdsWithIdLongerThan32Bit) {
248*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
249*4d7e907cSAndroid Build Coastguard Worker
250*4d7e907cSAndroid Build Coastguard Worker std::vector<int64_t> allIds = utils::getAllIds(sel, IdentifierType::DAB_SID_EXT);
251*4d7e907cSAndroid Build Coastguard Worker
252*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(allIds.size(), 1u);
253*4d7e907cSAndroid Build Coastguard Worker EXPECT_NE(std::find(allIds.begin(), allIds.end(), kDabSidExt), allIds.end());
254*4d7e907cSAndroid Build Coastguard Worker }
255*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAllIdsWithIdNotFound)256*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAllIdsWithIdNotFound) {
257*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
258*4d7e907cSAndroid Build Coastguard Worker
259*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::getAllIds(sel, IdentifierType::AMFM_FREQUENCY_KHZ).empty());
260*4d7e907cSAndroid Build Coastguard Worker }
261*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeIdentifier)262*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeIdentifier) {
263*4d7e907cSAndroid Build Coastguard Worker ProgramIdentifier id =
264*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz);
265*4d7e907cSAndroid Build Coastguard Worker
266*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(id.type, IdentifierType::AMFM_FREQUENCY_KHZ);
267*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(id.value, kFmFrequencyKHz);
268*4d7e907cSAndroid Build Coastguard Worker }
269*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeSelectorAmfm)270*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeSelectorAmfm) {
271*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
272*4d7e907cSAndroid Build Coastguard Worker
273*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.type, IdentifierType::AMFM_FREQUENCY_KHZ);
274*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.value, kFmFrequencyKHz);
275*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(sel.secondaryIds.empty());
276*4d7e907cSAndroid Build Coastguard Worker }
277*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeSelectorHd)278*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeSelectorHd) {
279*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
280*4d7e907cSAndroid Build Coastguard Worker
281*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.type, IdentifierType::HD_STATION_ID_EXT);
282*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(sel.secondaryIds.empty());
283*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(utils::getHdSubchannel(sel), static_cast<int>(kHdSubChannel));
284*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(utils::getHdFrequency(sel), static_cast<uint32_t>(kHdFrequency));
285*4d7e907cSAndroid Build Coastguard Worker }
286*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeHdRadioStationName)287*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeHdRadioStationName) {
288*4d7e907cSAndroid Build Coastguard Worker std::string stationName = "aB1-FM";
289*4d7e907cSAndroid Build Coastguard Worker int64_t expectedIdValue = 0x4D46314241;
290*4d7e907cSAndroid Build Coastguard Worker
291*4d7e907cSAndroid Build Coastguard Worker ProgramIdentifier stationNameId = utils::makeHdRadioStationName(stationName);
292*4d7e907cSAndroid Build Coastguard Worker
293*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(stationNameId.type, IdentifierType::HD_STATION_NAME);
294*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(stationNameId.value, expectedIdValue);
295*4d7e907cSAndroid Build Coastguard Worker }
296*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetHdFrequencyWithoutHdId)297*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetHdFrequencyWithoutHdId) {
298*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
299*4d7e907cSAndroid Build Coastguard Worker
300*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getHdFrequency(sel), 0u);
301*4d7e907cSAndroid Build Coastguard Worker }
302*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasAmFmFrequencyWithAmFmSelector)303*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithAmFmSelector) {
304*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
305*4d7e907cSAndroid Build Coastguard Worker
306*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::hasAmFmFrequency(sel));
307*4d7e907cSAndroid Build Coastguard Worker }
308*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasAmFmFrequencyWithHdSelector)309*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithHdSelector) {
310*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
311*4d7e907cSAndroid Build Coastguard Worker
312*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::hasAmFmFrequency(sel));
313*4d7e907cSAndroid Build Coastguard Worker }
314*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,HasAmFmFrequencyWithNonAmFmHdSelector)315*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithNonAmFmHdSelector) {
316*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
317*4d7e907cSAndroid Build Coastguard Worker
318*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::hasAmFmFrequency(sel));
319*4d7e907cSAndroid Build Coastguard Worker }
320*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAmFmFrequencyWithAmFmSelector)321*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithAmFmSelector) {
322*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
323*4d7e907cSAndroid Build Coastguard Worker
324*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kFmFrequencyKHz));
325*4d7e907cSAndroid Build Coastguard Worker }
326*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAmFmFrequencyWithHdSelector)327*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithHdSelector) {
328*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
329*4d7e907cSAndroid Build Coastguard Worker
330*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kHdFrequency));
331*4d7e907cSAndroid Build Coastguard Worker }
332*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetAmFmFrequencyWithNonAmFmHdSelector)333*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithNonAmFmHdSelector) {
334*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
335*4d7e907cSAndroid Build Coastguard Worker
336*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getAmFmFrequency(sel), 0u);
337*4d7e907cSAndroid Build Coastguard Worker }
338*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeSelectorDabWithOnlySidExt)339*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeSelectorDabWithOnlySidExt) {
340*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
341*4d7e907cSAndroid Build Coastguard Worker
342*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
343*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
344*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(sel.secondaryIds.empty());
345*4d7e907cSAndroid Build Coastguard Worker }
346*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,MakeSelectorDab)347*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, MakeSelectorDab) {
348*4d7e907cSAndroid Build Coastguard Worker ProgramIdentifier ensembleIdExpected =
349*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble);
350*4d7e907cSAndroid Build Coastguard Worker ProgramIdentifier frequencyIdExpected =
351*4d7e907cSAndroid Build Coastguard Worker utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, kDabFrequencyKhz);
352*4d7e907cSAndroid Build Coastguard Worker
353*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
354*4d7e907cSAndroid Build Coastguard Worker
355*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
356*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
357*4d7e907cSAndroid Build Coastguard Worker EXPECT_EQ(sel.secondaryIds.size(), 2u);
358*4d7e907cSAndroid Build Coastguard Worker EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), ensembleIdExpected),
359*4d7e907cSAndroid Build Coastguard Worker sel.secondaryIds.end());
360*4d7e907cSAndroid Build Coastguard Worker EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), frequencyIdExpected),
361*4d7e907cSAndroid Build Coastguard Worker sel.secondaryIds.end());
362*4d7e907cSAndroid Build Coastguard Worker }
363*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetDabSId)364*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetDabSId) {
365*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
366*4d7e907cSAndroid Build Coastguard Worker
367*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getDabSId(sel), kDabSid);
368*4d7e907cSAndroid Build Coastguard Worker }
369*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetDabEccCode)370*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetDabEccCode) {
371*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
372*4d7e907cSAndroid Build Coastguard Worker
373*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getDabEccCode(sel), kDabEccCode);
374*4d7e907cSAndroid Build Coastguard Worker }
375*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,GetDabSCIdS)376*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, GetDabSCIdS) {
377*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
378*4d7e907cSAndroid Build Coastguard Worker
379*4d7e907cSAndroid Build Coastguard Worker ASSERT_EQ(utils::getDabSCIdS(sel), kDabSCIdS);
380*4d7e907cSAndroid Build Coastguard Worker }
381*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithTheSameHdSelector)382*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithTheSameHdSelector) {
383*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
384*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
385*4d7e907cSAndroid Build Coastguard Worker
386*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::tunesTo(sel, selTarget));
387*4d7e907cSAndroid Build Coastguard Worker }
388*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToAmFmSelectorWithDifferentSubChannels)389*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToAmFmSelectorWithDifferentSubChannels) {
390*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
391*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorAmfm(kHdFrequency);
392*4d7e907cSAndroid Build Coastguard Worker
393*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::tunesTo(sel, selTarget));
394*4d7e907cSAndroid Build Coastguard Worker }
395*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToMainHdChannelWithDifferentSubChannels)396*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToMainHdChannelWithDifferentSubChannels) {
397*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kHdFrequency);
398*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget =
399*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorHd(kHdStationId, /* subChannel= */ 0, kHdFrequency);
400*4d7e907cSAndroid Build Coastguard Worker
401*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::tunesTo(sel, selTarget));
402*4d7e907cSAndroid Build Coastguard Worker }
403*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithTheSameAmFmSelector)404*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithTheSameAmFmSelector) {
405*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
406*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorAmfm(kFmFrequencyKHz);
407*4d7e907cSAndroid Build Coastguard Worker
408*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::tunesTo(sel, selTarget));
409*4d7e907cSAndroid Build Coastguard Worker }
410*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithDifferentFrequencies)411*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithDifferentFrequencies) {
412*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
413*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorAmfm(kFmFrequencyKHz + 200);
414*4d7e907cSAndroid Build Coastguard Worker
415*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::tunesTo(sel, selTarget));
416*4d7e907cSAndroid Build Coastguard Worker }
417*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithTheSameDabSelector)418*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithTheSameDabSelector) {
419*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
420*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
421*4d7e907cSAndroid Build Coastguard Worker
422*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::tunesTo(sel, selTarget));
423*4d7e907cSAndroid Build Coastguard Worker }
424*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithDabSelectorOfDifferentPrimaryIds)425*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorOfDifferentPrimaryIds) {
426*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt + 1, kDabEnsemble, kDabFrequencyKhz);
427*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
428*4d7e907cSAndroid Build Coastguard Worker
429*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::tunesTo(sel, selTarget));
430*4d7e907cSAndroid Build Coastguard Worker }
431*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithDabSelectorOfDifferentSecondayIds)432*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorOfDifferentSecondayIds) {
433*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble + 100, kDabFrequencyKhz);
434*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
435*4d7e907cSAndroid Build Coastguard Worker
436*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::tunesTo(sel, selTarget));
437*4d7e907cSAndroid Build Coastguard Worker }
438*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,TunesToWithDabSelectorWithoutSecondaryIds)439*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorWithoutSecondaryIds) {
440*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
441*4d7e907cSAndroid Build Coastguard Worker ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
442*4d7e907cSAndroid Build Coastguard Worker
443*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::tunesTo(sel, selTarget));
444*4d7e907cSAndroid Build Coastguard Worker }
445*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,SatisfiesWithSatisfiedIdTypesFilter)446*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, SatisfiesWithSatisfiedIdTypesFilter) {
447*4d7e907cSAndroid Build Coastguard Worker ProgramFilter filter = ProgramFilter{.identifierTypes = {IdentifierType::DAB_FREQUENCY_KHZ}};
448*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
449*4d7e907cSAndroid Build Coastguard Worker
450*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::satisfies(filter, sel));
451*4d7e907cSAndroid Build Coastguard Worker }
452*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,SatisfiesWithUnsatisfiedIdTypesFilter)453*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, SatisfiesWithUnsatisfiedIdTypesFilter) {
454*4d7e907cSAndroid Build Coastguard Worker ProgramFilter filter = ProgramFilter{.identifierTypes = {IdentifierType::DAB_FREQUENCY_KHZ}};
455*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
456*4d7e907cSAndroid Build Coastguard Worker
457*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::satisfies(filter, sel));
458*4d7e907cSAndroid Build Coastguard Worker }
459*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,SatisfiesWithSatisfiedIdsFilter)460*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, SatisfiesWithSatisfiedIdsFilter) {
461*4d7e907cSAndroid Build Coastguard Worker ProgramFilter filter =
462*4d7e907cSAndroid Build Coastguard Worker ProgramFilter{.identifiers = {utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ,
463*4d7e907cSAndroid Build Coastguard Worker kDabFrequencyKhz)}};
464*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
465*4d7e907cSAndroid Build Coastguard Worker
466*4d7e907cSAndroid Build Coastguard Worker ASSERT_TRUE(utils::satisfies(filter, sel));
467*4d7e907cSAndroid Build Coastguard Worker }
468*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,SatisfiesWithUnsatisfiedIdsFilter)469*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, SatisfiesWithUnsatisfiedIdsFilter) {
470*4d7e907cSAndroid Build Coastguard Worker ProgramFilter filter =
471*4d7e907cSAndroid Build Coastguard Worker ProgramFilter{.identifiers = {utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ,
472*4d7e907cSAndroid Build Coastguard Worker kDabFrequencyKhz)}};
473*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz + 100);
474*4d7e907cSAndroid Build Coastguard Worker
475*4d7e907cSAndroid Build Coastguard Worker ASSERT_FALSE(utils::satisfies(filter, sel));
476*4d7e907cSAndroid Build Coastguard Worker }
477*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentAmFmFrequencies)478*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentAmFmFrequencies) {
479*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorAmfm(kHdFrequency - 200);
480*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
481*4d7e907cSAndroid Build Coastguard Worker
482*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
483*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
484*4d7e907cSAndroid Build Coastguard Worker }
485*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentAmFmSubChannels)486*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentAmFmSubChannels) {
487*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
488*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorHd(kHdStationId, kHdSubChannel + 1, kHdFrequency);
489*4d7e907cSAndroid Build Coastguard Worker
490*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
491*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
492*4d7e907cSAndroid Build Coastguard Worker }
493*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentDabFrequencies)494*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentDabFrequencies) {
495*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorDab(kDabSidExt + 100, kDabEnsemble, kDabFrequencyKhz);
496*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz + 100);
497*4d7e907cSAndroid Build Coastguard Worker
498*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
499*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
500*4d7e907cSAndroid Build Coastguard Worker }
501*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentDabEccCode)502*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentDabEccCode) {
503*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 =
504*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x0E10000C221u, kDabEnsemble, kDabFrequencyKhz);
505*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 =
506*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x0E20000C221u, kDabEnsemble, kDabFrequencyKhz);
507*4d7e907cSAndroid Build Coastguard Worker
508*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
509*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
510*4d7e907cSAndroid Build Coastguard Worker }
511*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentDabEnsembles)512*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentDabEnsembles) {
513*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
514*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorDab(kDabSidExt, kDabEnsemble + 1, kDabFrequencyKhz);
515*4d7e907cSAndroid Build Coastguard Worker
516*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
517*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
518*4d7e907cSAndroid Build Coastguard Worker }
519*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentDabSid)520*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentDabSid) {
521*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 =
522*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x0E10000C221u, kDabEnsemble, kDabFrequencyKhz);
523*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 =
524*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x0E10000C222u, kDabEnsemble, kDabFrequencyKhz);
525*4d7e907cSAndroid Build Coastguard Worker
526*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
527*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
528*4d7e907cSAndroid Build Coastguard Worker }
529*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramSelectorComparatorWithDifferentDabSCIdS)530*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramSelectorComparatorWithDifferentDabSCIdS) {
531*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 =
532*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x0E10000C221u, kDabEnsemble, kDabFrequencyKhz);
533*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 =
534*4d7e907cSAndroid Build Coastguard Worker utils::makeSelectorDab(/* stationId= */ 0x1E10000C221u, kDabEnsemble, kDabFrequencyKhz);
535*4d7e907cSAndroid Build Coastguard Worker
536*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramSelectorComparator()(sel1, sel2));
537*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramSelectorComparator()(sel2, sel1));
538*4d7e907cSAndroid Build Coastguard Worker }
539*4d7e907cSAndroid Build Coastguard Worker
TEST(BroadcastRadioUtilsTest,ProgramInfoComparator)540*4d7e907cSAndroid Build Coastguard Worker TEST(BroadcastRadioUtilsTest, ProgramInfoComparator) {
541*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel1 = utils::makeSelectorAmfm(kFmFrequencyKHz);
542*4d7e907cSAndroid Build Coastguard Worker ProgramSelector sel2 = utils::makeSelectorAmfm(kFmFrequencyKHz + 200);
543*4d7e907cSAndroid Build Coastguard Worker ProgramInfo info1 = {.selector = sel1,
544*4d7e907cSAndroid Build Coastguard Worker .logicallyTunedTo = sel1.primaryId,
545*4d7e907cSAndroid Build Coastguard Worker .physicallyTunedTo = sel1.primaryId};
546*4d7e907cSAndroid Build Coastguard Worker ProgramInfo info2 = {.selector = sel2,
547*4d7e907cSAndroid Build Coastguard Worker .logicallyTunedTo = sel2.primaryId,
548*4d7e907cSAndroid Build Coastguard Worker .physicallyTunedTo = sel2.primaryId};
549*4d7e907cSAndroid Build Coastguard Worker
550*4d7e907cSAndroid Build Coastguard Worker EXPECT_TRUE(utils::ProgramInfoComparator()(info1, info2));
551*4d7e907cSAndroid Build Coastguard Worker EXPECT_FALSE(utils::ProgramInfoComparator()(info2, info1));
552*4d7e907cSAndroid Build Coastguard Worker }
553*4d7e907cSAndroid Build Coastguard Worker
554*4d7e907cSAndroid Build Coastguard Worker } // namespace aidl::android::hardware::broadcastradio
555