37 #pragma clang diagnostic push 38 #pragma clang diagnostic ignored "-Wweak-vtables" 42 class InterfaceTestClass :
public Interface 46 std::atomic<unsigned int> &tx_counter_,
47 std::atomic<unsigned int> &rx_counter_)
48 : tx_counter(tx_counter_), rx_counter(rx_counter_)
52 const std::chrono::nanoseconds &timeout =
53 std::chrono::nanoseconds(100000)) final
55 std::this_thread::sleep_for(timeout);
59 const std::chrono::nanoseconds &timeout =
60 std::chrono::nanoseconds(100000)) final
62 std::this_thread::sleep_for(timeout);
69 std::ostream &print_(std::ostream &os)
const final 71 os <<
"interface test class";
77 std::atomic<unsigned int> &tx_counter;
78 std::atomic<unsigned int> &rx_counter;
83 #pragma clang diagnostic pop 89 TEST_CASE(
"InterfaceThreader's can be constructed.",
"[InterfaceThreader]")
91 std::atomic<unsigned int> tx_count(0);
92 std::atomic<unsigned int> rx_count(0);
93 SECTION(
"With delayed start.")
97 std::make_unique<InterfaceTestClass>(tx_count, rx_count),
100 SECTION(
"With immediate start.")
104 std::make_unique<InterfaceTestClass>(tx_count, rx_count)));
109 TEST_CASE(
"InterfaceThreader's run Interface::send_packet and " 110 "Interface::receive_packet methods of the contained " 111 "Interface repeatedly.",
"[InterfaceThreader]")
113 std::atomic<unsigned int> tx_count(0);
114 std::atomic<unsigned int> rx_count(0);
115 SECTION(
"With delayed start.")
117 REQUIRE(tx_count == 0);
118 REQUIRE(rx_count == 0);
120 std::make_unique<InterfaceTestClass>(tx_count, rx_count),
122 REQUIRE(tx_count == 0);
123 REQUIRE(rx_count == 0);
125 std::this_thread::sleep_for(10ms);
127 auto tx_count_ = tx_count.load();
128 auto rx_count_ = rx_count.load();
129 REQUIRE(tx_count > 0);
130 REQUIRE(rx_count > 0);
131 std::this_thread::sleep_for(10ms);
132 REQUIRE(tx_count == tx_count_);
133 REQUIRE(rx_count == rx_count_);
135 SECTION(
"With immediate start (manual shutdown).")
137 REQUIRE(tx_count == 0);
138 REQUIRE(rx_count == 0);
140 std::make_unique<InterfaceTestClass>(tx_count, rx_count), 1us);
141 std::this_thread::sleep_for(10ms);
143 auto tx_count_ = tx_count.load();
144 auto rx_count_ = rx_count.load();
145 REQUIRE(tx_count > 0);
146 REQUIRE(rx_count > 0);
147 std::this_thread::sleep_for(10ms);
148 REQUIRE(tx_count == tx_count_);
149 REQUIRE(rx_count == rx_count_);
151 SECTION(
"With immediate start (RAII shutdown).")
153 REQUIRE(tx_count == 0);
154 REQUIRE(rx_count == 0);
157 std::make_unique<InterfaceTestClass>(tx_count, rx_count), 1us);
158 std::this_thread::sleep_for(10ms);
160 auto tx_count_ = tx_count.load();
161 auto rx_count_ = rx_count.load();
162 REQUIRE(tx_count > 0);
163 REQUIRE(rx_count > 0);
164 std::this_thread::sleep_for(10ms);
165 REQUIRE(tx_count == tx_count_);
166 REQUIRE(rx_count == rx_count_);
TEST_CASE("InterfaceThreader's can be constructed.", "[InterfaceThreader]")
Delay starting, use start to launch threads.
def send_packet(mav, packet, system=0, component=0)