Монотонный `Произвольный [A => A]`

В скаляре, как бы вы пошли на реализацию Arbitrary что возвращает только монотонные функции?

Я пытался с помощью suchThat в варианте

def monotonicArbitrary [A : Arbitrary : Cogen : Ordering] : Arbitrary[A => A] = Arbitrary {
  arbitraryFn1[A,A].arbitrary suchThat {f => 
    val monotonic = forAll { (aa : (A,A)) => { aa._1 > aa._2} == { f(aa._1) > f(aa._2) } }
    check(monotonic).passed
  }
}

Но это терпит неудачу, потому что генераторы по умолчанию создают негладкие функции, я полагаю.

Я бы принял ответы где A ограничено быть Numeric или аналогичный (иначе не уверен, как вы будете генерировать гладкие функции).

Это не может быть тривиальной реализацией, т.е. всегда возвращать одну и ту же функцию.

0 ответов

Другие вопросы по тегам