Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Prog2
/
ell_feladat
/
NHF
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
3e3e752c
authored
Mar 24, 2021
by
Szeberényi Imre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
me,trace c++14 jav
parent
2f95a4cd
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
194 additions
and
35 deletions
+194
-35
Kesz/Kesz.zip
+0
-0
Kesz/memtrace.cpp
+22
-13
Kesz/memtrace.h
+46
-10
Kesz/standard_input.txt
+1
-0
Test/gtest_lite.h
+100
-9
Test/memtrace.cpp
+8
-0
Test/memtrace.h
+17
-3
No files found.
Kesz/Kesz.zip
View file @
3e3e752c
No preview for this file type
Kesz/memtrace.cpp
View file @
3e3e752c
...
@@ -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.
*********************************/
*********************************/
/*defini
e
alni 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
...
@@ -167,7 +168,7 @@ START_NAMESPACE
...
@@ -167,7 +168,7 @@ START_NAMESPACE
fprintf
(
fperror
,
"%s
\n
"
,
msg
);
fprintf
(
fperror
,
"%s
\n
"
,
msg
);
if
(
p
)
{
if
(
p
)
{
fprintf
(
fperror
,
"
\t
Pointer:
\t
%p"
,
PU
(
p
));
fprintf
(
fperror
,
"
\t
Pointer:
\t
%p"
,
PU
(
p
));
if
(
size
)
fprintf
(
fperror
,
" (%
u byte)"
,
(
unsigned
)
size
);
if
(
size
)
fprintf
(
fperror
,
" (%
d byte)"
,
(
int
)
size
);
fprintf
(
fperror
,
"
\n
"
);
fprintf
(
fperror
,
"
\n
"
);
}
}
if
(
a
)
print_call
(
"
\t
Foglalas:
\t
"
,
*
a
);
if
(
a
)
print_call
(
"
\t
Foglalas:
\t
"
,
*
a
);
...
@@ -199,7 +200,7 @@ START_NAMESPACE
...
@@ -199,7 +200,7 @@ START_NAMESPACE
static
void
print_registry_item
(
registry_item
*
p
)
{
static
void
print_registry_item
(
registry_item
*
p
)
{
if
(
p
)
{
if
(
p
)
{
print_registry_item
(
p
->
next
);
print_registry_item
(
p
->
next
);
fprintf
(
fperror
,
"
\t
%p%5
u byte "
,
p
->
p
,
(
unsigned
)
p
->
size
);
fprintf
(
fperror
,
"
\t
%p%5
d byte "
,
p
->
p
,
(
int
)
p
->
size
);
print_call
(
NULL
,
p
->
call
);
print_call
(
NULL
,
p
->
call
);
if
(
p
->
call
.
par_txt
)
free
(
p
->
call
.
par_txt
);
if
(
p
->
call
.
par_txt
)
free
(
p
->
call
.
par_txt
);
if
(
p
->
call
.
file
)
free
(
p
->
call
.
file
);
if
(
p
->
call
.
file
)
free
(
p
->
call
.
file
);
...
@@ -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
;
/* c
mz
si 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
;
/* mem
ria fogy
s */
return
1
;
/* mem
ória fogyá
s */
}
}
return
0
;
return
0
;
}
}
...
@@ -250,7 +251,7 @@ START_NAMESPACE
...
@@ -250,7 +251,7 @@ START_NAMESPACE
initialize
();
initialize
();
allocated_blks
++
;
allocated_blks
++
;
#ifdef MEMTRACE_TO_FILE
#ifdef MEMTRACE_TO_FILE
fprintf
(
trace_file
,
"%p
\t
%d
\t
%s%s"
,
PU
(
p
),
size
,
pretty
[
call
.
f
],
call
.
par_txt
?
call
.
par_txt
:
"?"
);
fprintf
(
trace_file
,
"%p
\t
%d
\t
%s%s"
,
PU
(
p
),
(
int
)
size
,
pretty
[
call
.
f
],
call
.
par_txt
?
call
.
par_txt
:
"?"
);
if
(
call
.
f
<=
3
)
fprintf
(
trace_file
,
")"
);
if
(
call
.
f
<=
3
)
fprintf
(
trace_file
,
")"
);
fprintf
(
trace_file
,
"
\t
%d
\t
%s
\n
"
,
call
.
line
,
call
.
file
?
call
.
file
:
"?"
);
fprintf
(
trace_file
,
"
\t
%d
\t
%s
\n
"
,
call
.
line
,
call
.
file
?
call
.
file
:
"?"
);
fflush
(
trace_file
);
fflush
(
trace_file
);
...
@@ -320,7 +321,7 @@ START_NAMESPACE
...
@@ -320,7 +321,7 @@ START_NAMESPACE
END_NAMESPACE
END_NAMESPACE
/*******************************************************************/
/*******************************************************************/
/* C-st
lus memriakezel
s */
/* 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++-st
lus memriakezel
s */
/* 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 fell
rjuk*/
delete_call
=
pack
(
0
,
""
,
line
,
file
);
/*func
értéke lényegtelen, majd felülí
rjuk*/
delete_called
=
TRUE
;
delete_called
=
TRUE
;
}
}
...
@@ -486,9 +487,17 @@ void operator delete(void * p) THROW_NOTHING {
...
@@ -486,9 +487,17 @@ void operator delete(void * p) THROW_NOTHING {
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
}
}
#if __cplusplus >= 201402L
void
operator
delete
(
void
*
p
,
size_t
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETE
);
}
void
operator
delete
[](
void
*
p
,
size_t
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
}
#endif
/* Visual C++ 2012 miatt kell, mert h
klis, hogy nincs megfelel delete, br senki sem haszn
lja */
/* 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
);
}
}
...
@@ -514,7 +523,7 @@ START_NAMESPACE
...
@@ -514,7 +523,7 @@ START_NAMESPACE
#ifdef MEMTRACE_TO_MEMORY
#ifdef MEMTRACE_TO_MEMORY
registry
.
next
=
NULL
;
registry
.
next
=
NULL
;
#if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO)
#if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO)
atexit
((
void
(
*
)())
mem_check
);
atexit
((
void
(
*
)(
void
))
mem_check
);
#endif
#endif
#endif
#endif
#ifdef MEMTRACE_TO_FILE
#ifdef MEMTRACE_TO_FILE
...
...
Kesz/memtrace.h
View file @
3e3e752c
...
@@ -5,7 +5,7 @@ Keszitette: Peregi Tamas, BME IIT, 2011
...
@@ -5,7 +5,7 @@ Keszitette: Peregi Tamas, BME IIT, 2011
Kanari: Szeberenyi Imre, 2013.,
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
mem_dump: 2016.
inclu
de-ok: 2017, 2018
.
inclu
e-ok: 2017., 2018., 2019., 2021
.
*********************************/
*********************************/
#ifndef MEMTRACE_H
#ifndef MEMTRACE_H
...
@@ -71,15 +71,28 @@ include-ok: 2017, 2018.
...
@@ -71,15 +71,28 @@ include-ok: 2017, 2018.
#define TRACEC(func) func
#define TRACEC(func) func
#endif
#endif
/* A Visual Studio figyelmen kivul hagyja a "throw" deklaraciokat, a gcc -pedantic pedig igenyli.*/
// THROW deklaráció változatai
#ifdef _MSC_VER
#if defined(_MSC_VER)
/* Ha studio */
// VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy jó így *
#define THROW_BADALLOC
#define THROW_BADALLOC
#define THROW_NOTHING
#define THROW_NOTHING
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else
#else
/* Normalis forditok */
#if __cplusplus < 201103L
// 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
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#endif
#endif
START_NAMESPACE
START_NAMESPACE
...
@@ -131,12 +144,26 @@ END_NAMESPACE
...
@@ -131,12 +144,26 @@ END_NAMESPACE
#include <stdlib.h>
#include <stdlib.h>
#ifdef __cplusplus
#ifdef __cplusplus
#include <iostream>
#include <iostream>
/* ide gyűjtjük a nemtrace-
szel összeakadó headereket, hogy elõ
bb legyenek */
/* ide gyűjtjük a nemtrace-
vel összeakadó headereket, hogy elő
bb legyenek */
#include <fstream> // VS 2013 headerjében 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>
#include <memory>
#include <iomanip>
#include <locale>
#include <typeinfo>
#include <ostream>
#include <stdexcept>
#include <ctime>
#if __cplusplus >= 201103L
#include <iterator>
#include <regex>
#endif
#endif
#endif
#ifdef MEMTRACE_CPP
#ifdef MEMTRACE_CPP
namespace
std
{
namespace
std
{
...
@@ -162,7 +189,7 @@ START_NAMESPACE
...
@@ -162,7 +189,7 @@ START_NAMESPACE
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
=
stdout
);
END_NAMESPACE
END_NAMESPACE
...
@@ -184,7 +211,13 @@ void * operator new[](size_t size) THROW_BADALLOC;
...
@@ -184,7 +211,13 @@ 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 háklis, hogy nincs megfelelõ delete, bár senki sem használja */
#if __cplusplus >= 201402L
// sized delete miatt: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3536.html
void
operator
delete
(
void
*
p
,
size_t
)
THROW_NOTHING
;
void
operator
delete
[](
void
*
p
,
size_t
)
THROW_NOTHING
;
#endif
/* 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
;
...
@@ -193,11 +226,14 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
...
@@ -193,11 +226,14 @@ 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*/
#endif
/*FROM_MEMTRACE_CPP*/
#endif
/*FROM_MEMTRACE_CPP*/
#endif
/*MEMCHECK*/
#else
#pragma message ( "MEMTRACE NOT DEFINED" )
#endif
/*MEMTRACE*/
#endif
/*MEMTRACE_H*/
#endif
/*MEMTRACE_H*/
Kesz/standard_input.txt
View file @
3e3e752c
...
@@ -25,4 +25,5 @@
...
@@ -25,4 +25,5 @@
5 stop destruktor
5 stop destruktor
10 ez mar a vége
10 ez mar a vége
11 ne tovább
11 ne tovább
99
0
0
Test/gtest_lite.h
View file @
3e3e752c
...
@@ -8,6 +8,8 @@
...
@@ -8,6 +8,8 @@
* Sz.I. 2015., 2016., 2017. (_Has_X)
* Sz.I. 2015., 2016., 2017. (_Has_X)
* Sz.I. 2018 (template), ENDM, ENDMsg, nullptr_t
* Sz.I. 2018 (template), ENDM, ENDMsg, nullptr_t
* Sz.I. 2019 singleton
* Sz.I. 2019 singleton
* Sz.I. 2021 ASSERT.., STRCASE...
* Sz.I. 2021 EXPEXT_REGEXP
*
*
* 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.
...
@@ -26,6 +28,14 @@
...
@@ -26,6 +28,14 @@
* ...
* ...
* END
* END
* ...
* ...
* // Fatális hiba esetén a teszteset nem fut tovább. Ezek az ASSERT... makrók.
* // Nem lehet a kiírásukhoz további üzenetet fűzni. PL:
* TEST(TeszEsetNeve, TesztNeve)
* ASSERT_NO_THROW(f(0)); // itt nem lehet << "duma"
* EXPECT_EQ(4, f(2)) << "A függvény hibás eredményt adott" << std::endl;
* ...
* END
* ...
*
*
* A működés részleteinek megértése szorgalmi feladat.
* A működés részleteinek megértése szorgalmi feladat.
*/
*/
...
@@ -35,10 +45,15 @@
...
@@ -35,10 +45,15 @@
#include <cmath>
#include <cmath>
#include <cstring>
#include <cstring>
#include <limits>
#include <limits>
#include <cstdlib>
#include <string>
#include <string>
#include <fstream>
#include <fstream>
#if __cplusplus >= 201103L
# include <iterator>
# include <regex>
#endif
#ifdef MEMTRACE
#ifdef MEMTRACE
#include "memtrace.h"
#
include "memtrace.h"
#endif
#endif
// Két makró az egyes tesztek elé és mögé:
// Két makró az egyes tesztek elé és mögé:
...
@@ -50,19 +65,19 @@
...
@@ -50,19 +65,19 @@
/// a gtest keretrendszerbe.
/// a gtest keretrendszerbe.
/// @param C - teszteset neve (csak a gtest kompatibilitás miatt van külön neve az eseteknek)
/// @param C - teszteset neve (csak a gtest kompatibilitás miatt van külön neve az eseteknek)
/// @param N - teszt neve
/// @param N - teszt neve
#define TEST(C, N) { gtest_lite::test.begin(#C"."#N);
#define TEST(C, N)
do
{ gtest_lite::test.begin(#C"."#N);
/// Teszteset vége.
/// Teszteset vége.
#define END gtest_lite::test.end(); }
#define END gtest_lite::test.end(); }
while (false);
/// Teszteset vége allokált blokkok számának összehasonlításával
/// Teszteset vége allokált blokkok számának összehasonlításával
/// Ez az ellenőrzés nem bomba biztos.
/// Ez az ellenőrzés nem bomba biztos.
#define ENDM gtest_lite::test.end(true); }
#define ENDM gtest_lite::test.end(true); }
while (false);
/// Teszteset vége allokált blokkok számának összehasonlításával
/// Teszteset vége allokált blokkok számának összehasonlításával
/// Ez az ellenőrzés nem bomba biztos.
/// Ez az ellenőrzés nem bomba biztos.
/// Ha hiba van kiírja az üzenetet.
/// Ha hiba van kiírja az üzenetet.
#define ENDMsg(t) gtest_lite::test.end(true) << t << std::endl; }
#define ENDMsg(t) gtest_lite::test.end(true) << t << std::endl; }
while (false);
// Eredmények vizsgálatát segítő makrók.
// Eredmények vizsgálatát segítő makrók.
// A paraméterek és a funkciók a gtest keretrendszerrel megegyeznek.
// A paraméterek és a funkciók a gtest keretrendszerrel megegyeznek.
...
@@ -70,11 +85,13 @@
...
@@ -70,11 +85,13 @@
/// Sikeres teszt makrója
/// Sikeres teszt makrója
#define SUCCEED() gtest_lite::test.expect(true, __FILE__, __LINE__, "SUCCEED()", true)
#define SUCCEED() gtest_lite::test.expect(true, __FILE__, __LINE__, "SUCCEED()", true)
/// Sikertelen teszt makrója
/// Sikertelen teszt
fatális hiba
makrója
#define FAIL() gtest_lite::test.expect(false, __FILE__, __LINE__, "FAIL()", true)
#define FAIL() gtest_lite::test.expect(false, __FILE__, __LINE__, "FAIL()", true)
/// Azonosságot elváró makró
/// Sikertelen teszt makrója
#define ADD_FAILURE() gtest_lite::test.expect(false, __FILE__, __LINE__, "ADD_FAILURE()", true)
/// Azonosságot elváró makró
#define EXPECT_EQ(expected, actual) gtest_lite::EXPECT_(expected, actual, gtest_lite::eq, __FILE__, __LINE__, "EXPECT_EQ(" #expected ", " #actual ")" )
#define EXPECT_EQ(expected, actual) gtest_lite::EXPECT_(expected, actual, gtest_lite::eq, __FILE__, __LINE__, "EXPECT_EQ(" #expected ", " #actual ")" )
/// Eltérést elváró makró
/// Eltérést elváró makró
...
@@ -110,6 +127,12 @@
...
@@ -110,6 +127,12 @@
/// C stringek (const char *) eltéréset tesztelő makró
/// C stringek (const char *) eltéréset tesztelő makró
#define EXPECT_STRNE(expected, actual) gtest_lite::EXPECTSTR(expected, actual, gtest_lite::nestr, __FILE__, __LINE__, "EXPECT_STRNE(" #expected ", " #actual ")", "etalon" )
#define EXPECT_STRNE(expected, actual) gtest_lite::EXPECTSTR(expected, actual, gtest_lite::nestr, __FILE__, __LINE__, "EXPECT_STRNE(" #expected ", " #actual ")", "etalon" )
/// C stringek (const char *) azonosságát tesztelő makró (kisbetű/nagybetű azonos)
#define EXPECT_STRCASEEQ(expected, actual) gtest_lite::EXPECTSTR(expected, actual, gtest_lite::eqstrcase, __FILE__, __LINE__, "EXPECT_STRCASEEQ(" #expected ", " #actual ")" )
/// C stringek (const char *) eltéréset tesztelő makró (kisbetű/nagybetű azonos)
#define EXPECT_STRCASENE(expected, actual) gtest_lite::EXPECTSTR(expected, actual, gtest_lite::nestrcase, __FILE__, __LINE__, "EXPECT_STRCASENE(" #expected ", " #actual ")", "etalon" )
/// Kivételt várunk
/// Kivételt várunk
#define EXPECT_THROW(statement, exception_type) try { gtest_lite::test.tmp = false; statement; } \
#define EXPECT_THROW(statement, exception_type) try { gtest_lite::test.tmp = false; statement; } \
catch (exception_type) { gtest_lite::test.tmp = true; } \
catch (exception_type) { gtest_lite::test.tmp = true; } \
...
@@ -126,16 +149,39 @@
...
@@ -126,16 +149,39 @@
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
/// Nem várunk kivételt
#define ASSERT_NO_THROW(statement) try { gtest_lite::test.tmp = true; statement; } \
#define ASSERT_NO_THROW(statement) try { gtest_lite::test.tmp = true; statement; } \
catch (...) { gtest_lite::test.tmp = false; }\
catch (...) { gtest_lite::test.tmp = false; }\
EXPEC
TTHROW(statement, "nem dob kivetelt.", "kivetelt dobott.")
ASSER
TTHROW(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; } \
EXPECTTHROW(statement, "kivetelt dob.", "nem dobott '"#exception_type"' kivetelt.")
EXPECTTHROW(statement, "kivetelt dob.", "nem dobott '"#exception_type"' kivetelt.")
/// Környezeti változóhoz hasonlít -- ilyen nincs a gtest-ben
#define EXPECT_ENVEQ(expected, actual) gtest_lite::EXPECTSTR(std::getenv(expected), actual, gtest_lite::eqstr, __FILE__, __LINE__, "EXPECT_ENVEQ(" #expected ", " #actual ")" )
/// Környezeti változóhoz hasonlít -- ilyen nincs a gtest-ben (kisbetű/nagybetű azonos)
#define EXPECT_ENVCASEEQ(expected, actual) gtest_lite::EXPECTSTR(std::getenv(expected), actual, gtest_lite::eqstrcase, __FILE__, __LINE__, "EXPECT_ENVCASEEQ(" #expected ", " #actual ")" )
#if __cplusplus >= 201103L
/// Reguláris kifejezés illesztése
# define EXPECT_REGEXP(expected, actual, match, err) gtest_lite::EXPECTREGEXP(expected, actual, match, err, __FILE__, __LINE__, "EXPECT_REGEXP(" #expected ", " #actual ", " #match ")" )
#endif
////--------------------------------------------------------------------------------------------
/// ASSERT típusú ellenőrzések. CSak 1-2 van megvalósítva. Nem ostream& -val térnek vissza !!!
/// Kivételt várunk
/// Azonosságot elváró makró
#define ASSERT_EQ(expected, actual) gtest_lite::ASSERT_(expected, actual, gtest_lite::eq, "ASSER_EQ")
/// Nem várunk kivételt
#define ASSERT_NO_THROW(statement) try { gtest_lite::test.tmp = true; statement; } \
catch (...) { gtest_lite::test.tmp = false; }\
ASSERTTHROW(statement, "nem dob kivetelt.", "kivetelt dobott.")
/// Segédmakró egy adattag, vagy tagfüggvény létezésének tesztelésére futási időben
/// Segédmakró egy adattag, vagy tagfüggvény létezésének tesztelésére futási időben
/// Ötlet:
/// Ötlet:
/// https://cpptalk.wordpress.com/2009/09/12/substitution-failure-is-not-an-error-2
/// https://cpptalk.wordpress.com/2009/09/12/substitution-failure-is-not-an-error-2
...
@@ -174,6 +220,13 @@ struct _Is_Types {
...
@@ -174,6 +220,13 @@ struct _Is_Types {
<< "** Az utasitas " << (act) \
<< "** Az utasitas " << (act) \
<< "\n** Azt vartuk, hogy " << (exp) << std::endl
<< "\n** Azt vartuk, hogy " << (exp) << std::endl
#define ASSERTTHROW(statement, exp, act) gtest_lite::test.expect(gtest_lite::test.tmp, __FILE__, __LINE__, #statement) \
<< "** Az utasitas " << (act) \
<< "\n** Azt vartuk, hogy " << (exp) << std::endl; if (!gtest_lite::test.status) { gtest_lite::test.end(); break; }
#define ASSERT_(expected, actual, fn, op) EXPECT_(expected, actual, fn, __FILE__, __LINE__, #op "(" #expected ", " #actual ")" ); \
if (!gtest_lite::test.status) { gtest_lite::test.end(); break; }
#ifdef CPORTA
#ifdef CPORTA
#define GTINIT(is) \
#define GTINIT(is) \
int magic; \
int magic; \
...
@@ -243,6 +296,8 @@ public:
...
@@ -243,6 +296,8 @@ public:
bool
fail
()
{
return
failed
;
}
bool
fail
()
{
return
failed
;
}
bool
astatus
()
{
return
status
;
}
/// Eredményt adminisztráló tagfüggvény True a jó eset.
/// Eredményt adminisztráló tagfüggvény True a jó eset.
std
::
ostream
&
expect
(
bool
st
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
bool
pr
=
false
)
{
std
::
ostream
&
expect
(
bool
st
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
bool
pr
=
false
)
{
if
(
!
st
)
{
if
(
!
st
)
{
...
@@ -311,6 +366,29 @@ std::ostream& EXPECTSTR(const char *exp, const char *act, bool (*pred)(const cha
...
@@ -311,6 +366,29 @@ std::ostream& EXPECTSTR(const char *exp, const char *act, bool (*pred)(const cha
<<
"
\n
** "
<<
rhs
<<
": "
<<
(
act
==
NULL
?
"NULL pointer"
:
std
::
string
(
"
\"
"
)
+
act
+
std
::
string
(
"
\"
"
))
<<
std
::
endl
;
<<
"
\n
** "
<<
rhs
<<
": "
<<
(
act
==
NULL
?
"NULL pointer"
:
std
::
string
(
"
\"
"
)
+
act
+
std
::
string
(
"
\"
"
))
<<
std
::
endl
;
}
}
#if __cplusplus >= 201103L
/// regexp összehasonlításhoz.
template
<
typename
E
,
typename
S
>
int
count_regexp
(
E
exp
,
S
str
)
{
std
::
regex
rexp
(
exp
);
auto
w_beg
=
std
::
sregex_iterator
(
str
.
begin
(),
str
.
end
(),
rexp
);
auto
w_end
=
std
::
sregex_iterator
();
return
std
::
distance
(
w_beg
,
w_end
);
}
template
<
typename
E
,
typename
S
>
std
::
ostream
&
EXPECTREGEXP
(
E
exp
,
S
str
,
int
match
,
const
char
*
err
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
const
char
*
lhs
=
"regexp"
,
const
char
*
rhs
=
"string"
,
const
char
*
m
=
"elvart/illeszkedik"
)
{
int
cnt
=
count_regexp
(
exp
,
str
);
if
(
match
<
0
)
match
=
cnt
;
return
test
.
expect
(
cnt
==
match
,
file
,
line
,
expr
)
<<
"** "
<<
lhs
<<
": "
<<
std
::
string
(
"
\"
"
)
+
exp
+
std
::
string
(
"
\"
"
)
<<
"
\n
** "
<<
rhs
<<
": "
<<
(
err
==
NULL
?
std
::
string
(
"
\"
"
)
+
str
+
std
::
string
(
"
\"
"
)
:
err
)
<<
"
\n
** "
<<
m
<<
": "
<<
match
<<
"/"
<<
cnt
<<
std
::
endl
;
}
#endif
/// 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
T1
,
typename
T2
>
template
<
typename
T1
,
typename
T2
>
...
@@ -323,6 +401,19 @@ bool eqstr(const char *a, const char *b) {
...
@@ -323,6 +401,19 @@ bool eqstr(const char *a, const char *b) {
return
false
;
return
false
;
}
}
inline
bool
eqstrcase
(
const
char
*
a
,
const
char
*
b
)
{
if
(
a
!=
NULL
&&
b
!=
NULL
)
{
while
(
toupper
(
*
a
)
==
toupper
(
*
b
)
&&
*
a
!=
'\0'
)
{
a
++
;
b
++
;
}
return
*
a
==
*
b
;
}
return
false
;
}
template
<
typename
T1
,
typename
T2
>
template
<
typename
T1
,
typename
T2
>
bool
ne
(
T1
a
,
T2
b
)
{
return
a
!=
b
;
}
bool
ne
(
T1
a
,
T2
b
)
{
return
a
!=
b
;
}
...
...
Test/memtrace.cpp
View file @
3e3e752c
...
@@ -487,7 +487,15 @@ void operator delete(void * p) THROW_NOTHING {
...
@@ -487,7 +487,15 @@ void operator delete(void * p) THROW_NOTHING {
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
void
operator
delete
[](
void
*
p
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
}
}
#if __cplusplus >= 201402L
void
operator
delete
(
void
*
p
,
size_t
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETE
);
}
void
operator
delete
[](
void
*
p
,
size_t
)
THROW_NOTHING
{
memtrace
::
traced_delete
(
p
,
FDELETEARR
);
}
#endif
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
/* 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
{
...
...
Test/memtrace.h
View file @
3e3e752c
...
@@ -5,7 +5,7 @@ Keszitette: Peregi Tamas, BME IIT, 2011
...
@@ -5,7 +5,7 @@ Keszitette: Peregi Tamas, BME IIT, 2011
Kanari: Szeberenyi Imre, 2013.,
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
mem_dump: 2016.
inclue-ok: 2017., 2018.
2019
.
inclue-ok: 2017., 2018.
, 2019., 2021
.
*********************************/
*********************************/
#ifndef MEMTRACE_H
#ifndef MEMTRACE_H
...
@@ -159,6 +159,11 @@ END_NAMESPACE
...
@@ -159,6 +159,11 @@ END_NAMESPACE
#include <typeinfo>
#include <typeinfo>
#include <ostream>
#include <ostream>
#include <stdexcept>
#include <stdexcept>
#include <ctime>
#if __cplusplus >= 201103L
#include <iterator>
#include <regex>
#endif
#endif
#endif
#ifdef MEMTRACE_CPP
#ifdef MEMTRACE_CPP
namespace
std
{
namespace
std
{
...
@@ -184,7 +189,7 @@ START_NAMESPACE
...
@@ -184,7 +189,7 @@ START_NAMESPACE
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
*
traced_realloc
(
void
*
old
,
size_t
size
,
const
char
*
size_txt
,
int
line
,
const
char
*
file
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
);
void
mem_dump
(
void
const
*
mem
,
size_t
size
,
FILE
*
fp
=
stdout
);
END_NAMESPACE
END_NAMESPACE
...
@@ -206,6 +211,12 @@ void * operator new[](size_t size) THROW_BADALLOC;
...
@@ -206,6 +211,12 @@ 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
;
#if __cplusplus >= 201402L
// sized delete miatt: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3536.html
void
operator
delete
(
void
*
p
,
size_t
)
THROW_NOTHING
;
void
operator
delete
[](
void
*
p
,
size_t
)
THROW_NOTHING
;
#endif
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
/* 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
;
...
@@ -221,5 +232,8 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
...
@@ -221,5 +232,8 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
#endif
/*MEMTRACE_CPP*/
#endif
/*MEMTRACE_CPP*/
#endif
/*FROM_MEMTRACE_CPP*/
#endif
/*FROM_MEMTRACE_CPP*/
#endif
/*MEMCHECK*/
#else
#pragma message ( "MEMTRACE NOT DEFINED" )
#endif
/*MEMTRACE*/
#endif
/*MEMTRACE_H*/
#endif
/*MEMTRACE_H*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment