Skip to content

Commit

Permalink
Added a custom generator for BigDecimals, to reduce somewhat the risk…
Browse files Browse the repository at this point in the history
… of underflow
  • Loading branch information
Cyrille Chépélov (TP12) committed Oct 19, 2016
1 parent 22a7004 commit c0a2d98
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,24 @@ limitations under the License.

package com.twitter.algebird

import org.scalacheck.Arbitrary
import org.scalacheck.Prop
import org.scalacheck.{Arbitrary, Gen, Prop}
import org.scalacheck.Prop.forAll

import scala.math.Equiv

/**
* Base properties useful for all tests using Algebird's typeclasses.
*/

object BaseProperties {
implicit val arbReasonableBigDecimals: Arbitrary[BigDecimal] = Arbitrary(
for {
scale <- Gen.choose(-128, +128)
base <- implicitly[Arbitrary[BigInt]].arbitrary
} yield {
(BigDecimal(base) * BigDecimal(10).pow(scale))
})

def defaultEq[T](t0: T, t1: T) = t0 == t1

trait HigherEq[M[_]] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import Helpers.arbitraryBatched
class BatchedLaws extends CheckProperties with Matchers with PropertyChecks {

import BaseProperties._
implicit val arbReasonableBigDecimals = BaseProperties.arbReasonableBigDecimals

def testBatchedMonoid[A: Arbitrary: Monoid](name: String, size: Int): Unit = {
implicit val m: Monoid[Batched[A]] = Batched.compactingMonoid[A](size)
Expand All @@ -43,10 +44,10 @@ class BatchedLaws extends CheckProperties with Matchers with PropertyChecks {
testBatchedMonoid[BigInt]("BigInt", 10)
testBatchedMonoid[BigInt]("BigInt", 100)
testBatchedMonoid[BigInt]("BigInt", 1000000)
testBatchedMonoid[BigDecimal]("BigDecimal", 1)
testBatchedMonoid[BigDecimal]("BigDecimal", 10)
testBatchedMonoid[BigDecimal]("BigDecimal", 100)
testBatchedMonoid[BigDecimal]("BigDecimal", 1000000)
testBatchedMonoid[BigDecimal]("BigDecimal", 1)(arbReasonableBigDecimals, implicitly[Monoid[BigDecimal]])
testBatchedMonoid[BigDecimal]("BigDecimal", 10)(arbReasonableBigDecimals, implicitly[Monoid[BigDecimal]])
testBatchedMonoid[BigDecimal]("BigDecimal", 100)(arbReasonableBigDecimals, implicitly[Monoid[BigDecimal]])
testBatchedMonoid[BigDecimal]("BigDecimal", 1000000)(arbReasonableBigDecimals, implicitly[Monoid[BigDecimal]])
testBatchedMonoid[String]("String", 1)
testBatchedMonoid[String]("String", 10)
testBatchedMonoid[String]("String", 100)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ class CmsLaws extends PropSpec with PropertyChecks with Matchers {

import BaseProperties._


val DELTA = 1E-8
val EPS = 0.005
val SEED = 1
Expand Down

0 comments on commit c0a2d98

Please sign in to comment.