Commit 76159847 by Szeberényi Imre

typo + gtest_lite v3

parent ebb26348
#ifndef GTEST_LITE_H #ifndef GTEST_LITE_H
#define GTEST_LITE_H #define GTEST_LITE_H
/** /**
* \file gtest_lite.h (v2) * \file gtest_lite.h (v3/2019)
* *
* Google gtest keretrendszerhez hasonló rendszer. * Google gtest keretrendszerhez hasonló rendszer.
* Sz.I. 2015., 2016., 2017. (_Has_X) * Sz.I. 2015., 2016., 2017. (_Has_X)
* Sz.I. 2018 (template), ENDM, ENDMsg * Sz.I. 2018 (template), ENDM, ENDMsg, nullptr_t
* Sz.I. 2019 singleton
* *
* A tesztelés legalapvetőbb funkcióit támogató függvények és makrók. * A tesztelés legalapvetőbb funkcióit támogató függvények és makrók.
* Nem szálbiztos megvalósítás. * Nem szálbiztos megvalósítás.
* *
* Egyetlen fájlban kell megvalósítani minden tesztesetet!
* Csak ebből include-olható a gtest_lite.h
* Ezen korlátozás kiküszöböléséhez sigletonnal kellene rednesen megvalósítani.
a test osztályt!
* *
* Szabadon felhasználható, bővíthető. * Szabadon felhasználható, bővíthető.
* *
...@@ -129,6 +126,11 @@ ...@@ -129,6 +126,11 @@
catch (...) { gtest_lite::test.tmp = false; }\ catch (...) { gtest_lite::test.tmp = false; }\
EXPECTTHROW(statement, "nem dob kivetelt.", "kivetelt dobott.") EXPECTTHROW(statement, "nem dob kivetelt.", "kivetelt dobott.")
/// Nem várunk kivételt gtest kompatibilitás miatt
#define ASSERT_NO_THROW(statement) try { gtest_lite::test.tmp = true; statement; } \
catch (...) { gtest_lite::test.tmp = false; }\
EXPECTTHROW(statement, "nem dob kivetelt.", "kivetelt dobott.")
/// Kivételt várunk és továbbdobjuk -- ilyen nincs a gtest-ben /// Kivételt várunk és továbbdobjuk -- ilyen nincs a gtest-ben
#define EXPECT_THROW_THROW(statement, exception_type) try { gtest_lite::test.tmp = false; statement; } \ #define EXPECT_THROW_THROW(statement, exception_type) try { gtest_lite::test.tmp = false; statement; } \
catch (exception_type) { gtest_lite::test.tmp = true; throw; } \ catch (exception_type) { gtest_lite::test.tmp = true; throw; } \
...@@ -150,10 +152,14 @@ template<typename T> struct _Has_##X { \ ...@@ -150,10 +152,14 @@ template<typename T> struct _Has_##X { \
static bool const member = sizeof(f<Derived>(0)) == 2; \ static bool const member = sizeof(f<Derived>(0)) == 2; \
}; };
/// Segédfüggvény egy publikus adattag, vagy tagfüggvény létezésének tesztelésére
/// fordítási időben
inline void hasMember(...) {}
/// Segédsablon típuskonverzió futás közbeni ellenőrzésere /// Segédsablon típuskonverzió futás közbeni ellenőrzésere
template <typename F, typename T> template <typename F, typename T>
struct _Is_Types { struct _Is_Types {
template<typename D> static char (&f(D))[1]; template<typename D> static char (&f(D*))[1];
template<typename D> static char (&f(...))[2]; template<typename D> static char (&f(...))[2];
static bool const convertable = sizeof(f<T>(F())) == 1; static bool const convertable = sizeof(f<T>(F())) == 1;
}; };
...@@ -197,8 +203,15 @@ struct Test { ...@@ -197,8 +203,15 @@ struct Test {
bool tmp; ///< temp a kivételkezeléshez; bool tmp; ///< temp a kivételkezeléshez;
std::string name; ///< éppen futó teszt neve std::string name; ///< éppen futó teszt neve
std::fstream null; ///< nyelő, ha nem kell kiírni semmit std::fstream null; ///< nyelő, ha nem kell kiírni semmit
static Test& getTest() {
static Test instance;///< egyedüli (singleton) példány
return instance;
}
private: /// singleton minta miatt
Test() :sum(0), failed(0), status(false), null("/dev/null") {} Test() :sum(0), failed(0), status(false), null("/dev/null") {}
Test(const Test&);
void operator=(const Test&);
public:
/// Teszt kezdete /// Teszt kezdete
void begin(const char *n) { void begin(const char *n) {
name = n; status = true; name = n; status = true;
...@@ -255,12 +268,13 @@ struct Test { ...@@ -255,12 +268,13 @@ struct Test {
} }
}; };
/// Egyetlen statikus példány. (singletonnal szebb lenne) /// A statikus referencia minden fordítási egységben keletkezik, de
static Test test; /// mindegyik egyetlen példányra fog hivatkozni a singleton minta miatt
static Test& test = Test::getTest();
/// általános sablon a várt értékhez. /// általános sablon a várt értékhez.
template <typename T> template <typename T1, typename T2>
std::ostream& EXPECT_(T exp, T act, bool (*pred)(T, T), const char *file, int line, std::ostream& EXPECT_(T1 exp, T2 act, bool (*pred)(T1, T2), const char *file, int line,
const char *expr, const char *lhs = "elvart", const char *rhs = "aktual") { const char *expr, const char *lhs = "elvart", const char *rhs = "aktual") {
return test.expect(pred(exp, act), file, line, expr) return test.expect(pred(exp, act), file, line, expr)
<< "** " << lhs << ": " << std::boolalpha << exp << "** " << lhs << ": " << std::boolalpha << exp
...@@ -268,14 +282,25 @@ std::ostream& EXPECT_(T exp, T act, bool (*pred)(T, T), const char *file, int li ...@@ -268,14 +282,25 @@ std::ostream& EXPECT_(T exp, T act, bool (*pred)(T, T), const char *file, int li
} }
/// pointerre specializált sablon a várt értékhez. /// pointerre specializált sablon a várt értékhez.
template <typename T> template <typename T1, typename T2>
std::ostream& EXPECT_(T* exp, T* act, bool (*pred)(T*, T*), const char *file, int line, std::ostream& EXPECT_(T1* exp, T2* act, bool (*pred)(T1*, T2*), const char *file, int line,
const char *expr, const char *lhs = "elvart", const char *rhs = "aktual") { const char *expr, const char *lhs = "elvart", const char *rhs = "aktual") {
return test.expect(pred(exp, act), file, line, expr) return test.expect(pred(exp, act), file, line, expr)
<< "** " << lhs << ": " << (void*) exp << "** " << lhs << ": " << (void*) exp
<< "\n** " << rhs << ": " << (void*) act << std::endl; << "\n** " << rhs << ": " << (void*) act << std::endl;
} }
#if __cplusplus >= 201103L
/// nullptr-re specializált sablon a várt értékhez.
template <typename T1>
std::ostream& EXPECT_(T1* exp, std::nullptr_t act, bool (*pred)(T1*, std::nullptr_t), const char *file, int line,
const char *expr, const char *lhs = "elvart", const char *rhs = "aktual") {
return test.expect(pred(exp, act), file, line, expr)
<< "** " << lhs << ": " << (void*) exp
<< "\n** " << rhs << ": " << (void*) act << std::endl;
}
#endif
/// stringek összehasonlításához. /// stringek összehasonlításához.
/// azért nem spec. mert a sima EQ-ra másként kell működnie. /// azért nem spec. mert a sima EQ-ra másként kell működnie.
inline inline
...@@ -288,8 +313,8 @@ std::ostream& EXPECTSTR(const char *exp, const char *act, bool (*pred)(const cha ...@@ -288,8 +313,8 @@ std::ostream& EXPECTSTR(const char *exp, const char *act, bool (*pred)(const cha
/// segéd sablonok a relációkhoz. /// segéd sablonok a relációkhoz.
/// azért nem STL (algorithm), mert csak a függvény lehet, hogy menjen a deduckció /// azért nem STL (algorithm), mert csak a függvény lehet, hogy menjen a deduckció
template <typename T> template <typename T1, typename T2>
bool eq(T a, T b) { return a == b; } bool eq(T1 a, T2 b) { return a == b; }
inline inline
bool eqstr(const char *a, const char *b) { bool eqstr(const char *a, const char *b) {
...@@ -298,8 +323,8 @@ bool eqstr(const char *a, const char *b) { ...@@ -298,8 +323,8 @@ bool eqstr(const char *a, const char *b) {
return false; return false;
} }
template <typename T> template <typename T1, typename T2>
bool ne(T a, T b) { return a != b; } bool ne(T1 a, T2 b) { return a != b; }
inline inline
bool nestr(const char *a, const char *b) { bool nestr(const char *a, const char *b) {
...@@ -308,17 +333,17 @@ bool nestr(const char *a, const char *b) { ...@@ -308,17 +333,17 @@ bool nestr(const char *a, const char *b) {
return false; return false;
} }
template <typename T> template <typename T1, typename T2>
bool le(T a, T b) { return a <= b; } bool le(T1 a, T2 b) { return a <= b; }
template <typename T> template <typename T1, typename T2>
bool lt(T a, T b) { return a < b; } bool lt(T1 a, T2 b) { return a < b; }
template <typename T> template <typename T1, typename T2>
bool ge(T a, T b) { return a >= b; } bool ge(T1 a, T2 b) { return a >= b; }
template <typename T> template <typename T1, typename T2>
bool gt(T a, T b) { return a > b; } bool gt(T1 a, T2 b) { return a > b; }
/// Segédsablon valós számok összehasonlításához /// Segédsablon valós számok összehasonlításához
/// Nem bombabiztos, de nekünk most jó lesz /// Nem bombabiztos, de nekünk most jó lesz
......
...@@ -3,12 +3,13 @@ Memoriaszivargas-detektor ...@@ -3,12 +3,13 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013. Kanari: Szeberenyi Imre, 2013.
VS 2012: Szebernyi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
meset felszabaditaskor: 2018. meset felszabaditaskor: 2018.
typo: 2019.
*********************************/ *********************************/
/*definiealni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */ /*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */
/*#define MEMTRACE */ /*#define MEMTRACE */
#ifdef _MSC_VER #ifdef _MSC_VER
...@@ -207,10 +208,10 @@ START_NAMESPACE ...@@ -207,10 +208,10 @@ START_NAMESPACE
} }
} }
/* ha nincs hiba, akkor 0-val tr vissza */ /* ha nincs hiba, akkor 0-val tér vissza */
int mem_check(void) { int mem_check(void) {
initialize(); initialize();
if(dying) return 2; /* cmzsi hiba */ if(dying) return 2; /* címzési hiba */
if(registry.next) { if(registry.next) {
/*szivarog*/ /*szivarog*/
...@@ -220,7 +221,7 @@ START_NAMESPACE ...@@ -220,7 +221,7 @@ START_NAMESPACE
fprintf(fperror, "Szivargas:\n"); fprintf(fperror, "Szivargas:\n");
print_registry_item(registry.next); print_registry_item(registry.next);
registry.next = NULL; registry.next = NULL;
return 1; /* memria fogys */ return 1; /* memória fogyás */
} }
return 0; return 0;
} }
...@@ -320,7 +321,7 @@ START_NAMESPACE ...@@ -320,7 +321,7 @@ START_NAMESPACE
END_NAMESPACE END_NAMESPACE
/*******************************************************************/ /*******************************************************************/
/* C-stlus memriakezels */ /* C-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_C #ifdef MEMTRACE_C
...@@ -414,7 +415,7 @@ END_NAMESPACE ...@@ -414,7 +415,7 @@ END_NAMESPACE
#endif/*MEMTRACE_C*/ #endif/*MEMTRACE_C*/
/*******************************************************************/ /*******************************************************************/
/* C++-stlus memriakezels */ /* C++-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
...@@ -431,7 +432,7 @@ START_NAMESPACE ...@@ -431,7 +432,7 @@ START_NAMESPACE
void set_delete_call(int line, const char * file) { void set_delete_call(int line, const char * file) {
initialize(); initialize();
delete_call=pack(0,"",line,file); /*func rtke lnyegtelen, majd fellrjuk*/ delete_call=pack(0,"",line,file); /*func értéke lényegtelen, majd felülírjuk*/
delete_called = TRUE; delete_called = TRUE;
} }
...@@ -488,7 +489,7 @@ void operator delete[](void * p) THROW_NOTHING { ...@@ -488,7 +489,7 @@ void operator delete[](void * p) THROW_NOTHING {
} }
/* Visual C++ 2012 miatt kell, mert hklis, hogy nincs megfelel delete, br senki sem hasznlja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void * p, int, const char *) THROW_NOTHING { void operator delete(void * p, int, const char *) THROW_NOTHING {
memtrace::traced_delete(p,FDELETE); memtrace::traced_delete(p,FDELETE);
} }
......
...@@ -3,9 +3,9 @@ Memoriaszivargas-detektor ...@@ -3,9 +3,9 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013., Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szebernyi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
inclue-ok: 2017., 2018. inclue-ok: 2017., 2018. 2019.
*********************************/ *********************************/
#ifndef MEMTRACE_H #ifndef MEMTRACE_H
...@@ -13,7 +13,7 @@ inclue-ok: 2017., 2018. ...@@ -13,7 +13,7 @@ inclue-ok: 2017., 2018.
#if defined(MEMTRACE) #if defined(MEMTRACE)
/*ha definilva van, akkor a hibakat ebbe a fajlba rja, egybkent stderr-re*/ /*ha definiálva van, akkor a hibakat ebbe a fajlba írja, egyébkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/ /*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/ /*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
...@@ -71,25 +71,25 @@ inclue-ok: 2017., 2018. ...@@ -71,25 +71,25 @@ inclue-ok: 2017., 2018.
#define TRACEC(func) func #define TRACEC(func) func
#endif #endif
// THROW deklarci vltozatai // THROW deklaráció változatai
#if defined(_MSC_VER) #if defined(_MSC_VER)
// VS rosszul kezeli az __cplusplus makrot // VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900 #if _MSC_VER < 1900
// * nem biztos, hogy j gy * // * nem biztos, hogy jó így *
#define THROW_BADALLOC #define THROW_BADALLOC
#define THROW_NOTHING #define THROW_NOTHING
#else #else
// C++11 vagy jabb // C++11 vagy újabb
#define THROW_BADALLOC noexcept(false) #define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept #define THROW_NOTHING noexcept
#endif #endif
#else #else
#if __cplusplus < 201103L #if __cplusplus < 201103L
// C++2003 vagy rgebbi // C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc) #define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw () #define THROW_NOTHING throw ()
#else #else
// C++11 vagy jabb // C++11 vagy újabb
#define THROW_BADALLOC noexcept(false) #define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept #define THROW_NOTHING noexcept
#endif #endif
...@@ -144,12 +144,15 @@ END_NAMESPACE ...@@ -144,12 +144,15 @@ END_NAMESPACE
#include <stdlib.h> #include <stdlib.h>
#ifdef __cplusplus #ifdef __cplusplus
#include <iostream> #include <iostream>
/* ide gyjtjk a nemtrace-vel sszeakad headereket, hogy elbb legyenek */ /* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjben van deleted definici #include <fstream> // VS 2013 headerjében van deleted definició
#include <sstream> #include <sstream>
#include <vector> #include <vector>
#include <list>
#include <map>
#include <algorithm> #include <algorithm>
#include <functional>
#endif #endif
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
namespace std { namespace std {
...@@ -197,7 +200,7 @@ void * operator new[](size_t size) THROW_BADALLOC; ...@@ -197,7 +200,7 @@ void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING; void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING; void operator delete[](void * p) THROW_NOTHING;
/* Visual C++ 2012 miatt kell, mert hklis, hogy nincs megfelel delete, br senki sem hasznlja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING; void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING; void operator delete[](void *p, int, const char *) THROW_NOTHING;
...@@ -206,7 +209,7 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING; ...@@ -206,7 +209,7 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete #define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA #ifdef CPORTA
//#define system(...) // system(__VA_ARGS__) #define system(...) // system(__VA_ARGS__)
#endif #endif
#endif /*MEMTRACE_CPP*/ #endif /*MEMTRACE_CPP*/
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* C++ nyelvre átírt dinamikus String működését teszteli. * C++ nyelvre átírt dinamikus String működését teszteli.
* *
* Ha a javasolt sorrendben oldja meg a feladatot, akkor lépésről-lépésre * Ha a javasolt sorrendben oldja meg a feladatot, akkor lépésről-lépésre
* tesztelheti az elkészített függvényeket. Ehhez a string1.h fájlban definiált * tesztelheti az elkészített függvényeket. Ehhez a string2.h fájlban definiált
* ELKESZULT makró értékét kell megfelelően változtatni. * ELKESZULT makró értékét kell megfelelően változtatni.
* *
* A C verzióval ellentétben nem csak szemrevételezéssel ellenőrizzük az egyes * A C verzióval ellentétben nem csak szemrevételezéssel ellenőrizzük az egyes
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment