6#include <ns3/nr-eesm-cc-t1.h>
7#include <ns3/nr-eesm-cc-t2.h>
8#include <ns3/nr-eesm-error-model.h>
9#include <ns3/nr-eesm-ir-t1.h>
10#include <ns3/nr-eesm-ir-t2.h>
29class NrL2smEesmTestCase :
public TestCase
32 NrL2smEesmTestCase(
const std::string& name)
40 ~NrL2smEesmTestCase()
override
45 void DoRun()
override;
47 void TestMappingSinrBler1(
const Ptr<NrEesmErrorModel>& em);
48 void TestMappingSinrBler2(
const Ptr<NrEesmErrorModel>& em);
49 void TestBgType1(
const Ptr<NrEesmErrorModel>& em);
50 void TestBgType2(
const Ptr<NrEesmErrorModel>& em);
52 void TestEesmCcTable1();
53 void TestEesmCcTable2();
54 void TestEesmIrTable1();
55 void TestEesmIrTable2();
59NrL2smEesmTestCase::TestBgType1(
const Ptr<NrEesmErrorModel>& em)
61 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 18),
62 NrEesmErrorModel::SECOND,
63 "TestBgType1-a: The calculated value differs from the 3GPP base graph "
64 "selection algorithm.");
65 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3900, 18),
66 NrEesmErrorModel::FIRST,
67 "TestBgType1-b: The calculated value differs from the 3GPP base graph "
68 "selection algorithm.");
69 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(200, 18),
70 NrEesmErrorModel::SECOND,
71 "TestBgType1-c: The calculated value differs from the 3GPP base graph "
72 "selection algorithm.");
73 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(4000, 0),
74 NrEesmErrorModel::SECOND,
75 "TestBgType1-d: The calculated value differs from the 3GPP base graph "
76 "selection algorithm.");
77 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 28),
78 NrEesmErrorModel::FIRST,
79 "TestBgType1-e: The calculated value differs from the 3GPP base graph "
80 "selection algorithm.");
81 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 2),
82 NrEesmErrorModel::SECOND,
83 "TestBgType2-f: The calculated value differs from the 3GPP base graph "
84 "selection algorithm.");
85 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 16),
86 NrEesmErrorModel::SECOND,
87 "TestBgType2-g: The calculated value differs from the 3GPP base graph "
88 "selection algorithm.");
89 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3900, 14),
90 NrEesmErrorModel::FIRST,
91 "TestBgType2-h: The calculated value differs from the 3GPP base graph "
92 "selection algorithm.");
96NrL2smEesmTestCase::TestBgType2(
const Ptr<NrEesmErrorModel>& em)
98 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 18),
99 NrEesmErrorModel::FIRST,
100 "TestBgType2-a: The calculated value differs from the 3GPP base graph "
101 "selection algorithm.");
102 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3900, 18),
103 NrEesmErrorModel::FIRST,
104 "TestBgType2-b: The calculated value differs from the 3GPP base graph "
105 "selection algorithm.");
106 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(200, 18),
107 NrEesmErrorModel::SECOND,
108 "TestBgType2-c: The calculated value differs from the 3GPP base graph "
109 "selection algorithm.");
110 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(4000, 0),
111 NrEesmErrorModel::SECOND,
112 "TestBgType2-d: The calculated value differs from the 3GPP base graph "
113 "selection algorithm.");
114 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 27),
115 NrEesmErrorModel::FIRST,
116 "TestBgType2-e: The calculated value differs from the 3GPP base graph "
117 "selection algorithm.");
118 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 2),
119 NrEesmErrorModel::SECOND,
120 "TestBgType2-f: The calculated value differs from the 3GPP base graph "
121 "selection algorithm.");
122 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3200, 16),
123 NrEesmErrorModel::FIRST,
124 "TestBgType2-g: The calculated value differs from the 3GPP base graph "
125 "selection algorithm.");
126 NS_TEST_ASSERT_MSG_EQ(em->GetBaseGraphType(3900, 14),
127 NrEesmErrorModel::FIRST,
128 "TestBgType2-h: The calculated value differs from the 3GPP base graph "
129 "selection algorithm.");
132typedef std::tuple<double, uint8_t, uint32_t, double> MappingTable;
134static std::vector<MappingTable> resultTable1 = {
139 MappingTable{19.95, 18, 3200, 0.023},
140 MappingTable{15.849, 18, 3200, 0.7567365},
141 MappingTable{10, 18, 3200, 1.00},
143 MappingTable{19.95, 18, 3500, 0.0735},
144 MappingTable{15.849, 18, 3500, 0.7908951},
145 MappingTable{10, 18, 3500, 1.00},
149 MappingTable{8.9125, 14, 3900, 0.3225703},
150 MappingTable{7.9433, 14, 3900, 0.8827055},
151 MappingTable{6.3095, 14, 3900, 1.00},
153 MappingTable{8.9125, 14, 6300, 0.0237},
154 MappingTable{7.9433, 14, 6300, 0.9990385},
155 MappingTable{6.3095, 14, 6300, 1.00}
158static std::vector<MappingTable> resultTable2 = {
163 MappingTable{19.95, 11, 3200, 0.023},
164 MappingTable{15.849, 11, 3200, 0.7567365},
165 MappingTable{10, 11, 3200, 1.00},
167 MappingTable{19.95, 11, 3500, 0.0735},
168 MappingTable{15.849, 11, 3500, 0.7908951},
169 MappingTable{10, 11, 3500, 1.00},
173 MappingTable{8.9125, 8, 3900, 0.3225703},
174 MappingTable{7.9433, 8, 3900, 0.8827055},
175 MappingTable{6.3095, 8, 3900, 1.00},
177 MappingTable{8.9125, 8, 6300, 0.0237},
178 MappingTable{7.9433, 8, 6300, 0.9990385},
179 MappingTable{6.3095, 8, 6300, 1.00}
184NrL2smEesmTestCase::TestMappingSinrBler1(
const Ptr<NrEesmErrorModel>& em)
186 for (
auto result : resultTable1)
188 NS_TEST_ASSERT_MSG_EQ(
189 em->MappingSinrBler(std::get<0>(result), std::get<1>(result), std::get<2>(result)),
191 "TestMappingSinrBler1: The calculated value differs from "
192 " the SINR-BLER table. SINR="
193 << std::get<0>(result) <<
" MCS " <<
static_cast<uint32_t
>(std::get<1>(result))
194 <<
" CBS " << std::get<2>(result));
199NrL2smEesmTestCase::TestMappingSinrBler2(
const Ptr<NrEesmErrorModel>& em)
201 for (
auto result : resultTable2)
203 NS_TEST_ASSERT_MSG_EQ(
204 em->MappingSinrBler(std::get<0>(result), std::get<1>(result), std::get<2>(result)),
206 "TestMappingSinrBler2: The calculated value differs from "
207 " the SINR-BLER table. SINR="
208 << std::get<0>(result) <<
" MCS " <<
static_cast<uint32_t
>(std::get<1>(result))
209 <<
" CBS " << std::get<2>(result));
214NrL2smEesmTestCase::TestEesmCcTable1()
217 Ptr<NrEesmErrorModel> em = CreateObject<NrEesmCcT1>();
220 bool ret = em ==
nullptr;
221 NS_TEST_ASSERT_MSG_EQ(ret,
false,
"Could not create NrEesmCcT1 object");
225 TestMappingSinrBler1(em);
229NrL2smEesmTestCase::TestEesmCcTable2()
232 Ptr<NrEesmErrorModel> em = CreateObject<NrEesmCcT2>();
235 bool ret = em ==
nullptr;
236 NS_TEST_ASSERT_MSG_EQ(ret,
false,
"Could not create NrEesmCcT2 object");
240 TestMappingSinrBler2(em);
244NrL2smEesmTestCase::TestEesmIrTable1()
247 Ptr<NrEesmErrorModel> em = CreateObject<NrEesmIrT1>();
250 bool ret = em ==
nullptr;
251 NS_TEST_ASSERT_MSG_EQ(ret,
false,
"Could not create NrEesmIrT1 object");
255 TestMappingSinrBler1(em);
259NrL2smEesmTestCase::TestEesmIrTable2()
262 Ptr<NrEesmErrorModel> em = CreateObject<NrEesmIrT2>();
265 bool ret = em ==
nullptr;
266 NS_TEST_ASSERT_MSG_EQ(ret,
false,
"Could not create NrEesmIrT2 object");
270 TestMappingSinrBler2(em);
274NrL2smEesmTestCase::DoRun()
282class NrTestL2smEesm :
public TestSuite
286 : TestSuite(
"nr-test-l2sm-eesm", Type::UNIT)
288 AddTestCase(
new NrL2smEesmTestCase(
"First test"), Duration::QUICK);
static NrTestL2smEesm NrTestL2smEesmTestSuite
Nr test suite.