Skip to content

test#1

Open
korotindev wants to merge 1 commit into
mainfrom
test
Open

test#1
korotindev wants to merge 1 commit into
mainfrom
test

Conversation

@korotindev

Copy link
Copy Markdown
Owner

No description provided.

Comment thread test.cpp

#include <algorithm>
#include <array>
#include <cassert>

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я так и не понял, зачем тебе cassert, если ты не пользуешь что-то оттуда. Она нам понадобиться, но проверь все хедеры, вдруг ты что-то не пользуешь

Comment thread test.cpp
void RemoveRandomElementsFromMap(std::map<int, int>& random_map) {
auto indexes_to_delete = GenerateIndexesToDelete(random_map.size());

std::vector <std::map<int, int>::iterator> iterators_to_delete;

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пробегись каким-нибудь clang-format, а то у тебя то std::vector<T>, то std::vector <T>

Comment thread test.cpp
size_t prev_index = 0;
auto it = random_map.begin();
for (const auto& index : indexes_to_delete) {
size_t offset = index - prev_index;

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты уверен что prev_index будет всегда меньше, чем index? Выглядит так, что тут возможно переполнение. Тесты бы это показали, кстати.

Comment thread test.cpp
const size_t MAX_COUNT_TO_DELETE = 15;

int GenerateRandomNumber(int minimum = MINIMUM, int maximum = MAXIMUM) {
static std::default_random_engine re(20200620);

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://en.cppreference.com/w/cpp/numeric/random
Вот тут в самом низу есть пример, как можно делать рандомизацию.

У тебя сейчас генераторы в качестве сида используют одно и то же число, уверен, что числа идут рандомные из этой функции?

Comment thread test.cpp
return is_in_collection;
}

std::array <bool, MAXIMUM + 1> GetElementExistingMask(const std::vector<int>& collection) {

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему так, а не через маску?
Ну Т.е. ты мог бы ужать это до одного size_t и тупо возвращать один size_t.
А когда тебе надо прочитать/записать значение mask && (1 << idx) ну или mask || (1 << idx) (в случае записи)
Просто это неэффективно в твоём случае ни по памяти, ни по времени.

Не знаю, насколько критично тебе это менять, но вот статейка: https://howardhinnant.github.io/onvectorbool.html
А вот разница: https://stackoverflow.com/questions/44607389/behaviour-of-stdarraybool-vs-stdvectorbool
Т.е. твоя штука, если бы не было NRVO копировала бы MAXIMUM + 1 интов, а т.к. оно есть, то у тебя просто храниться MAXIMUM + 1 интов на стеке, и ванугю, что доставание их по индексу сильно медленнее, чем работа с маской. Хотя я могу быть тут не до конца прав. Погляди на обе ссылки, подумай стоит ли оставлять так.

Comment thread test.cpp
Comment on lines +136 to +140
auto random_vector = GenerateRandomVector();
auto random_map = GenerateRandomMap();
RemoveRandomElementsFromVector(random_vector);
RemoveRandomElementsFromMap(random_map);
Synchronyze(random_vector, random_map);

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет ни вывода никакого в консоль/ни тестов/ни рандомизированных тестов. Непонятно, как доказать работоспособность программы.

Советую тебе вытащить все эти функции отдельно, а тут написать что-то вроде:

int main() {
    RunTests();
    RunProgram();
}

RunTests - будут состоять из assert-ов простых (ну т.е. не стоит тащить никаких тестовых фреймворков) и в случае чего должны кидать исключении
Так же желательно в RunTests запихнуть один тест, который будет запускаться 100500 раз, чтобы убедиться, что ты нигде по памяти не проехали или не натворил чего плохого.

RunProgram - просто обычный запуск программы

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant