Skip to content

Commit 85f5be1

Browse files
committed
timeout. tests
1 parent aed7d28 commit 85f5be1

36 files changed

+645
-596
lines changed

include/scl/net/channel.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ class Channel {
6060
* @param timeout the timeout.
6161
* @return the received packet.
6262
*/
63-
virtual Task<std::optional<Packet>> recv(Time::Duration timeout) {
64-
(void)timeout;
65-
co_return {};
66-
}
63+
virtual Task<std::optional<Packet>> recv(Time::Duration timeout) = 0;
6764

6865
/**
6966
* @brief Check if there is something to receive on this channel.

include/scl/net/loopback.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <deque>
2121
#include <memory>
22+
#include <stdexcept>
2223

2324
#include "scl/coro/task.h"
2425
#include "scl/net/channel.h"
@@ -112,6 +113,10 @@ class LoopbackChannel final : public Channel {
112113
co_return packet;
113114
}
114115

116+
Task<std::optional<Packet>> recv(Time::Duration /* ignored */) override {
117+
co_return co_await recv();
118+
}
119+
115120
/**
116121
* @brief Check if there are data available for receiving.
117122
*/

include/scl/net/tcp/channel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ class TcpChannel final : public Channel {
8080
*/
8181
Task<Packet> recv() override;
8282

83+
Task<std::optional<Packet>> recv(Time::Duration timeout) override;
84+
8385
/**
8486
* @brief Check if this channel has data ready for recovering.
8587
* @return true if there's data to receive and false otherwise.

include/scl/simulation/simulator.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class Simulator final {
8787
* @brief Run the simulation.
8888
*/
8989
template <ProtocolBuilder BUILDER>
90-
void run(BUILDER& builder, NetworkDescription network_desc) {
90+
void run(BUILDER builder, NetworkDescription network_desc) {
9191
auto protocol = builder();
9292
if (protocol.size() != network_desc.size()) {
9393
throw std::logic_error("protocols do not match network definition");
@@ -101,7 +101,7 @@ class Simulator final {
101101
template <typename HOOK>
102102
requires(std::convertible_to<HOOK, SimulationHook::HookType>)
103103
void addHook(EventType trigger, HOOK hook) {
104-
m_hooks.emplace_back(trigger, hook);
104+
m_hooks.emplace_back(SimulationHook{.trigger = trigger, .hook = hook});
105105
}
106106

107107
/**
@@ -110,7 +110,7 @@ class Simulator final {
110110
template <typename HOOK>
111111
requires(std::convertible_to<HOOK, SimulationHook::HookType>)
112112
void addHook(HOOK hook) {
113-
m_hooks.emplace_back({}, hook);
113+
m_hooks.emplace_back(SimulationHook{.trigger = {}, .hook = hook});
114114
}
115115

116116
private:

include/scl/simulation/transport.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727

2828
namespace scl::details {
2929

30+
/**
31+
* @brief Handles the movement of packets between parties in a simulation.
32+
*/
3033
class Transport {
3134
public:
3235
Transport(SimulatorContext& sim_ctx) : m_sim_ctx(sim_ctx) {}
@@ -35,6 +38,7 @@ class Transport {
3538
void send(Time::Duration ts, ChannelId id, Packet&& pkt);
3639

3740
bool ready(ChannelId id) const;
41+
bool ready(ChannelId id, Time::Duration limit) const;
3842

3943
std::pair<Packet, Time::Duration> recv(Time::Duration ts, ChannelId id);
4044

src/scl/argparser.cc

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,35 @@
1515
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1616
*/
1717

18+
#include <vector>
19+
1820
#include "scl/argparser.h"
1921

20-
#include <vector>
22+
using namespace scl;
2123

2224
template <>
23-
bool scl::ProgramOptions::get<bool>(std::string_view name) const {
25+
bool ProgramOptions::get<bool>(std::string_view name) const {
2426
const auto v = m_args.at(name);
2527
return v == "1" || v == "true";
2628
}
2729

2830
template <>
29-
int scl::ProgramOptions::get<int>(std::string_view name) const {
31+
int ProgramOptions::get<int>(std::string_view name) const {
3032
return std::stoi(m_args.at(name).data());
3133
}
3234

3335
template <>
34-
std::size_t scl::ProgramOptions::get<std::size_t>(std::string_view name) const {
36+
std::size_t ProgramOptions::get<std::size_t>(std::string_view name) const {
3537
return std::stoul(m_args.at(name).data());
3638
}
3739

38-
bool scl::ProgramOptions::Parser::isArg(std::string_view name) const {
40+
bool ProgramOptions::Parser::isArg(std::string_view name) const {
3941
return std::any_of(m_args.begin(), m_args.end(), [&](auto a) {
4042
return a.name == name;
4143
});
4244
}
4345

44-
bool scl::ProgramOptions::Parser::isFlag(std::string_view name) const {
46+
bool ProgramOptions::Parser::isFlag(std::string_view name) const {
4547
return std::any_of(m_flags.begin(), m_flags.end(), [&](auto f) {
4648
return f.name == name;
4749
});
@@ -73,9 +75,9 @@ bool hasDuplicates(const std::vector<ARG_OR_FLAG>& opts) {
7375

7476
} // namespace
7577

76-
using ParseRet = std::variant<scl::ProgramOptions, std::string_view>;
78+
using ParseRet = std::variant<ProgramOptions, std::string_view>;
7779

78-
ParseRet scl::ProgramOptions::Parser::parseArguments(int argc, char** argv) {
80+
ParseRet ProgramOptions::Parser::parseArguments(int argc, char** argv) {
7981
if (hasDuplicates(m_args)) {
8082
return "duplicate argument definition";
8183
}
@@ -135,9 +137,8 @@ ParseRet scl::ProgramOptions::Parser::parseArguments(int argc, char** argv) {
135137
return error_msg;
136138
}
137139

138-
void scl::ProgramOptions::Parser::argListShort(
139-
std::ostream& stream,
140-
std::string_view program_name) const {
140+
void ProgramOptions::Parser::argListShort(std::ostream& stream,
141+
std::string_view program_name) const {
141142
stream << "Usage: " << program_name << " ";
142143
forEachRequired(m_args, [&stream](const auto arg) {
143144
stream << "-" << arg.name << " " << arg.type_hint << " ";
@@ -155,7 +156,7 @@ std::string getPadding(std::size_t lead) {
155156
return std::string(psz, ' ');
156157
}
157158

158-
void writeArg(std::ostream& stream, const scl::ProgramArg& arg) {
159+
void writeArg(std::ostream& stream, const ProgramArg& arg) {
159160
stream << " -" << arg.name << " '" << arg.type_hint << "'";
160161
if (!arg.description.empty()) {
161162
const auto pad_str = getPadding(arg.name.size() + arg.type_hint.size() + 5);
@@ -167,7 +168,7 @@ void writeArg(std::ostream& stream, const scl::ProgramArg& arg) {
167168
stream << std::endl;
168169
}
169170

170-
void writeFlag(std::ostream& stream, const scl::ProgramFlag& flag) {
171+
void writeFlag(std::ostream& stream, const ProgramFlag& flag) {
171172
stream << " -" << flag.name;
172173
if (!flag.description.empty()) {
173174
const auto pad_str = getPadding(flag.name.size() + 2);
@@ -188,7 +189,7 @@ bool hasOptional(IT begin, IT end) {
188189

189190
} // namespace
190191

191-
void scl::ProgramOptions::Parser::argListLong(std::ostream& stream) const {
192+
void ProgramOptions::Parser::argListLong(std::ostream& stream) const {
192193
if (!m_description.empty()) {
193194
stream << std::endl << m_description << std::endl;
194195
}
@@ -218,7 +219,7 @@ void scl::ProgramOptions::Parser::argListLong(std::ostream& stream) const {
218219
}
219220
}
220221

221-
void scl::ProgramOptions::Parser::printHelp(std::string_view error_msg) {
222+
void ProgramOptions::Parser::printHelp(std::string_view error_msg) {
222223
bool error = !error_msg.empty();
223224

224225
if (error) {

src/scl/coro/runtime.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@
2121

2222
#include "scl/coro/task.h"
2323

24-
void scl::details::removeHandle(Runtime* runtime,
25-
std::coroutine_handle<> handle) {
24+
using namespace scl;
25+
26+
void details::removeHandle(Runtime* runtime, std::coroutine_handle<> handle) {
2627
if (runtime != nullptr) {
2728
runtime->deschedule(handle);
2829
}
2930
}
3031

31-
std::coroutine_handle<> scl::DefaultRuntime::next() {
32+
std::coroutine_handle<> DefaultRuntime::next() {
3233
auto b = m_tq.begin();
3334
const auto e = m_tq.end();
3435
while (b != e) {
@@ -42,7 +43,7 @@ std::coroutine_handle<> scl::DefaultRuntime::next() {
4243
return std::noop_coroutine();
4344
}
4445

45-
void scl::DefaultRuntime::deschedule(std::coroutine_handle<> coroutine) {
46+
void DefaultRuntime::deschedule(std::coroutine_handle<> coroutine) {
4647
m_tq.remove_if([&coroutine](const Pair& pair) {
4748
return std::get<0>(pair) == coroutine;
4849
});

src/scl/hex.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
#include <cstdint>
2121
#include <iomanip>
2222

23+
using namespace scl;
24+
2325
template <>
24-
std::string scl::details::toHexString(const __uint128_t& v) {
26+
std::string details::toHexString(const __uint128_t& v) {
2527
auto top = static_cast<std::uint64_t>(v >> 64);
2628
auto bot = static_cast<std::uint64_t>(v);
2729

src/scl/math/ff_ops_gmp.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
#include "./ff_ops_gmp.h"
1919

20-
std::size_t scl::details::findFirstNonZero(const std::string& s) {
20+
using namespace scl;
21+
22+
std::size_t details::findFirstNonZero(const std::string& s) {
2123
int n = 0;
2224
for (const auto c : s) {
2325
if (c != '0') {

src/scl/math/mersenne127.cc

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,33 @@
2424
#include "scl/hex.h"
2525
#include "scl/math/ff_ops.h"
2626

27+
using namespace scl;
28+
2729
using u64 = std::uint64_t;
2830
using u128 = __uint128_t;
2931

3032
// The prime p = 2^127 - 1.
3133
static const u128 p = (((u128)0x7FFFFFFFFFFFFFFF) << 64) | 0xFFFFFFFFFFFFFFFF;
3234

33-
using Mersenne127 = scl::Mersenne127;
34-
3535
template <>
36-
void scl::details::convertTo<Mersenne127>(u128& out, const int value) {
36+
void details::convertTo<Mersenne127>(u128& out, const int value) {
3737
out = value < 0 ? value + p : value;
3838
}
3939

4040
template <>
41-
void scl::details::convertTo<Mersenne127>(u128& out, const std::string& src) {
41+
void details::convertTo<Mersenne127>(u128& out, const std::string& src) {
4242
out = fromHexString<u128>(src);
4343
out = out % p;
4444
}
4545

4646
template <>
47-
void scl::details::add<Mersenne127>(u128& out, const u128& op) {
47+
void details::add<Mersenne127>(u128& out, const u128& op) {
4848
modAdd(out, op, p);
4949
}
5050

5151
template <>
52-
void scl::details::subtract<Mersenne127>(u128& out, const u128& op) {
53-
details::modSub(out, op, p);
52+
void details::subtract<Mersenne127>(u128& out, const u128& op) {
53+
modSub(out, op, p);
5454
}
5555

5656
namespace {
@@ -83,7 +83,7 @@ u256 multiplyFull(const u128 x, const u128 y) {
8383
} // namespace
8484

8585
template <>
86-
void scl::details::multiply<Mersenne127>(u128& out, const u128& op) {
86+
void details::multiply<Mersenne127>(u128& out, const u128& op) {
8787
u256 z = multiplyFull(out, op);
8888
out = z.high << 1;
8989
u128 b = z.low;
@@ -95,33 +95,32 @@ void scl::details::multiply<Mersenne127>(u128& out, const u128& op) {
9595
}
9696

9797
template <>
98-
void scl::details::negate<Mersenne127>(u128& out) {
98+
void details::negate<Mersenne127>(u128& out) {
9999
modNeg(out, p);
100100
}
101101

102102
template <>
103-
void scl::details::invert<Mersenne127>(u128& out) {
103+
void details::invert<Mersenne127>(u128& out) {
104104
modInv<u128, __int128_t>(out, out, p);
105105
}
106106

107107
template <>
108-
bool scl::details::equal<Mersenne127>(const u128& in1, const u128& in2) {
108+
bool details::equal<Mersenne127>(const u128& in1, const u128& in2) {
109109
return in1 == in2;
110110
}
111111

112112
template <>
113-
void scl::details::fromBytes<Mersenne127>(u128& dest,
114-
const unsigned char* src) {
113+
void details::fromBytes<Mersenne127>(u128& dest, const unsigned char* src) {
115114
dest = *(const u128*)src;
116115
dest = dest % p;
117116
}
118117

119118
template <>
120-
void scl::details::toBytes<Mersenne127>(unsigned char* dest, const u128& src) {
119+
void details::toBytes<Mersenne127>(unsigned char* dest, const u128& src) {
121120
std::memcpy(dest, &src, sizeof(u128));
122121
}
123122

124123
template <>
125-
std::string scl::details::toString<Mersenne127>(const u128& in) {
124+
std::string details::toString<Mersenne127>(const u128& in) {
126125
return toHexString(in);
127126
}

0 commit comments

Comments
 (0)