• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pokazywanie wyrażenia z kodu źródłowego w funkcjach inline

Cloud VPS
0 głosów
149 wizyt
pytanie zadane 25 marca w C i C++ przez whiteman808 Mądrala (5,010 p.)

W jaki sposób mogę poniższe makra zamienić na funkcje inline, tak żeby pokazywały one wyrażenie podstawione za argument expr w kodzie źródłowym oprócz samego wyniku testu? W makrach jest to wykonalne ale wolę używać funkcji inline zamiast polegać na preprocesorze

#include <cassert>
#include <iostream>

#define CHECKPOINT(msg) (std::cerr << (msg) << std::endl)
#define ASSERT(expr) \
    assert((expr)); \
    CHECKPOINT("* test passed");
#define ASSERTM(msg, expr) \
    assert((void(msg), (expr))); \
    CHECKPOINT("* test passed");
#define ASSERT_FALSE(expr) \
    assert((expr) == false); \
    CHECKPOINT("* test passed");
#define ASSERTM_FALSE(msg, expr) \
    assert((void(msg), (expr) == false)); \
    CHECKPOINT("* test passed");
#define TEST_CASE(msg) \
    (std::cout << "TEST CASE: " << (msg) << std::endl)
komentarz 26 marca przez tkz Nałogowiec (42,040 p.)
Szablon? Nie wiem do końca co i jak chcesz zrobić. Ale pierwsza myśl to szablon i ewentualne specjalizacje.
komentarz 26 marca przez whiteman808 Mądrala (5,010 p.)
Chcę żeby funkcja inline o nazwie powiedzmy assert lub assert_true zliczała testy zakończone powodzeniem i niepowodzeniem oraz wyświetlała jakie konkretnie wyrażenie przekazane do niej wygenerowało false.

Powiedzmy że przekazuję do funkcji jako argument 2 == 3. W cout ma się wtedy pojawić assertion failed: 2 == 3. Analogicznie dla vec.size() > 0 ma pojawić się na wyjściu assertion failed: vec.size() > 0.

Moje pytanie dotyczy tego czy da się to zrobić bez przekazywania dodatkowego argumentu typu const char* lub std::string_view.
komentarz 26 marca przez tkz Nałogowiec (42,040 p.)

Generalnie to co próbujesz zrobić jest rozwiązane niejako w gtest. Gtest to libka do unit testów w c++. Imo generyczny assert to słaby pomysł. Z powodu samej czytelności, warunków jakie musisz zaimplemetnować w środku, czy samego podejścia do argumentów. 

Ale odpowiadajac, będzie to na wzór:

void assert(bool t)
{
    std::assert(t);
}

Moje pytanie dotyczy tego czy da się to zrobić bez przekazywania dodatkowego argumentu typu const char* lub std::string_view.

Generalnie o ile dobrze rozumiem pytanie, to nie, nie da się. Musisz jakoś przekazać funkjci co ma wypisać(ewentualnie skorzystać ze zmiennych globalnych/statycznych per klasa)

komentarz 26 marca przez whiteman808 Mądrala (5,010 p.)
Catch2 będzie dobre do testów jednostkowych?

Mogę wrzucać kod wykorzystujący gtest, catch2 na code review?
komentarz 26 marca przez whiteman808 Mądrala (5,010 p.)
W ogóle można wrzucać do code review kod wykorzystujący zewnętrzne biblioteki np. Boost?
komentarz 26 marca przez tkz Nałogowiec (42,040 p.)

Catch2 będzie dobre do testów jednostkowych?

Oczywiście. Jedna z najpopularniejszych bibliotek to UT w c++. 

Mogę wrzucać kod wykorzystujący gtest, catch2 na code review?

W ogóle można wrzucać do code review kod wykorzystujący zewnętrzne biblioteki np. Boost?

I tutaj odpowiedz to również, że oczywiście. Po prostu licz się z tym, że czym rzadsza biblioteka tym mniej chętnych do review. Nie mówię o boost czy gtest/catch, bo to raczej standard w branży i na pewno wszyscy programiści c++ słyszeli, a zdecydowana większość ich używała. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 986 wizyt
pytanie zadane 30 czerwca 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
2 odpowiedzi 208 wizyt
pytanie zadane 10 grudnia 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)
+1 głos
2 odpowiedzi 194 wizyt
pytanie zadane 5 lipca 2020 w JavaScript przez TOWaD Mądrala (6,520 p.)

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...