|
| 1 | +package org.scalacheck |
| 2 | + |
| 3 | +import java.util.ArrayList |
| 4 | + |
| 5 | +import scala.collection.generic.{CanBuildFrom, Sorted} |
| 6 | +import scala.collection.immutable.Stream |
| 7 | +import scala.collection.mutable.Builder |
| 8 | +import scala.collection.{BitSet, TraversableOnce} |
| 9 | + |
| 10 | +private[scalacheck] object ScalaVersionSpecific { |
| 11 | + def toLazyList[T](i: TraversableOnce[T]) = i.toStream |
| 12 | + |
| 13 | + type Factory[-A, +C] = CanBuildFrom[Nothing, A, C] |
| 14 | + |
| 15 | + def listFactory[T]: CanBuildFrom[List[T], T, List[T]] = |
| 16 | + new CanBuildFrom[List[T], T, List[T]] with Serializable { |
| 17 | + def apply(from: List[T]) = List.newBuilder[T] |
| 18 | + def apply() = List.newBuilder[T] |
| 19 | + } |
| 20 | + |
| 21 | + def bitsetFactory[T]: CanBuildFrom[BitSet, Int, BitSet] = |
| 22 | + new CanBuildFrom[BitSet, Int, BitSet] with Serializable { |
| 23 | + def apply(from: BitSet) = BitSet.newBuilder |
| 24 | + def apply() = BitSet.newBuilder |
| 25 | + } |
| 26 | + |
| 27 | + def mapFactory[T, U]: CanBuildFrom[Map[T, U], (T, U), Map[T, U]] = |
| 28 | + new CanBuildFrom[Map[T, U], (T, U), Map[T, U]] with Serializable { |
| 29 | + def apply(from: Map[T, U]) = Map.newBuilder[T, U] |
| 30 | + def apply() = Map.newBuilder[T, U] |
| 31 | + } |
| 32 | + |
| 33 | + implicit class CBFExt[-A, +C](val cbf: CanBuildFrom[Nothing, A, C]) extends AnyVal { |
| 34 | + def newBuilder: Builder[A, C] = cbf() |
| 35 | + } |
| 36 | + |
| 37 | + type LazyList[+A] = Stream[A] |
| 38 | + val LazyList = Stream |
| 39 | + |
| 40 | + implicit class StreamExt[+A](val s: Stream[A]) extends AnyVal { |
| 41 | + def lazyAppendedAll[B >: A](rest: => TraversableOnce[B]): Stream[B] = s.append(rest) |
| 42 | + } |
| 43 | + |
| 44 | + implicit class SortedExt[K, T <: Sorted[K, T]](val s: Sorted[K, T]) extends AnyVal { |
| 45 | + def rangeFrom(from: K): T = s.from(from) |
| 46 | + def rangeTo(to: K): T = s.to(to) |
| 47 | + def rangeUntil(until: K): T = s.until(until) |
| 48 | + } |
| 49 | +} |
| 50 | + |
| 51 | +private[scalacheck] trait GenVersionSpecific |
| 52 | +private[scalacheck] trait CogenVersionSpecific |
| 53 | + |
| 54 | +// Used in tests |
| 55 | +private[scalacheck] trait GenSpecificationVersionSpecific { |
| 56 | + def infiniteLazyList[T](g: => Gen[T]): Gen[Stream[T]] = Gen.infiniteStream(g) |
| 57 | +} |
| 58 | + |
| 59 | +private[scalacheck] class ArrayListBuilder[T] extends Builder[T, ArrayList[T]] { |
| 60 | + private val al = new ArrayList[T] |
| 61 | + def +=(x: T): this.type = { |
| 62 | + al.add(x) |
| 63 | + this |
| 64 | + } |
| 65 | + def clear(): Unit = al.clear() |
| 66 | + def result(): ArrayList[T] = al |
| 67 | +} |
0 commit comments