[ANN] CodeJam.PerfTests, pre-beta
От: Sinix  
Дата: 08.12.16 13:59
Оценка: 48 (2)

CodeJam.PerfTests, pre-beta


Таки тадам!

В смысле, оно готово, работает, в основном документировано и впереди ещё куча интересных фич
Важно: это не публичный релиз, есть организационные вопросы которые надо разрулить перед тем, как делать нормальный анонс.

Ну и как обычно, первым достаются все грабли, я предупредил

Что это такое:


Штука, чтобы запускать перфтесты, используя BenchmarkDotNet (лучший фреймворк для бенчмарков под дотнет, я серьёзно):
    // Perftest runner method. Naming pattern is $"Run{nameof(PerfTestClass)}".
    // You may use it to write additional assertions after the perftest is completed.
    [Test]
    public void RunSimplePerfTest() => Competition.Run(this);

    // Baseline competition member. Other competition members will be compared with this.
    [CompetitionBaseline]
    public void Baseline() => Thread.SpinWait(_count);

    // Competition member #1. Should take ~3x more time to run.
    [CompetitionBenchmark(2.88, 3.12)]
    public void SlowerX3() => Thread.SpinWait(3 * _count);

    // Competition member #2. Should take ~5x more time to run.
    [CompetitionBenchmark(4.80, 5.20)]
    public void SlowerX5() => Thread.SpinWait(5 * _count);

    // Competition member #3. Should take ~7x more time to run.
    [CompetitionBenchmark(6.72, 7.28)]
    public void SlowerX7() => Thread.SpinWait(7 * _count);

Подробнее — в Intro, зря я его писал что ли?

И оно работает!
(лог раскрывается при щелчке по тесту)

Пример вывода:
   Method |          Mean |    StdDev | Limit(min) |        Median |           Min |           Max | Scaled | Scaled-StdDev |
--------- |-------------- |---------- |----------- |-------------- |-------------- |-------------- |------- |-------------- |
 Baseline |   198.0130 us | 1.3611 us |       1.00 |   197.5826 us |   195.7715 us |   202.1106 us |   1.00 |          0.00 |
 SlowerX3 |   592.0295 us | 3.0897 us |       2.99 |   591.6160 us |   588.2955 us |   601.5773 us |   2.99 |          0.03 |
 SlowerX5 |   986.2591 us | 5.4466 us |       4.98 |   984.5475 us |   980.0196 us | 1,003.2628 us |   4.98 |          0.04 |
 SlowerX7 | 1,379.9404 us | 6.7189 us |       6.97 | 1,377.9620 us | 1,372.2266 us | 1,401.5071 us |   6.97 |          0.06 |


============= SimplePerfTest =============
// ? CodeJam.Examples.PerfTests.Tutorial.SimplePerfTest, CodeJam.Examples.PerfTests

---- Run 1, total runs (expected): 1 -----
// ? #1.1  02.963s, Informational@Analyser: CompetitionAnalyser: All competition limits are ok.


Исходники, документация — тынц, пакеты — тынц, проект с примерами (будет дополняться) — тынц.


Желающим поучаствовать, в чём нужна помощь:

1. Документация во всех смыслах
Во-первых, будет классно, если кто-то возьмётся организовать из md-шек нормальную документашку, силами сандкастла или ещё как — некритично. В идеале использовать http://fransbouma.github.io/DocNet/ , оно хоть смотрится пристойно.

Во-вторых, английский неродной, результаты соответствующие. Желающие заняться рерайтингом текстов — тысяча раз вэлкам! Отдельные куски ещё будут дописываться, но кардинальных правок по смыслу не будет. Ну, я на это надеюсь

2. Площадки для фидбэка. Я собираюсь дать ссылку товарищам из BenchmarkDotNet, они высказывали заинтересованность в перфтестах. Если устраивает, что в gitter-е и в issues может быть английский — всё ок. Если нет — может, вытащить PerfTests в отдельный repo или завести англоязычный gitter?

3. Отдельный репо для примеров. Сейчас закинул к себе, хорошо бы перевести его в github/rsdn.
Почему низзя примеры разместить прямо внутри rsdn/CodeJam? Да потому что большинству скачивающих нужны будут только примеры и это должен быть образцово-показательный код, а не тот лёгкий бардак, что у нас периодически в проекте творится.

4. Идеи и пожелания. Обязательно да, при условии, что вы подкрепите ваши пожелания _реальным_ сценарием использования. Абстрактные "хорошо бы чтоб было" без объяснения зачем оно понадобилось делаться будут в последнюю очередь, т.е. нескоро. Не из вредности, просто нет никакого смысла делать вещь для которой толком не сформулировано ни зачем она нужна, ни как проверить, что решение рабочее.

5. Собственно код. Тут сложнее, т.к. есть несколько задач, которые могут потребовать переколбасить все кишки перфтестов. Будут делаться после нового года, после них код должен окончательно устояться. Т.е. есть небольшой риск, что ваши правки уйдут в никуда или будут переписаны вместе с окружающим кодом. Если устраивает — добро пожаловать

Вроде бы всё, чего упустил — пишите
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.