diff --git a/src/funcheck/scalacheck/ForAllTransformer.scala b/src/funcheck/scalacheck/ForAllTransformer.scala index 4731bea365baabe1df21dcf9f2c4c67060756ce0..ba86964fa857e7763f29a431106303415def7f77 100644 --- a/src/funcheck/scalacheck/ForAllTransformer.scala +++ b/src/funcheck/scalacheck/ForAllTransformer.scala @@ -25,6 +25,14 @@ trait ForAllTransformer extends TypingTransformers curTree = tree tree match { +// case Apply(lhs @ Select(_, implyMethod), rhs) => +// println("info "+lhs.symbol.name.equals("==>")) +// if (lhs.symbol.tpe.decl("==>") != NoSymbol) +// println(">"+tree) +// else +// println(lhs.symbol + " and "+lhs.symbol.tpe) +// tree + case Apply(TypeApply(s: Select, partpes), rhs @ List(f @ Function(vparams,body))) if isForall(s) => atOwner(currentOwner) { assert(vparams.size == 1, "funcheck.Specs.forAll properties are expected to take a single (tuple) parameter") diff --git a/src/funcheck/scalacheck/ScalaCheck.scala b/src/funcheck/scalacheck/ScalaCheck.scala index b1304476c42f32fed2f9eda7ecd8d99aa2dba26b..eecdd9e05bc58839873a7b8cdb0a500da1750286 100644 --- a/src/funcheck/scalacheck/ScalaCheck.scala +++ b/src/funcheck/scalacheck/ScalaCheck.scala @@ -309,6 +309,8 @@ trait ScalaCheck extends FreshNameCreator { private val arbImmutableMap = select(moduleSym, "arbImmutableMap") /** Symbol for the <code>org.scalacheck.Arbitrary.arbList</code> method definition. */ private val arbList = select(moduleSym, "arbList") + /** Symbol for the <code>org.scalacheck.Arbitrary.arbArray</code> method definition. */ + private val arbArray = select(moduleSym, "arbArray") /** Symbol for the <code>org.scalacheck.Arbitrary.arbSet</code> method definition. */ private val arbSet = select(moduleSym, "arbSet") /** Symbol for the <code>org.scalacheck.Arbitrary.arbTuple2</code> method definition. */ @@ -339,6 +341,7 @@ trait ScalaCheck extends FreshNameCreator { //tpe2arbApp += ImmutableMapClass.typeConstructor -> arbImmutableMap tpe2arbApp += ListClass.typeConstructor -> arbList + tpe2arbApp += ArrayClass.typeConstructor -> arbArray //tpe2arbApp += ImmutableSetClass.typeConstructor -> arbSet tpe2arbApp += TupleClass(2).typeConstructor -> arbTuple2 @@ -473,6 +476,8 @@ trait ScalaCheck extends FreshNameCreator { /** Symbol for the <code>org.scalacheck.Shrink.shrinkList</code> method definition. */ private val shrinkList = select(moduleShrinkSym, "shrinkList") /** Symbol for the <code>org.scalacheck.Shrink.shrinkSet</code> method definition. */ + private val shrinkArray = select(moduleShrinkSym, "shrinkArray") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkSet</code> method definition. */ private val shrinkSet = select(moduleShrinkSym, "shrinkSet") /** Symbol for the <code>org.scalacheck.Shrink.shrinkTuple2</code> method definition. */ @@ -501,6 +506,15 @@ trait ScalaCheck extends FreshNameCreator { /** Symbol for the <code>org.scalacheck.Shrink.shrinkStringList</code> method definition. */ private val shrinkStringList = select(moduleShrinkSym, "shrinkStringList") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkIntArray</code> method definition. */ + private val shrinkIntArray = select(moduleShrinkSym, "shrinkIntArray") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkBooleanArray</code> method definition. */ + private val shrinkBooleanArray = select(moduleShrinkSym, "shrinkBooleanArray") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkDoubleArray</code> method definition. */ + private val shrinkDoubleArray = select(moduleShrinkSym, "shrinkDoubleArray") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkStringArray</code> method definition. */ + private val shrinkStringArray = select(moduleShrinkSym, "shrinkStringArray") + /** Symbol for the <code>org.scalacheck.Shrink.shrinkIntSet</code> method definition. */ private val shrinkIntSet = select(moduleShrinkSym, "shrinkIntSet") /** Symbol for the <code>org.scalacheck.Shrink.shrinkBooleanSet</code> method definition. */ @@ -560,7 +574,8 @@ trait ScalaCheck extends FreshNameCreator { def apply(container: Type)(parametric: Type): Type = appliedType(container, List(parametric)) - def listOf(tpe: Type): Type = apply(ListClass.typeConstructor)(tpe) + def listOf(tpe: Type): Type = apply(ListClass.typeConstructor)(tpe) + def arrayOf(tpe: Type): Type = apply(ArrayClass.typeConstructor)(tpe) def setOf(tpe: Type): Type = apply(SetClass.typeConstructor)(tpe) def optionOf(tpe: Type): Type = apply(OptionClass.typeConstructor)(tpe) def tupleOf(arity: Int, tpe: Type): Type = apply(TupleClass(arity).typeConstructor)(tpe) @@ -570,6 +585,11 @@ trait ScalaCheck extends FreshNameCreator { val DoubleListTpe = listOf(DoubleClass.typeConstructor) val StringListTpe = listOf(StringClass.typeConstructor) + val IntArrayTpe = arrayOf(IntClass.typeConstructor) + val BooleanArrayTpe = arrayOf(BooleanClass.typeConstructor) + val DoubleArrayTpe = arrayOf(DoubleClass.typeConstructor) + val StringArrayTpe = arrayOf(StringClass.typeConstructor) + val IntSetTpe = setOf(IntClass.typeConstructor) val BooleanSetTpe = setOf(BooleanClass.typeConstructor) val DoubleSetTpe = setOf(DoubleClass.typeConstructor) @@ -595,10 +615,12 @@ trait ScalaCheck extends FreshNameCreator { val DoubleTuple4Tpe = tupleOf(4, DoubleClass.typeConstructor) val StringTuple4Tpe = tupleOf(4, StringClass.typeConstructor) - Map(IntClass.typeConstructor -> shrinkInt, + Map( + IntClass.typeConstructor -> shrinkInt, StringClass.typeConstructor -> shrinkString, OptionClass.typeConstructor -> shrinkOption, ListClass.typeConstructor -> shrinkList, + ArrayClass.typeConstructor -> shrinkArray, SetClass.typeConstructor -> shrinkSet, TupleClass(2).typeConstructor -> shrinkTuple2, TupleClass(3).typeConstructor -> shrinkTuple3, @@ -612,6 +634,10 @@ trait ScalaCheck extends FreshNameCreator { BooleanListTpe -> shrinkBooleanList, DoubleListTpe -> shrinkDoubleList, StringListTpe -> shrinkStringList, + IntArrayTpe -> shrinkIntArray, + BooleanArrayTpe -> shrinkBooleanArray, + DoubleArrayTpe -> shrinkDoubleArray, + StringArrayTpe -> shrinkStringArray, IntSetTpe -> shrinkIntSet, BooleanSetTpe -> shrinkBooleanSet, DoubleSetTpe -> shrinkDoubleSet,