for (size_t i = 0; i < tab.size(); ++i)
vec[i] == temp[i];
Tutaj nie masz asercji w tej pętli, więc te wartości mogą być różne a test i tak przejdzie. Powinno tam być np. ASSERT_EQ(vec[i], temp[i])
. Co do testerów to pewnie jest różnie, ale generalnie testerzy raczej nie testują funkcji bezpośrednio w unit testach. testerzy raczej traktują dany większy element kodu jako black box i wtedy weryfikują odpowiedzi danego modułu oprogramowania na różne dane wejściowe(albo kombinacje takich danych jeżeli dane są wprowadzane w jakiś sekwencjach), wtedy działanie tych funkcji też jest pośrednio testowane. Innym poziomem testowania może być np. testowanie już zintegrowanego produktu i konkretnych use case'ów, wtedy weryfikujesz czy aplikacja działa zgodnie z wymaganiami, są testy typu robustness kiedy np. piszesz skrypt który "szarpie" daną aplikacją(np. szybko wykonuje jakieś długie sekwencje możliwych do wykonania akcji), w zależności od specyfiki branży można też wykonywać testy badające jakieś 'performance indicatory' pod danymi obciążeniami czy podczas działania aplikacji na danych konfiguracjach sprzętu itd. itp. Testowanie to szeroka dziedzina, przeważnie bardziej wymagająca wiedzy domenowej niż czysto programistycznej.Takie unit testy badające tylko to zwraca dana funkcja to tylko malutki wycinek tematu unit testów, bardziej zaawansowane jest testowanie z użyciem mocków, gdzie sprawdzasz czy twoja funkcja spowoduje że jakieś obiekty zawołają swoje metody, możesz w takich testach wymusić że te metody coś zwrócą i wtedy aplikacja skieruje się w jakiś swój branch gdzie znowu jakiś inny obiekt coś wywoła itd.