рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Google рдЯреЗрд╕реНрдЯ, Catch2, Boost.Test, рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрдВрдзреЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:
namespace {
C ++ рдореЗрдВ рдореИрдХреНрд░реЛрдВ рд╕рд╛рд╡рдзрд╛рди рд╣реИрдВ, рд╡реЗ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЗрддрдиреЗ рд╕рдВрдкрдиреНрди рдХреНрдпреЛрдВ рд╣реИрдВ?
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд░рдирдЯрд╛рдЗрдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдв рд╕рдХреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХреЗред рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдЯреЗрд╕реНрдЯ () рдореИрдХреНрд░реЛ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (Google рдЯреЗрд╕реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдХреНрд░реЛ рдПрдХ рд╡рд░реНрдЧ рднреА рдмрдирд╛рддрд╛ рд╣реИ) рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдПрдХрд▓ рдореИрдХреНрд░реЛ рдХреЗ рдмрд┐рдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЯреБрдЯ-рдлреНрд░реЗрдорд╡рд░реНрдХ ред рдЖрдЗрдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдЙрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
#include <tut/tut.hpp> namespace tut { struct basic{}; typedef test_group<basic> factory; typedef factory::object object; } namespace { tut::factory tf("basic test"); } namespace tut { template<> template<> void object::test<1>() { ensure_equals("2+2=?", 2+2, 4); } }
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рдЕрдВрдбрд░рд▓рд╛рдЗрдЬрд╝ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ:
template <class Data> class test_object : public Data { template <int n> void test() { called_method_was_a_dummy_test_ = true; } }
рдЕрдм рдЬрдм рдЖрдк рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
template<> template<> void object::test<1>() { ensure_equals("2+2=?", 2+2, 4); }
рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ N = 1 рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ template<>template<>
рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ)ред test<N>()
рдХрд╣рдХрд░ test<N>()
рдкрд░реАрдХреНрд╖рдг рд░рдирдЯрд╛рдЗрдо рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдерд╛ рдпрд╛ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж called_method_was_a_dummy_test_
рдирд╛рдордХ рдорд╛рди рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред
рдЕрдЧрд▓рд╛, рдЬрдм рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдореВрд╣ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
tut::factory tf("basic test");
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА test<N>
рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╡рд╛рдпрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╕реЗ, рдЖрдк рд╕рдореВрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ (рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо рдФрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ tut::ensure_equals()
рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП tut::ensure_equals()
рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ рдпрджрд┐ рджреЛ рдорд╛рди рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд░рди рд╡рд╛рддрд╛рд╡рд░рдг рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╡рд┐рдлрд▓ рдорд╛рди рд▓реЗрдЧрд╛ред рдореБрдЭреЗ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реА ++ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╛рд╡реЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдиреЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдзрд╛рдЧрд╛ рдмрдирд╛рдпрд╛, рддреЛ рд╡рд╣рд╛рдВ рджрд╛рд╡реЗ рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реИ, рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдкрдХрдбрд╝ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдЕрдкрд╡рд╛рдж-рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдереЗред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЯреБрдЯ-рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдЧреБрдг рднреА рд╣реЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╛рдо, рд╕рд╛рде рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд╛ "рдЖрдХрд╛рд░" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдпрд╣ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╣реИ рдпрд╛ рдпрд╣ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╣реИ)ред рдпрд╣ рдПрдкреАрдЖрдИ рдЯреБрдЯ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ:
template<> template<> void object::test<1>() { set_name("2+2");
рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреБрдЯ рдЯреЗрд╕реНрдЯ рд░рди рдкрд░реНрдпрд╛рд╡рд░рдг рдРрд╕реЗ рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрддред рд╡рд╛рддрд╛рд╡рд░рдг object::test<N>()
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ object::test<N>()
рдФрд░ рдпрд╣ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рд╕реА рджрд┐рдП рдЧрдП N рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯрдм рд╣реИред рд╡рд╣ рдХреЗрд╡рд▓ рдпрд╣ called_method_was_a_dummy_test_
рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрдм called_method_was_a_dummy_test_
рдореВрд▓реНрдп called_method_was_a_dummy_test_
ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЦреБрдж рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЙрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдмреАрдЪ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдореБрдЦреНрдп рдЪреАрдЬ рдЬрд┐рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ "рдШрд╛рддрдХ рджреЛрд╖") рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЯреБрдЯ-рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рд╣реИрдВ: рдкрд╣рд▓реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ struct basic{}
рдмрдирд╛рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рдЖрдк рдЙрди рддрд░реАрдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╕рдореВрд╣ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлреНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреЗрдпреВрдирд┐рдЯ рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рдмрдирд╛рддреЗ рд╣реИрдВред рдЯреБрдЯ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕реВрдЦ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ, рд╣рдо рдмрд╛рдЗрдХ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдпрд╣ рдиреНрдпреВрдирддрдо рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдореИрдХреНрд░реЛ рдХреА рдХрдореА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдмреЛрдирд╕ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╡реЗрд╢ рд╕реНрддрд░ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреБрдЯ рдХреЗ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╣реАрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛рд░реНрдп рд╣реИ:
template <int N> static void Case(IRuntime* runtime) { throw TheCaseIsAStub(); }
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдореЗрдВ, рд╣рдо рдРрд╕реЗ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдирд╛рдо рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдирд┐рдпрдо рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ StartCase()
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд╛рдо рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬреЛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИрдВред
рдЬрдм рдПрдХ рдкрд░реАрдХреНрд╖рдг runtime->StartTest()
рдХреЙрд▓ рдХрд░рддрд╛ runtime->StartTest()
, рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдЕрдм рд░рди рдореЛрдб рдореЗрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рддреЛ StartTest()
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж StartTest()
рдлреЗрдВрдХ StartTest()
, StartTest()
рдЕрд░реНрде рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рдФрд░ рд╕реНрдЯрдм рдирд╣реАрдВред
рдкрдВрдЬреАрдХрд░рдг
рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдЖрдкрдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдкрддреЗ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдпрд╣ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рд┐рдд рдХрд╛ рдирд┐рд░реНрдорд╛рдг :: рд╕рдореВрд╣ рд╡рд░реНрдЧ рдЗрд╕реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ:
static tested::Group<CASE_COUNTER> x("std.vector", __FILE__);
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рднреА Case<N>
рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдореЗрдВ рдкрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдореЗрдВ рдЖрдкрдХреЗ рджреЛ рд╕рдореВрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдореВрд╣ рдХреЛ рдХрдИ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдмрд╛рдБрдЯ рд╕рдХрддреЗред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдХрд┐ рдмрдирд╛рдП рдЧрдП рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд╣реИрдВред
рдЬреЛрдбрд╝рдиреЗ
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг :: рд╕рдореВрд╣ () рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
void LinkStdVectorTests() { static tested::Group<CASE_COUNTER> x("std.vector", __FILE__); }
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХрднреА-рдХрднреА рдЖрдк tested::Group
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ tested::Group
рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ tested::Group
рдХреНрд▓рд╛рд╕ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХрд░ рдХрднреА-рдХрднреА рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ "рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝" рдХрд░ рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡рд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдЗрдХрдЯреНрдард╛ рд╣реЛ рдЬрд╛рдП, рдФрд░ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд╕ cpp рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
calc.lib <- calc_test.lib(calc_test.cpp) ^ ^ | | app.exe run_test.exe
рдЬрдм calc_test.cpp рдХреЛ run_test.exe рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рд┐рдВрдХрд░ рдмрд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдХрд┐рд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ run_test.exe рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void LinkStdVectorTests() { static tested::Group<CASE_COUNTER> x("std.vector", __FILE__); }
рдпрд╛ рддреЛ:
static tested::Group<CASE_COUNTER> x("std.vector", __FILE__); void LinkStdVectorTests() { }
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдореБрдЦреНрдп () рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЖрд╡реЗрджрди рдХрд╛ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреИрд╕рд╛рдЦреА рдХреА рдпрд╣ рд╕реНрдерд╛рдкрдирд╛ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ- рд╣реЛрд▓-рдЖрд░реНрдХрд╛рдЗрд╡ (MSVC рдореЗрдВ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЗрд╡рд▓ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2015.3 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛)ред
рдореИрдХреНрд░реЛ
рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХреЛрдИ рдореИрдХреНрд░реЛрдЬрд╝ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ - CASE_COUNTER
ред рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ __COUNTER__
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдореИрдХреНрд░реЛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
GCC, CLANG, MSVC рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рджрд┐рдП рдЧрдП рд╣реИрдВ:
- рд╕рдВрдЦреНрдпрд╛ 0, 1, 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдорд╛рдирдХ
__LINE__
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред - 80 рдХреЗ рд╕реНрддрд░ рдХреЗ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк "рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрд╕ рдХрд╛рдЙрдВрдЯрд░" рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
__LINE__
рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдмрдирддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдореВрд╣ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдкреИрдЯрд░реНрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ред
рдЧрддрд┐рд╢реАрд▓ рд╕реНрдореГрддрд┐ рдХреА рд╡рд┐рдлрд▓рддрд╛
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рджрд░реНрдЬ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Google рдЯреЗрд╕реНрдЯ рдЗрд╕реА рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реИ, рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:
рдФрд░ рд╣рдо рдмрд╕ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдлрд┐рд░ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдорд┐рд▓рддреА рд╣реИ? рдпреЗ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдЗрдВрдЯрд░реНрди рд╣реИрдВ, рдЬреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА рдмрддрд╛рдКрдВрдЧрд╛ред
рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕рдХрд╛ рд╡рд░реНрдЧ tested::CaseCollector<CASE_COUNTER>::collect
рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ tested::CaseCollector<CASE_COUNTER>::collect
рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рд╕рднреА рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдореЗрдВ CaseListEntry CaseCollector \ :: s_caseListEntry рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рд╕реНрдерд┐рд░ рдЪрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЪреА рдХреЗ рддрддреНрд╡ рд╣реИрдВ, рдФрд░ рд╕рдВрдЧреНрд░рд╣ () рд╡рд┐рдзрд┐ рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдХрдиреЗрдХреНрдЯ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИред рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣, рд╕реВрдЪреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рдореВрд╣ рдмрдирд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрдЯрд░реНрди рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ред
рд╕рдВрд░рдЪрдирд╛
рдЯреЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд▓рд╛рд▓ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ, рдЕрд╕рдлрд▓, рд╕реАрдЖрдИ рдпрд╛ рдЬреАрдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪрдпрдирд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ рдерд╛, рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рд╣реИред рджрд╛рд╡рд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЦреБрдж рдХреЛ "рд╣реЗрдбрд░-рдУрдирд▓реА" рдХрд╣рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред
рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡рдпрдВ рдФрд░ рдмреИрдХ-рдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реАред рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдЪ, рдЬреЛ рдЕрдм C ++ 17 рд╣реИ (std :: std :: string_view рдХреЗ рдХрд╛рд░рдг) рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ C ++ 98 рд╣реЛрдЧрд╛ред Tested.h рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдиреНрдпреВрдирддрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓реЙрдиреНрдЪ рд╡рд┐рдХрд▓реНрдк, рд╕рд╛рде рд╣реА рдкрд░реАрдХреНрд╖рдг (рд╕рдореВрд╣реЛрдВ, рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ) рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдмреИрдХ-рдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдЬреЛ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд▓реЙрдиреНрдЪрд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рддрд░рд╣, рдЖрдк рд▓реЙрдиреНрдЪ рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдп ( рдЬреАрдереВрдм рдХреЛрдб ) рдХреЛ рдЕрднреА рднреА рдХреБрдЫ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрд░реАрдХреНрд╖рдг (WebAssembly рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ) рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрднреА рднреА рдЙрддреНрдкрд╛рджрди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдЪрд╛рдирдХ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдордВрдЪ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдВрд╕ рд▓реЗрдВ рдФрд░ рд╕рдореБрджрд╛рдп рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╛рдВрдЧреЗрдВред рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реЛрдВрдЧреЗ? рд╢рд╛рдпрдж C ++ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдРрд╕рд╛ рдмрдпрд╛рди рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ?