· 7 years ago · Oct 08, 2018, 10:32 AM
1#include <catch.hpp>
2#include <phonebook.h>
3
4TEST_CASE("Test class Contact") {
5 Name name("Petrov Ilya Vladimirovich");
6 Contact first_contact = Contact(Number("+9238405235"), Name("Ivan"));
7 Contact second_contact = Contact(Number("9238852"), Name("Petr Ivanov"), "Red Street");
8 REQUIRE(first_contact.GetName() == "ivan");
9 REQUIRE(second_contact.GetName() == "ivanov petr");
10 REQUIRE(first_contact.GetNumber() == "9238405235");
11 REQUIRE(!first_contact.GetAddress().has_value());
12 REQUIRE(second_contact.GetAddress().value() == "Red Street");
13 REQUIRE(name == Name("Ilya Vladimirovich petrov"));
14 REQUIRE(name.GetSourceName() == "Petrov Ilya Vladimirovich");
15 REQUIRE(name.GetValue() == "ilya petrov vladimirovich");
16}
17
18TEST_CASE("Test Adding contacts") {
19 PhoneBook phonebook;
20 Contact first_contact = Contact(Number("+9238405235"), Name("Ivan"));
21 Contact second_contact = Contact(Number("9238852"), Name("Petr Ivanov"), "Red Street");
22 phonebook.AddContact(first_contact);
23 phonebook.AddContact(second_contact);
24 size_t id3 = phonebook.AddContact(Contact(Number("9238405235"), Name("Petr")));
25 size_t id4 = phonebook.AddContact(Contact(Number("+48932"), Name("ivan")));
26 REQUIRE(phonebook.Size() == 2);
27 REQUIRE(id3 == 0);
28 REQUIRE(id4 == 0);
29}
30
31TEST_CASE("Test Getters") {
32 PhoneBook phonebook;
33 size_t id1 = phonebook.AddContact(Contact(Number("+9238405235"), Name("Ivan")));
34 size_t id2 =
35 phonebook.AddContact(Contact(Number("9238852"), Name("Petr Ivanov"), "Red Street"));
36 size_t id3 = phonebook.AddContact(Contact(Number("+863228515"), Name("Smirnov Andrew")));
37 size_t id4 = phonebook.AddContact(
38 Contact(Number("77238852"), Name("FirstName secondName thirdname"), "Tverskaya flat 15"));
39
40 REQUIRE(phonebook.GetById(id1)->GetNumber() == "9238405235");
41 REQUIRE(phonebook.GetById(id2)->GetName() == "ivanov petr");
42 REQUIRE(phonebook.GetById(id3)->GetNumber() == "863228515");
43 REQUIRE(phonebook.GetById(id4)->GetName() == "firstname secondname thirdname");
44 REQUIRE(phonebook.GetById(5) == nullptr);
45
46 REQUIRE(phonebook.GetByName(Name("ivan"))->GetNumber() == "9238405235");
47 REQUIRE(phonebook.GetByName(Name("Ivanov Petr"))->GetNumber() == "9238852");
48 REQUIRE(phonebook.GetByName(Name("Andrew smirnov"))->GetNumber() == "863228515");
49 REQUIRE(phonebook.GetByName(Name("thirdname firstname secondName"))->GetNumber() == "77238852");
50 REQUIRE(phonebook.GetByName(Name("Some name")) == nullptr);
51
52 REQUIRE(phonebook.GetByNumber(Number("+9238405235"))->GetName() == "ivan");
53 REQUIRE(phonebook.GetByNumber(Number("9238852"))->GetName() == "ivanov petr");
54 REQUIRE(phonebook.GetByNumber(Number("+863228515"))->GetName() == "andrew smirnov");
55 REQUIRE(phonebook.GetByNumber(Number("77238852"))->GetName() ==
56 "firstname secondname thirdname");
57 REQUIRE(phonebook.GetByNumber(Number("Some number")) == nullptr);
58}
59
60TEST_CASE("Test Deleting By id") {
61 PhoneBook phonebook;
62 size_t id1 = phonebook.AddContact(Contact(Number("+9238405235"), Name("Ivan")));
63 phonebook.AddContact(Contact(Number("9238852"), Name("Petr Ivanov"), "Red Street"));
64 size_t id3 = phonebook.AddContact(Contact(Number("+863228515"), Name("Smirnov Andrew")));
65 phonebook.AddContact(
66 Contact(Number("77238852"), Name("FirstName secondName thirdname"), "Tverskaya flat 15"));
67 REQUIRE(phonebook.Size() == 4);
68 REQUIRE(phonebook.DeleteById(5) == false);
69 phonebook.DeleteById(id1);
70 phonebook.DeleteById(id3);
71 REQUIRE(phonebook.Size() == 2);
72 REQUIRE(phonebook.GetById(id3) == nullptr);
73 REQUIRE(phonebook.GetById(id1) == nullptr);
74}
75
76TEST_CASE("Test Filtering by address") {
77 PhoneBook phonebook;
78 phonebook.AddContact(Contact(Number("01"), Name("A")));
79 size_t id2 = phonebook.AddContact(Contact(Number("02"), Name("B"), "Red Street"));
80 phonebook.AddContact(Contact(Number("03"), Name("C")));
81 size_t id4 = phonebook.AddContact(Contact(Number("04"), Name("D"), "Tverskaya flat 15"));
82 size_t id5 = phonebook.AddContact(Contact(Number("05"), Name("E"), "Big Street"));
83 size_t id6 = phonebook.AddContact(Contact(Number("06"), Name("F"), "St.Name flat 6"));
84 size_t id7 = phonebook.AddContact(Contact(Number("07"), Name("G"), "Moscow flat45"));
85 size_t id8 = phonebook.AddContact(Contact(Number("08"), Name("H"), "North Street, Moscow"));
86 size_t id9 = phonebook.AddContact(Contact(Number("09"), Name("I"), "Ed Street, Moscow"));
87 size_t id10 = phonebook.AddContact(Contact(Number("10"), Name("J"), "Moscow Street, flat 153"));
88 size_t id11 = phonebook.AddContact(Contact(Number("11"), Name("K"), "Leninskaya St."));
89 std::vector<size_t> res = phonebook.FilterByAddress("Moscow");
90 std::sort(res.begin(), res.end());
91 REQUIRE(res == std::vector<size_t>{id7, id8, id9, id10});
92
93 res = phonebook.FilterByAddress("flat");
94 std::sort(res.begin(), res.end());
95 REQUIRE(res == std::vector<size_t>{id4, id6, id7, id10});
96
97 res = phonebook.FilterByAddress("St");
98 std::sort(res.begin(), res.end());
99 REQUIRE(res == std::vector<size_t>{id2, id5, id6, id8, id9, id10, id11});
100
101 res = phonebook.FilterByAddress("st");
102 std::sort(res.begin(), res.end());
103 REQUIRE(res.empty());
104}
105
106TEST_CASE("Test Setters") {
107 PhoneBook phonebook;
108 size_t id1 = phonebook.AddContact(Contact(Number("+3t719304f"), Name("JHsfhkwe kewjg")));
109 size_t id2 =
110 phonebook.AddContact(Contact(Number("239i43"), Name("wekfjkeg wkf"), "qwkjfn JHBW"));
111 size_t id3 = phonebook.AddContact(Contact(Number("+86324uo228515"), Name("ewf fqkwjfWE ")));
112 REQUIRE(!phonebook.GetById(id1)->GetAddress().has_value());
113 (phonebook.GetById(id1))->SetAddress("North Street, Moscow");
114 REQUIRE(phonebook.GetById(id1)->GetAddress().value() == "North Street, Moscow");
115 (phonebook.GetById(id3))->SetName(Name("Ivan"));
116 REQUIRE((phonebook.GetById(id3))->GetName() == "ivan");
117 REQUIRE((phonebook.GetByName(Name("ivan")))->GetNumber() == "86324uo228515");
118 (phonebook.GetById(id2))->SetNumber(Number("+8293752"));
119 REQUIRE((phonebook.GetById(id2))->GetNumber() == "8293752");
120 REQUIRE((phonebook.GetByNumber(Number("8293752")))->GetAddress().value() == "qwkjfn JHBW");
121}
122
123TEST_CASE("Test Rapid Getting") {
124 PhoneBook phonebook;
125 for (int i = 0; i < 20; ++i) {
126 phonebook.AddContact(
127 Contact(Number(std::string(1, '0' + i)), Name(std::string(1, 'a' + i))));
128 }
129 for (int i = 0; i < 1000000; ++i) {
130 phonebook.GetByName(Name("b"));
131 REQUIRE(phonebook.GetByName(Name("name")) == nullptr);
132 }
133}