1. C++ / Говнокод #26020

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    Дали тестовое задание.
    Написать хеш таблицу с открытой адресацией. Главное качество, а не скорость, сказали.
    Реализовал на C++.
    Самая тягомотина - это тестирование многопоточности.
    Есть операции: 
    find, equalRange, operator [] - тот же equalRange, но возвращает все найденные вхождения, insert, remove, extend, size, capacity.
    
    И вот надо каждую относительно другой проверять.  
    Только это выходит (9 - 1)^2 тестов. Помимо остальных, уже реализованных.
    
    у меня проверка на значения только в операциях поиска относительно вставки, то бишь, нашелся ли в многопоточном исполнении элемент, или нет.
    относительно удаления проверять - это муторно, потому что после удаления на той же позиции встает соседняя пара, и это случайно, проверено 
    экспериментально.
    
    Сойдет ли просто проверять время блокировки (shared_lock, и lock_guard) 
    каждого параллельного текущему потоку относительно времени блокировки\старта\окончания блокировки текущего?
    кроме связки (access - insert)?
    Тем более, что операции записи\чтения проверяются в немногопоточном исполнении?

    Запостил: OlegUP, 08 Ноября 2019

    Комментарии (31) RSS

    • Тестовые задания нинужны.
      Ответить
      • Ну я так не могу сказать работодателю.
        Ответить
      • В общем, реализую я без дополнительных вставок и поисков на каждый пук.
        А то так замаюсь разгребать эти 8^2 тестов.
        Ответить
        • Всего 81? То ли дело «SQLite».
          https://www.sqlite.org/testing.html
          Ответить
          • Написать то можно, только я уже полтора месяца пишу.
            Ответить
            • Может тебя уже и не ждут?
              Ответить
              • Напомнило:

                https://assets.amuniversal.com/c8253cc0db9a012e2fae00163e41dd5b
                Ответить
              • Нет у меня друзей
                И нет врагов
                Меня уже никто не ждет
                Ответить
    • Просто, если тестировать только тайминги старта\окончания\блокировки.
      То выходит, что я напишу тесты для std-шных классов блокировки и shared мьютексов.
      Ответить
    • запускаешь 5 инсертов из 5 потоков, ждешь пока потоки отработают и проверяешь что в хеш добавилась только 1 запись.

      и все остальное в таком-же духе
      Ответить
      • 5 записей.
        Поток выполнится в любом случае.
        Моя реализация соответствует unordered_multimap.
        Ответить
    • > Дали тестовое задание.
      > Написать хеш таблицу с открытой адресацией. Главное качество, а не скорость, сказали.

      Там многопоточность-то в тестовом задании точно была?
      Я в плюсах нихуя не соображаю, но зачем мьютексы, если можно всё реализовать на optimistic locking?
      Ответить
      • да и вроде нормальные фреймворки для обнаружения data race существуют: https://www.modernescpp.com/index.php/c-core-guidelines-use-tools-to-validate-your-concurrent-code
        тебе нужно не декартово произведение тестов, а просто несколько тредов, которые по-всякому трахают хэшмапу, а в конце проверяются инварианты.
        Ответить
        • Как можно формально доказать отсутствие гонок в случайном коде?
          Ответить
          • TLA+ какой-нибудь
            Только всё равно ж я просто предлагаю ему нормальное решение для того что он делает, а не гарантирую что-то
            Ответить
            • Я ламер, и вомзожно скажу хуйню, но разве там фишка не в том, что надо сначала описать алгоритм на TLA, и тогда ты можешь сказать естьли в нем гонки?

              а вот я дам тебе кусок кода на плюсах, как мне по нему чото понять?


              зы: Снаут, приходи давай, тут твою хуйню обсуждают
              Ответить
              • да, надо описать модель. тут шашечки или ехать: хотите доказать - стройте модель, не хотите - ну и ладно.
                Ответить
                • с другой стороны, алгоритм можно потом конвертнуть в код на плюсы с TLA, да?
                  Ответить
              • Какой анскилл )))
                Ответить
              • Я бы сделал стресс-тест. Если есть проблема, то он найдёт.
                Ответить
                • кууик

                  велика вероятность того, что рано или поздно он найдет проблему
                  да
                  Ответить
                  • Ну а если не найдёт - то она не так уж часто будет стрелять в реале.
                    Ответить
                    • *Играет торжественная музыка, взрываются салюты, радостная толпа скандирует: «Привет, Борманд!»*

                      Привет, Борманд!
                      Ответить
                    • «Therac-25» не так уж часто глючил. Но этого хватило, чтобы убить несколько человек.
                      Ответить
                      • Нехуй было писать жизненно важные модули на языке для калькуляторов.
                        Ответить
    • ТС год не писал на С++, а тут ему дали тестовое задание про блять переизобретение более лучшей хешмапы, которое он делает уже полтора месяца (заказчика это, кстати, не смущает?). По-моему, тут проблемы побольше, чем непротестированная многопоточность
      Ответить
      • Почему вообще многопоточность? Там такое было в задании?
        Ответить
    • Блядь, как всё сложно. Поэтому я за "PHP", в котором есть влажненький "array".
      Ответить

    Добавить комментарий