Крылатый
main :: int = {
let vec = {1, 2, 3} :: vector<int>
for x& : vec {
cout x
endl
}
return 0 :: int
}
Крылатый
9_9
Крылатый
Ruslan
если так, все б уже решили
Ruslan
не, проблема грамматики из-за использования угловых скобок для шаблонов
Ruslan
попробуйте еще написать с++ на лиспе
🐙 Antony
новые предложения по улучшению С++ выложили: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/#mailing2017-06
Vladislav
🦥Alex Fails
Igor
Evgenii
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0238r1.html больше auto богу auto
Evgenii
я видел
Evgenii
можешь поискать по фамилии)
Александр
есть оно там
Anatoly
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0539r0.html
Arseny
Berkus
wtf
pattern-matching, bitches
🦥Alex Fails
Это тож
Berkus
а я запостил вчера линк на статью? вроде да
Berkus
там перечислены разные способы утечек в дроиде
🦥Alex Fails
Maria
Пцсс, запилили материал про тестовые задания для разработчиков. Норм - не норм? Баян - не баян? Если не норм, то что?
https://goo.gl/4WnFb8
Maria
Не, я только гифки умею клепать ;) а вообще спасибо
Berkus
Berkus
не завезли?
Maria
Что вычитал? Можешь скинуть абзац, где нашёл ошибку?
Berkus
> Пцсс, запилили материал про тестовые задания для разработчиков. Норм - не норм? Баян - не баян? Если не норм, то что?
вот абзац
vladislav
mf doom
Maria
Ясно, но не по делу, минус тебе ;)
Berkus
Berkus
тебе тоже, раз уж ты русский язык не умеешь
Roman
я ещё раз со своим вопросом по асинхронному тестированию:
вот есть тест кейс, нужно убедиться что первый поток выполнился, после чего выполнился и второй, но failure поток выполниться в данном случае не должен. Запускаются данные потоки асинхронно, т.е. control flow нужно заблокировать в конце тестовой функции
void ExampleTest::verifyAttach() {
streams->create([](
const StreamHandle& handle,
const QVariant& data
) {
// ensure this is called
handle.close("testdata");
})
->attach([](
const StreamHandle& handle,
const QVariant& data
) {
// ensure this is called and data is correct
QCOMPARE(data, "testdata");
handle.close();
});
->failure([](
const StreamHandle& handle,
const QVariant& error
) {
// ensure this is never called
});
// control flow must be locked here until all async code is done
}
мне интересно как бы это реализовать наиболее элегантно, как бы вы реализовали?
Berkus
> т.е. control flow нужно заблокировать в конце тестовой функции
я тебе вчера вечером писал именно про это
Berkus
std::future нельзя использовать, оно broken by design (by committee)
Roman
Roman
std::promise на замену?
Anatoly
future - это результат в будущем, его нельзя установить, вызывай thread с промисом и т.п. и устанавливай значения промиса
Anatoly
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread( [](std::promise<int>& p){ p.set_value(9); },
std::ref(p) ).detach();
f.wait()
Roman
надо попробовать
Roman
мда, правда усложняет код теста
Anatoly
std::async еще посмотри
Anatoly
он возвращает std::future
Berkus
хмм, поясни плиз
https://github.com/facebook/folly/blob/master/folly/futures/README.md ну вот это несколько более композабельно
Berkus
а value через промис ставится, из него фьючер вытаскивается и возвращается
Kirill
по поводу тестовых заданий напомнило доклад
https://www.youtube.com/watch?v=zUVQhcu32rg
там нужно было человеку из строки выпилить подстроку и заменить. ну он заюзал готовый фреймворк, написал 2 строчки кода, отправил и получил работу)
Kirill
Roman
понял, короче нужно написать некую обёрткну чтоб можно было просто:
Checkpoint cp1;
cp1.resolve();
cp1.await();
Roman
в частности std::future не cancellable
это кстати та причина по которой я работаю над https://qbeon.github.io/QuickStreams/
эта парадигма мощнее Callback'ов, Promise'ов и Future'ов и даже Rx подхода, но я разработал QS специально для Qt, не std cpp
Roman
пишу вот автотесты для неё (библиотеки), но асинхронных функциональных тестов видимо пишут не много поэтому опять приходится изобретать
Aragaer
o/
Aragaer
Совершенно случайно - кто-нибудь может помочь с запуском pvs studio?
Aragaer
не помогает
Aragaer
линукс
Aragaer
ну вот у меня почему-то не заводится
Aragaer
No compilation units found
Aragaer
не, не cmake
Aragaer
да, кросс-компилятор
Aragaer
не cmake, просто make
Aragaer
кросс-компилятор, но я вроде бы его указал
Aragaer
$ pvs-studio-analyzer analyze -o pvs.log -C sparc-rtems-g++ -C g++ -C sparc-rtems-gcc -C gcc
No compilation units found
Analysis finished in 0:00:00.00
Aragaer
пробовал сгенерить compile_commands.json - аналогично, не ест
Aragaer
сначала вызывал trace. Он создал strace_out
Aragaer
потом вызываю analyze - он должен это самый strace_out подцепить
Aragaer
но даже если явно укажу -f strace_out результат тот же
Berkus
strace? wat
Aragaer
да
Aragaer
-f FILE, --file FILE (default: 'compile_commands.json', 'strace_out')
Use trace output or compile commands database FILE.
Aragaer
да, нормально генерируется
Aragaer
попробую
Mikhail
что такое noexcept квалификатор в двух словах?
Roman
so how about that?
test() {
Checkpoint cpMain(1000);
Checkpoint cpAttached(1000);
Checkpoint cpFailure(1000);
streams.create([]{
// this stream must be awoken!
cpMain()
})
.attach([]{
// this stream must be awoken!
cpAttached()
})
.failure([]{
// this stream shall never be awoken!
cpFailure()
});
// await cpMain and cpAttached to be unlocked
// if those time out - test fails
cpMain.must()
cpAttached.must()
// await cpFailure to time out
// because it's not exepected to be reached
// if it's unlocked - test fails
cpFailure.mustNot()
EXPECT_FALSE(cpMain.failed())
EXPECT_FALSE(cpAttached.failed())
EXPECT_FALSE(cpFailure.failed())
}
Checkpoint как примитив блокиратор плюс
Roman
есть конечно недостаток.. timeout здесь обязателен, дабы убедиться что failure не вызывается
Berkus
Berkus
я бы свернул must() и mustNot() вместе с експектом, чтобы меньше писать
Mikhail
ага, спаибо!