Size: a a a

2021 March 16

YB

Yarique Belgorodsky in pro.cxx
и в boost::asio::post free method как  execution context передавать возвращаемое значение из метода io_context::strand::context()
источник

YB

Yarique Belgorodsky in pro.cxx
ок
источник

ID

In Dev in pro.cxx
Если можно, то пока тут собрались знающие Asio люди, хотелось бы задать вопрос.
Пишете ли вы юнит-тесты для кода на Asio и как?
К примеру, если у меня есть класс tcp соединения, который принимает сокет и делает на нем async_read до дисконнекта и зовет какой-то колбек. Есть метод send, который отдаст данные в async_write.
Есть ли какой-то адекватный подход для юнит-тестирования асинхронного кода?

Тесты в самом asio устроены так, что контексту напихивается работа, потом делается run. И по окончанию run'а проверяется результат.
Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается
источник

YB

Yarique Belgorodsky in pro.cxx
а можно ещё вместо
std::string sample(int d, std::string (*cb)(int, std::string))
использовать
std::string sample(int d, std::string (&cb)(int, std::string))
(ссылка на колбек, вместо указателя, чтобы на нулл не проверять)
источник

YB

Yarique Belgorodsky in pro.cxx
In Dev
Если можно, то пока тут собрались знающие Asio люди, хотелось бы задать вопрос.
Пишете ли вы юнит-тесты для кода на Asio и как?
К примеру, если у меня есть класс tcp соединения, который принимает сокет и делает на нем async_read до дисконнекта и зовет какой-то колбек. Есть метод send, который отдаст данные в async_write.
Есть ли какой-то адекватный подход для юнит-тестирования асинхронного кода?

Тесты в самом asio устроены так, что контексту напихивается работа, потом делается run. И по окончанию run'а проверяется результат.
Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается
можно модульными тестами(моки написать, и ожидание вызова с разными параметрами ) обложить, ИМХО, а условные колбеки юнит тестами
источник

DP

Denis Paukaev in pro.cxx
In Dev
Если можно, то пока тут собрались знающие Asio люди, хотелось бы задать вопрос.
Пишете ли вы юнит-тесты для кода на Asio и как?
К примеру, если у меня есть класс tcp соединения, который принимает сокет и делает на нем async_read до дисконнекта и зовет какой-то колбек. Есть метод send, который отдаст данные в async_write.
Есть ли какой-то адекватный подход для юнит-тестирования асинхронного кода?

Тесты в самом asio устроены так, что контексту напихивается работа, потом делается run. И по окончанию run'а проверяется результат.
Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается
io.stop() никто не отменял
источник

AP

Antony Polukhin in pro.cxx
Constantine Drozdov
На фрагменте
(result != Descriptor(-13))
очень захотелось рыдать, у меня есть чудесный пример.

Пишу я как-то код. Обработчик в недокументированном фрагменте возвращает коды возврата, константами вида 0, 1, 0x10, -0x11 и так далее (да, в другом месте будут проверки знака). После безуспешных попыток разобраться в смысле каждого из этих кодов возвратов очень захотелось позвать автора этого кода, но есть проблема - это когда-то написал я :(
У меня валяется пара прикольных институтских програм... Я их до сих пор не могу выложить из-за забытых значений волшебных констант, мешающих рефакторингу и приведению кода в нормальный вид
источник

CD

Constantine Drozdov in pro.cxx
Antony Polukhin
У меня валяется пара прикольных институтских програм... Я их до сих пор не могу выложить из-за забытых значений волшебных констант, мешающих рефакторингу и приведению кода в нормальный вид
Тут в своё оправдание могу сказать, что когда я писал эти константы их смысл я тоже не понимал :)
источник

ID

In Dev in pro.cxx
Denis Paukaev
io.stop() никто не отменял
Хм, пожалуй действительно можно что-то придумать со stop, спасибо за наводку
источник

AP

Antony Polukhin in pro.cxx
Yarique Belgorodsky
а можно ещё вместо
std::string sample(int d, std::string (*cb)(int, std::string))
использовать
std::string sample(int d, std::string (&cb)(int, std::string))
(ссылка на колбек, вместо указателя, чтобы на нулл не проверять)
Хм... действительно
источник

EP

Egor Pugin in pro.cxx
Yarique Belgorodsky
лучше его как контекст использовать
ну вроде у меня в примере так и есть
https://t.me/ProCxx/435215
источник

ID

In Dev in pro.cxx
Antony Polukhin
Хм... действительно
А есть хоть одна причина не использовать std::function? Вроде для указателей на функцию оверхед там небольшой или его нет
источник

AP

Antony Polukhin in pro.cxx
In Dev
А есть хоть одна причина не использовать std::function? Вроде для указателей на функцию оверхед там небольшой или его нет
аллокация и лишняя индирекция
Если это низкоуровневая функция на горячем пути, это может быть важно
источник

AP

Antony Polukhin in pro.cxx
Потому интерфейс проврчирует использовать указатели на функции
источник

AP

Antony Polukhin in pro.cxx
С C++23 можно будет заменить на std::function_ref
источник

ID

In Dev in pro.cxx
Antony Polukhin
аллокация и лишняя индирекция
Если это низкоуровневая функция на горячем пути, это может быть важно
Разве там нет оптимизации для указателей на функцию и лямбд с маленьким захватом?
источник

D

Dmitriy in pro.cxx
Antony Polukhin
Потому интерфейс проврчирует использовать указатели на функции
Но ведь указатель на функцию тоже не совсем оптимален по скорости
источник

АК

Александр Караев... in pro.cxx
Antony Polukhin
С C++23 можно будет заменить на std::function_ref
не вижу активного пропозала на эту тему
источник

YB

Yarique Belgorodsky in pro.cxx
Antony Polukhin
С C++23 можно будет заменить на std::function_ref
FunctionRef из folly фэйсбучного возьмут?)
источник

D

Dmitriy in pro.cxx
In Dev
Разве там нет оптимизации для указателей на функцию и лямбд с маленьким захватом?
Емнип, гарантируется только для reference_wrapper, остальное зависит от компилятора
источник