JMH: ограничение пространства параметров

Предположим, у меня есть тест JMH с двумя параметрами:

@Param( { "1", "2", 4", "8", "16" } )
int param1;

@Param( { "1", "2", 4", "8", "16" } )
int param2;

Есть ли идиоматический способ добавить ограничение на параметры, например. только к бенчмаркам для param1 < param2?

Генерация исключения из @SetUp работает, но добавляет шум в вывод.


jmh
person Philip Aston    schedule 11.02.2015    source источник


Ответы (1)


Нет, не в этот момент. Если вы чувствуете, что аннотации накладывают ограничения, вы всегда можете вернуться к API. Там вы можете сделать что-то вроде:

for (int p1 = 1; p1 <= 16; p1 *= 2) {
   for (int p2 = 1; p2 <= p1; p2 *= 2) {
      Options opt = new OptionsBuilder()
        ...
        .param("param1", p1)
        .param("param1", p2)
        .build();

       RunResult r = new Runner(opt).runSingle();
       ... put r somewhere to process
   }
}

(Точка зрения мейнтейнера: не кажется целесообразным создавать полноценный DSL на основе аннотаций для JMH, просто проще позволить пользователям кодировать свои сложные сценарии на Java).

UPD: Если подумать, вы, вероятно, можете закодировать оба параметра в один @Param, если хотите остаться только с аннотацией.

person Aleksey Shipilev    schedule 11.02.2015
comment
Спасибо Алексей, все понятно. Одним из простых подходов может быть SkipBenchmarksException, который может быть выброшен из @Setup, указывающий, что текущая комбинация параметров должна быть молча пропущена. - person Philip Aston; 11.02.2015
comment
Это похоже на предположения JUnit: Assert.assumeThat(someBoolean,someMatcher); - person Nitsan Wakart; 12.02.2015
comment
System.exit(0) из @Setup работает, пока не будет реализовано SkipBenchmarksException - person Vladimir Sitnikov; 07.04.2015