Commit c23f08ad by Karsa Zoltán István

tovabbi tesztek

parent 1be7ba0c
......@@ -41,7 +41,7 @@ class RString {
};
```
A `RString` osztály fenti publikus metódusai tovább nem bővíthetőek. természetesen gondoskodni kell a megfelelő dinamikus memóriakazelésről.
A `RString` osztály fenti publikus metódusai tovább nem bővíthetőek. Természetesen gondoskodni kell a megfelelő dinamikus memóriakazelésről.
## StringPool interfész
......@@ -49,6 +49,10 @@ A `pool.h`-ban az osztályhoz készített kommentezést követve implementáld a
## Tiltott elemek
Az `RString` implementálásakor semmilyen STL tároló nem használható. A megoldásnál elemi dinamikus memóriakezelést kell alkalmazni. Ugyanakkor a `StringPool`-nál már használható valamilyen STL vektor vagy lista.
Az `RString` implementálásakor semmilyen STL tároló nem használható. A megoldásnál elemi dinamikus memóriakezelést kell alkalmazni. Ugyanakkor a `StringPool`-nál már használható valamilyen STL vektor vagy lista. Ezt a JPorta egyszerű szövegvizsgálattal ellenőrzi!
Ha csak a header fájlokban dolgozol, akkor azt később visszaautasíthatjuk, a függvények megvalósítására a forrásfájlok valók!
\ No newline at end of file
Ha csak a header fájlokban dolgozol, akkor azt később visszaautasíthatjuk, a függvények megvalósítására a forrásfájlok valók! **Minden olyan megoldást visszautasíthatunk utólag is, ami nagyon hatékonytalan!** Figyelj ezekre implementáláskor!
## Beadás
Töltsd le a gitlab tárolóból a projektet, használd az `ELKESZULT` makrót a lépésekben való fejlesztéshez! A portálra feltöntendő a `pool.h`, `pool.cpp`, `rstring.h` és `rstring.cpp` fájlok. Bár nagyon sok ObjectPool megvalósítás található különböző weboldalakon, de ez a feladat egészen egyedi! A határidő után egy plágiumellenőrzőt futtatunk le!
......@@ -11,11 +11,18 @@ class StringPool {
// Visszaad egy szabad RString objektumot ami
// legalább capacity kapacitással rendelkezik
// Ha nincs ilyen a pool-ban, akkor létrehoz egyet
// Ha nincs ilyen a pool-ban, akkor létrehoz egyet.
// Visszavonásig az a string objektum nem oszható ki.
// "Foglaltnak" minősül
RString& acquire(size_t capacity);
// Visszaad egy szabad RString objektumot amibe
// belefér a paraméteül kapott string, azt bele is másolja.
// Ha nincs ilyen a pool-ban, akkor létrehoz egyet.
// Visszavonásig az a string objektum nem oszható ki.
// "Foglaltnak" minősül
RString& acquire(const char* str);
// Visszadja, hogy az str objektum szabad, azaz
// kiosztható/megszerezhető-e
bool acquireable(RString& str);
......@@ -23,6 +30,7 @@ class StringPool {
// Ezután a visszaadott str objektum újra kiosztható másnak
// A függvény "reseteli" a stringet is: a karaktertömb első
// helyére '\0'-t rak.
// Ha az objektum már nem foglalt, nem dob hibát!
void release(RString& str);
// Hozzáfűzi str1 végére str2-t.
......
......@@ -136,7 +136,59 @@ int main() {
} END
#endif
#if ELKESZULT > 8
TEST(StringPool, release_new) {
StringPool pool(2, 15);
RString& ref = pool.acquire(30);
EXPECT_EQ(3, pool.size());
EXPECT_EQ(30, ref.capacity());
EXPECT_EQ(2, pool.free_size());
ref = "alma";
RString& ref2 = pool.acquire(15);
EXPECT_EQ(3, pool.size());
EXPECT_EQ(15, ref2.capacity());
EXPECT_EQ(1, pool.free_size());
pool.release(ref);
pool.release(ref2);
EXPECT_EQ(3, pool.free_size());
EXPECT_EQ(3, pool.size());
pool.release(ref2);
EXPECT_EQ(3, pool.free_size());
EXPECT_EQ(3, pool.size());
} END
#endif
#if ELKESZULT > 9
TEST(StringPool, release_complex) {
StringPool pool(3, 15);
RString& ref1 = pool.acquire(15);
EXPECT_EQ(3, pool.size());
EXPECT_EQ(15, ref1.capacity());
EXPECT_EQ(2, pool.free_size());
RString& ref2 = pool.acquire(30);
EXPECT_EQ(4, pool.size());
EXPECT_EQ(30, ref2.capacity());
EXPECT_EQ(2, pool.free_size());
pool.release(ref2);
EXPECT_EQ(3, pool.free_size());
EXPECT_EQ(4, pool.size());
RString& ref3 = pool.acquire(25);
EXPECT_EQ(4, pool.size());
EXPECT_EQ(30, ref2.capacity());
EXPECT_EQ(2, pool.free_size());
pool.release(ref3);
EXPECT_EQ(4, pool.free_size());
EXPECT_EQ(3, pool.size());
} END
#endif
#if ELKESZULT > 0
TEST(StringPool, append) {
StringPool pool(3, 15);
} END
#endif
if (ELKESZULT < 10)
ADD_FAILURE() << "\nNem futott minden teszteset!" << std::endl;
......
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