Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Prog2
/
labor_peldak
/
lab_02
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
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
76159847
authored
Feb 19, 2020
by
Szeberényi Imre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
typo + gtest_lite v3
parent
ebb26348
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
49 deletions
+78
-49
string2_cpp/gtest_lite.h
+52
-27
string2_cpp/memtrace.cpp
+10
-9
string2_cpp/memtrace.h
+15
-12
string2_cpp/string2_main.cpp
+1
-1
No files found.
string2_cpp/gtest_lite.h
View file @
76159847
#
ifndef
GTEST_LITE_H
#ifndef GTEST_LITE_H
#define GTEST_LITE_H
/**
* \file gtest_lite.h (v
2
)
* \file gtest_lite.h (v
3/2019
)
*
* Google gtest keretrendszerhez hasonló rendszer.
* 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.
* 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ő.
*
...
...
@@ -129,6 +126,11 @@
catch (...) { gtest_lite::test.tmp = false; }\
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
#define EXPECT_THROW_THROW(statement, exception_type) try { gtest_lite::test.tmp = false; statement; } \
catch (exception_type) { gtest_lite::test.tmp = true; throw; } \
...
...
@@ -150,10 +152,14 @@ template<typename T> struct _Has_##X { \
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
template
<
typename
F
,
typename
T
>
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
];
static
bool
const
convertable
=
sizeof
(
f
<
T
>
(
F
()))
==
1
;
};
...
...
@@ -197,8 +203,15 @@ struct Test {
bool
tmp
;
///< temp a kivételkezeléshez;
std
::
string
name
;
///< éppen futó teszt neve
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
(
const
Test
&
);
void
operator
=
(
const
Test
&
);
public
:
/// Teszt kezdete
void
begin
(
const
char
*
n
)
{
name
=
n
;
status
=
true
;
...
...
@@ -255,12 +268,13 @@ struct Test {
}
};
/// Egyetlen statikus példány. (singletonnal szebb lenne)
static
Test
test
;
/// A statikus referencia minden fordítási egységben keletkezik, de
/// mindegyik egyetlen példányra fog hivatkozni a singleton minta miatt
static
Test
&
test
=
Test
::
getTest
();
/// általános sablon a várt értékhez.
template
<
typename
T
>
std
::
ostream
&
EXPECT_
(
T
exp
,
T
act
,
bool
(
*
pred
)(
T
,
T
),
const
char
*
file
,
int
line
,
template
<
typename
T
1
,
typename
T2
>
std
::
ostream
&
EXPECT_
(
T
1
exp
,
T2
act
,
bool
(
*
pred
)(
T1
,
T2
),
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
<<
": "
<<
std
::
boolalpha
<<
exp
...
...
@@ -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.
template
<
typename
T
>
std
::
ostream
&
EXPECT_
(
T
*
exp
,
T
*
act
,
bool
(
*
pred
)(
T
*
,
T
*
),
const
char
*
file
,
int
line
,
template
<
typename
T
1
,
typename
T2
>
std
::
ostream
&
EXPECT_
(
T
1
*
exp
,
T2
*
act
,
bool
(
*
pred
)(
T1
*
,
T2
*
),
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
;
}
#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.
/// azért nem spec. mert a sima EQ-ra másként kell működnie.
inline
...
...
@@ -288,8 +313,8 @@ std::ostream& EXPECTSTR(const char *exp, const char *act, bool (*pred)(const cha
/// segéd sablonok a relációkhoz.
/// azért nem STL (algorithm), mert csak a függvény lehet, hogy menjen a deduckció
template
<
typename
T
>
bool
eq
(
T
a
,
T
b
)
{
return
a
==
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
eq
(
T
1
a
,
T2
b
)
{
return
a
==
b
;
}
inline
bool
eqstr
(
const
char
*
a
,
const
char
*
b
)
{
...
...
@@ -298,8 +323,8 @@ bool eqstr(const char *a, const char *b) {
return
false
;
}
template
<
typename
T
>
bool
ne
(
T
a
,
T
b
)
{
return
a
!=
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
ne
(
T
1
a
,
T2
b
)
{
return
a
!=
b
;
}
inline
bool
nestr
(
const
char
*
a
,
const
char
*
b
)
{
...
...
@@ -308,17 +333,17 @@ bool nestr(const char *a, const char *b) {
return
false
;
}
template
<
typename
T
>
bool
le
(
T
a
,
T
b
)
{
return
a
<=
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
le
(
T
1
a
,
T2
b
)
{
return
a
<=
b
;
}
template
<
typename
T
>
bool
lt
(
T
a
,
T
b
)
{
return
a
<
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
lt
(
T
1
a
,
T2
b
)
{
return
a
<
b
;
}
template
<
typename
T
>
bool
ge
(
T
a
,
T
b
)
{
return
a
>=
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
ge
(
T
1
a
,
T2
b
)
{
return
a
>=
b
;
}
template
<
typename
T
>
bool
gt
(
T
a
,
T
b
)
{
return
a
>
b
;
}
template
<
typename
T
1
,
typename
T2
>
bool
gt
(
T
1
a
,
T2
b
)
{
return
a
>
b
;
}
/// Segédsablon valós számok összehasonlításához
/// Nem bombabiztos, de nekünk most jó lesz
...
...
string2_cpp/memtrace.cpp
View file @
76159847
...
...
@@ -3,12 +3,13 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.
VS 2012: Szebernyi Imre, 2015.,
VS 2012: Szeber
é
nyi Imre, 2015.,
mem_dump: 2016.
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 */
#ifdef _MSC_VER
...
...
@@ -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
)
{
initialize
();
if
(
dying
)
return
2
;
/* c
mz
si hiba */
if
(
dying
)
return
2
;
/* c
ímzé
si hiba */
if
(
registry
.
next
)
{
/*szivarog*/
...
...
@@ -220,7 +221,7 @@ START_NAMESPACE
fprintf
(
fperror
,
"Szivargas:
\n
"
);
print_registry_item
(
registry
.
next
);
registry
.
next
=
NULL
;
return
1
;
/* mem
ria fogy
s */
return
1
;
/* mem
ória fogyá
s */
}
return
0
;
}
...
...
@@ -320,7 +321,7 @@ START_NAMESPACE
END_NAMESPACE
/*******************************************************************/
/* C-st
lus memriakezel
s */
/* C-st
ílusú memóriakezelé
s */
/*******************************************************************/
#ifdef MEMTRACE_C
...
...
@@ -414,7 +415,7 @@ END_NAMESPACE
#endif
/*MEMTRACE_C*/
/*******************************************************************/
/* C++-st
lus memriakezel
s */
/* C++-st
ílusú memóriakezelé
s */
/*******************************************************************/
#ifdef MEMTRACE_CPP
...
...
@@ -431,7 +432,7 @@ START_NAMESPACE
void
set_delete_call
(
int
line
,
const
char
*
file
)
{
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
;
}
...
...
@@ -488,7 +489,7 @@ void operator delete[](void * p) THROW_NOTHING {
}
/* 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
{
memtrace
::
traced_delete
(
p
,
FDELETE
);
}
...
...
string2_cpp/memtrace.h
View file @
76159847
...
...
@@ -3,9 +3,9 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szebernyi Imre, 2015.,
VS 2012: Szeber
é
nyi Imre, 2015.,
mem_dump: 2016.
inclue-ok: 2017., 2018.
inclue-ok: 2017., 2018.
2019.
*********************************/
#ifndef MEMTRACE_H
...
...
@@ -13,7 +13,7 @@ inclue-ok: 2017., 2018.
#if defined(MEMTRACE)
/*ha defini
lva van, akkor a hibakat ebbe a fajlba rja, egy
bkent stderr-re*/
/*ha defini
álva van, akkor a hibakat ebbe a fajlba írja, egyé
bkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
...
...
@@ -71,25 +71,25 @@ inclue-ok: 2017., 2018.
#define TRACEC(func) func
#endif
// THROW deklar
ci v
ltozatai
// THROW deklar
áció vá
ltozatai
#if defined(_MSC_VER)
// VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy j
gy *
// * nem biztos, hogy j
ó í
gy *
#define THROW_BADALLOC
#define THROW_NOTHING
#else
// C++11 vagy jabb
// C++11 vagy
ú
jabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else
#if __cplusplus < 201103L
// C++2003 vagy rgebbi
// C++2003 vagy r
é
gebbi
#define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw ()
#else
// C++11 vagy jabb
// C++11 vagy
ú
jabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
...
...
@@ -144,12 +144,15 @@ END_NAMESPACE
#include <stdlib.h>
#ifdef __cplusplus
#include <iostream>
/* ide gy
jtjk a nemtrace-vel 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 <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#endif
#ifdef MEMTRACE_CPP
namespace
std
{
...
...
@@ -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
;
/* 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
;
...
...
@@ -206,7 +209,7 @@ void operator delete[](void *p, int, const char *) THROW_NOTHING;
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA
//
#define system(...) // system(__VA_ARGS__)
#define system(...) // system(__VA_ARGS__)
#endif
#endif
/*MEMTRACE_CPP*/
...
...
string2_cpp/string2_main.cpp
View file @
76159847
...
...
@@ -6,7 +6,7 @@
* 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
* tesztelheti az elkészített függvényeket. Ehhez a string
1
.h fájlban definiált
* tesztelheti az elkészített függvényeket. Ehhez a string
2
.h fájlban definiált
* 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
...
...
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