5#include "ns3/nr-gnb-phy.h"
23class NrPatternTestCase :
public TestCase
31 std::map<uint32_t, std::vector<uint32_t>> m_toSendDl;
32 std::map<uint32_t, std::vector<uint32_t>> m_toSendUl;
33 std::map<uint32_t, std::vector<uint32_t>> m_generateDl;
34 std::map<uint32_t, std::vector<uint32_t>> m_generateUl;
35 std::map<uint32_t, uint32_t> m_dlHarqFb;
43 std::map<uint32_t, uint32_t> m_dlHarq;
50 NrPatternTestCase(
const std::string& name)
60 void CheckMap(
const std::map<uint32_t, std::vector<uint32_t>>& a,
61 const std::map<uint32_t, std::vector<uint32_t>>& b);
68 void CheckHarqMap(
const std::map<uint32_t, uint32_t>& a,
const std::map<uint32_t, uint32_t>& b);
75 void CheckVector(
const std::vector<uint32_t>& a,
const std::vector<uint32_t>& b);
78 void DoRun()
override;
84 void TestPattern(
const std::vector<LteNrTddSlotType>& pattern,
const Result& result);
90 void Print(
const std::map<uint32_t, std::vector<uint32_t>>& str);
96 void PrintHarq(
const std::map<uint32_t, uint32_t>& str);
98 bool m_verbose =
false;
102NrPatternTestCase::DoRun()
450 TestPattern(three, c);
563 TestPattern(four, d);
677 TestPattern(five, e);
877 TestPattern(zero, g);
923 TestPattern(seven, k);
1093 {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}, {7, 4}, {8, 4}, {9, 4}}};
1231 TestPattern(twelve, l);
1386 TestPattern(thirtheen, m);
1390NrPatternTestCase::Print(
const std::map<uint32_t, std::vector<uint32_t>>& str)
1392 std::cout <<
"{" << std::endl;
1393 for (
const auto& v : str)
1395 std::cout <<
" { " << v.first <<
", {";
1396 for (
const auto& i : v.second)
1398 std::cout << i <<
", ";
1400 std::cout <<
"} }," << std::endl;
1402 std::cout <<
"}" << std::endl;
1406NrPatternTestCase::PrintHarq(
const std::map<uint32_t, uint32_t>& str)
1408 std::cout <<
"{" << std::endl;
1409 for (
const auto& v : str)
1411 std::cout <<
" { " << v.first <<
", ";
1412 std::cout << v.second;
1413 std::cout <<
"}" << std::endl;
1415 std::cout <<
"}" << std::endl;
1419NrPatternTestCase::CheckVector(
const std::vector<uint32_t>& a,
const std::vector<uint32_t>& b)
1421 NS_TEST_ASSERT_MSG_EQ(a.size(), b.size(),
"Two vectors have different length");
1422 for (uint32_t i = 0; i < a.size(); ++i)
1424 NS_TEST_ASSERT_MSG_EQ(a[i], b[i],
"Values in vector diffes");
1429NrPatternTestCase::CheckMap(
const std::map<uint32_t, std::vector<uint32_t>>& a,
1430 const std::map<uint32_t, std::vector<uint32_t>>& b)
1432 NS_TEST_ASSERT_MSG_EQ(a.size(), b.size(),
"Two maps have different length");
1434 for (
const std::pair<
const uint32_t, std::vector<uint32_t>>& v : a)
1436 CheckVector(a.at(v.first), b.at(v.first));
1441NrPatternTestCase::CheckHarqMap(
const std::map<uint32_t, uint32_t>& a,
1442 const std::map<uint32_t, uint32_t>& b)
1444 NS_TEST_ASSERT_MSG_EQ(a.size(), b.size(),
"Two HARQ maps have different length");
1446 for (
const auto& element : a)
1448 NS_TEST_ASSERT_MSG_EQ(element.second,
1449 b.at(element.first),
1450 "A value in A is different from the value for the same key in B");
1455NrPatternTestCase::TestPattern(
const std::vector<LteNrTddSlotType>& pattern,
const Result& result)
1457 std::map<uint32_t, std::vector<uint32_t>> toSendDl;
1458 std::map<uint32_t, std::vector<uint32_t>> toSendUl;
1459 std::map<uint32_t, std::vector<uint32_t>> generateDl;
1460 std::map<uint32_t, std::vector<uint32_t>> generateUl;
1461 std::map<uint32_t, uint32_t> dlHarqFb;
1463 NrGnbPhy::GenerateStructuresFromPattern(pattern,
1476 std::cout << std::endl <<
"PATTERN to test: ";
1477 for (
const auto& v : pattern)
1479 std::cout << v <<
" ";
1481 std::cout << std::endl;
1486 std::cout <<
"To Send DL theoretic:" << std::endl;
1488 std::cout <<
"To Send DL result:" << std::endl;
1489 Print(result.m_toSendDl);
1491 CheckMap(toSendDl, result.m_toSendDl);
1495 std::cout <<
"To Send UL theoretic:" << std::endl;
1497 std::cout <<
"To Send UL result:" << std::endl;
1498 Print(result.m_toSendUl);
1501 CheckMap(toSendUl, result.m_toSendUl);
1505 std::cout <<
"Generate DL theoretic:" << std::endl;
1507 std::cout <<
"Generate DL result:" << std::endl;
1508 Print(result.m_generateDl);
1511 CheckMap(generateDl, result.m_generateDl);
1515 std::cout <<
"Generate UL theoretic:" << std::endl;
1517 std::cout <<
"Generate UL result:" << std::endl;
1518 Print(result.m_generateUl);
1521 CheckMap(generateUl, result.m_generateUl);
1525 std::cout <<
"HarqFB theoretic:" << std::endl;
1526 PrintHarq(dlHarqFb);
1527 std::cout <<
"HarqFB result:" << std::endl;
1528 PrintHarq(result.m_dlHarqFb);
1531 CheckHarqMap(dlHarqFb, result.m_dlHarqFb);
1537class NrPatternTestSuite :
public TestSuite
1540 NrPatternTestSuite()
1541 : TestSuite(
"nr-lte-pattern-generation", Type::UNIT)
1543 AddTestCase(
new NrPatternTestCase(
"LTE TDD Pattern test"), Duration::QUICK);
@ F
DL CTRL + DL DATA + UL DATA + UL CTRL.
@ S
DL CTRL + DL DATA + UL CTRL.
static NrPatternTestSuite nrNrPatternTestSuite
Pattern test suite.