ФорумПрограммированиеPHP для идиотов → Unit test for Random string generator

Unit test for Random string generator

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 20:57

    Вместо предисловия:

    lol

    Только что писал юниттест для проверки генератора случайных строк )))
    Не уверен что это лучший вариант, сделал так:

    namespace unit\R2\Security;
    
    use R2\Security\Helper;
    
    class HelperTest extends \PHPUnit_Framework_TestCase
    {
        private function test100times($len, $entropy, $pattern)
        {
            for ($i = 0; $i < 100; ++$i) {
                $key = Helper::randomKey($len, $entropy);
                if (\strlen($key) != $len || !preg_match($pattern, $key)) {
                    return false;
                }
            }
            return true;
        }
    
        /**
         * @covers R2\Security\Helper::randomKey
         */
        public function testRandomKey()
        {
            // false  - all visible ASCII characters are used
            for ($len = 1; $len < 10; ++$len) {
                $this->assertTrue($this->test100times($len, false, '/^[\x{21}-\x{7E}]+$/'));
            }
            $this->assertFalse($this->test100times($len, false, '/^[0-9A-Za-z]+$/'));
            // true   - digits and latin characters in both cases
            $this->assertTrue($this->test100times(10, true, '/^[0-9a-zA-Z]+$/'));
            // 2      - binary number
            $this->assertTrue($this->test100times(10, 2, '/^[01]+$/'));
            // 10     - decimal
            $this->assertTrue($this->test100times(10, 10, '/^\d+$/'));
            // 16     - hexadecimal
            $this->assertTrue($this->test100times(10, 16, '/^[0-9A-F]+$/'));
            // 36     - 0-9A-Z
            $this->assertTrue($this->test100times(10, 36, '/^[0-9A-Z]+$/'));
            // >=62   - the same as in "true" case
            $this->assertTrue($this->test100times(10, 9000, '/^[0-9A-Za-z]+$/'));
        }
    }
    

    есть идеи получше?

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:00, спустя 2 минуты 37 секунд

    ох ебать мою хохлушку.

    как же по уебски выглядит пхп код с namespace'ами.

    ептыль моптыль как же так ...

    Спустя 28 сек.

    как будто и так мало spagetty code на пхп, так они еще в ядро spagetty добавили как required.

    пиздец мудаки

    Спустя 77 сек.

    по поводу теста - ну пойдет, почему нет.

    функцию тестирует, большего и не надо. с виду логично в принципе. только про 9000 я не понял, это такой модный прием (over 9000!!!) ? : -)

    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:03, спустя 3 минуты 6 секунд

    ну ты нервный!

    Спустя 66 сек.

    over 9000 - да ))) ну просто за границами диапазона разумных значений для этого аргумента

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:05, спустя 2 минуты 15 секунд

    @artoodetoo, ну тогда если за границами, то он должен воротать ValueError, а не генерить что-либо

    Спустя 43 сек.

    ну ты нервный!

    так ептыль палыч. я еще 2или 3 годна назад плевался от этих елок, щас вот твой код смотрю и меня прямо передергивает. надо же было такое гавно с языком сделать. уроды конченые.

    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:08, спустя 3 минуты 11 секунд

    ирония в том, что случайный генератор можно тестировать только на попадание в диапазон, но не на покрытие.

    ты его просишь выдать hexadecimal, а он возможно 100 раз выдаст строку из нулей и это будет валидным результатом! но ведь генератор нулей нах не нужен )))

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:11, спустя 2 минуты 20 секунд

    @artoodetoo, ну добавь логику и сделай на покрытие, делов то.

    вообще все зависит от исходных параметров задачи.

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

    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:14, спустя 3 минуты 21 секунду

    ну тогда если за границами, то он должен воротать ValueError, а не генерить что-либо

    @phpdude,

    Теоретически я согласен. Но в моем случае это описанное в phpdoc поведение, я тестирую на соответствие описанию а не на идеальность. В общем, годится.

    Спасибо за фидбек.

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 мая 2014 г. 21:48, спустя 33 минуты 51 секунду

    @artoodetoo, ну раз уж пхпдог так хуй с ним :)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 0:03, спустя 2 часа 15 минут 2 секунды

    Согласен с дудом по всем его постам :-)

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 13:52, спустя 13 часов 49 минут 4 секунды

    по поводу "возможно но не обязательно")) толкьо что смс от альфа банка

    33333350

    вот тебе и случайное число))))

    Сапожник без сапог
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 13:56, спустя 3 минуты 37 секунд

    Эти ёлки - лучше что вообще с пыхом было за всю его историю.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 13:57, спустя 48 секунд

    @vasa_c, да ладно?

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 14:59, спустя 1 час 2 минуты 48 секунд

    Можете рассказать почему в

    if (\strlen($key) != $len || !preg_match($pattern, $key)) {
    

    \strlen, но не \preg_match?

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 15:13, спустя 13 минут 7 секунд

    @adw0rd, ты не заметил дальше strlen() != ?

    ну было бы preg_match() !=

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 мая 2014 г. 16:36, спустя 1 час 23 минуты 51 секунду

    Нет, я у тому, почему надо иногда ставить корневой неймспейс, а иногда нет?

    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!