Pull to refresh
0
0
Никита Коваль @ndkoval

Инженер-исследователь

Send message

Вы определитесь с тем, что тестировать собираетесь. Если вы хотите протестировать корректность сообщения, то вопросов нет, нужно всего-лишь заменить вызов System.currentTimeMillis() на вызов своей реализации (как — вопрос десятый) и тестировать только метод вывода сообщения, без засыпания на сутки. Однако, если вы хотите протестировать, что сообщение выводится действительно каждый день, то вам придется подождать целый день для проведения теста. При этом ни на какую корректность Thread.sleep() вы полагаться в реальном коде не можете, т.к. в таком случае закладываетесь на реализацию через этот Thread.sleep(), который в любой момент будет заменён Timer-ом или каким-нибудь wait-ом (тут вы вообще ничего не сделаете со своим подходом). Не пытайтесь решать игрушечную проблему, подумайте о реальном коде.


Вот ещё пример для размышления. У вас есть файл, в который пишутся приходящие события, и который должен быть закрыт, если в течение минуты ничего не приходит. Логично для передачи событий использовать BlockingQueue и делать poll() с таймаутом. И с такой реализацией я не представляю как вы будете тестировать тот факт, что файл через минуту действительно закрывается.

Мне нужно не ждать сутки ради этого тестирования :)

Опять же, вопрос: когда я cмогу быть уверен, что сообщение уже напечаталось или не печатолось вовсе? У time-test для этого есть метод waitUntilThreadsAreFrozen(..).
А с Thread.sleep(ONE_DAY) что делать будете?
Это всего лишь наглядный пример для иллюстрации, но за интересное наблюдение — спасибо! В частности для нахождения таких багов и нужна библиотека :)
Почему-то всё форматирование съехало..
Недавно столкнулся с такой задачей: «Объединить две очереди таким образом, чтобы суммарная очередь была отсортирована».
Мне кажется или статья о другом

Как отсортировать очередь используя O(1) дополнительной памяти:
На каждом шаге:

Нашли максимум в очереди за O(N) (пробегаем по очереди, пропуская элементы, добавленные в п.3, всегда знаем сколько их на текущем шаге)
Удалили этот максимум из очереди за O(N) (пробегаем по очереди, пропуская элементы, добавленные в п.3, всегда знаем сколько их на текущем шаге)
Добавили его в конец очереди

Делаем N таких шагов. Итого, отсортировали за O(N^2) с доп. памятью O(1)
Остался один вопрос: что значит «пробегаем по очереди». В качестве ответа псевдокод ниже
for i = 1..q.size()
tmp = q.pop()
// do something with element
q.push(tmp)
После исполнения данного кода получаем такое же состояние очереди, как и до исполнения.

Information

Rating
Does not participate
Registered
Activity