@@ -67,16 +67,17 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
67
67
(inst, fromIterable(inst), modif)
68
68
}
69
69
70
- // def areEqual(t1: GenTraversable[T], t2: GenTraversable[T]) = if (hasStrictOrder) {
71
- // t1 == t2 && t2 == t1
72
- // } else (t1, t2) match { // it is slightly delicate what `equal` means if the order is not strict
73
- // case (m1: GenMap[_, _], m2: GenMap[_, _]) => m1 == m2 && m2 == m1
70
+ def areEqual (t1 : Iterable [T ], t2 : ParIterable [T ]) = if (hasStrictOrder) {
71
+ t1.iterator.sameElements(t2) && t2.sameElements(t1)
72
+ } else (t1, t2) match { // it is slightly delicate what `equal` means if the order is not strict
73
+ // TODO uncomment and update that part of the implementation when ParMap and ParSet are migrated
74
+ // case (m1: Map[_, _], m2: ParMap[_, _]) => m1 == m2 && m2 == m1
74
75
// case (i1: GenIterable[_], i2: GenIterable[_]) =>
75
76
// val i1s = i1.toSet
76
77
// val i2s = i2.toSet
77
78
// i1s == i2s && i2s == i1s
78
- // case _ => t1 == t2 && t2 == t1
79
- // }
79
+ case _ => t1.iterator.sameElements(t2) && t2.sameElements(t1)
80
+ }
80
81
81
82
def printDebugInfo [A , CC [X ] <: ParIterable [X ], C <: ParIterable [A ], S <: Iterable [A ] with IterableOps [A , Iterable , S ]](coll : ParIterableLike [A , CC , C , S ]): Unit = {
82
83
println(" Collection debug info: " )
@@ -160,47 +161,47 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
160
161
results.reduceLeft(_ && _)
161
162
}
162
163
163
- // property("mappings must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
164
- // val results = for ((f, ind) <- mapFunctions.zipWithIndex) yield {
165
- // val ms = t.map(f)
166
- // val mp = coll.map(f)
167
- // val invs = checkDataStructureInvariants(ms, mp)
168
- // if (!areEqual(ms, mp) || !invs) {
169
- // println(t)
170
- // println(coll)
171
- // println("mapped to: ")
172
- // println(ms)
173
- // println(mp)
174
- // println("sizes: ")
175
- // println(ms.size)
176
- // println(mp.size)
177
- // println("valid: " + invs)
178
- // }
179
- // ("op index: " + ind) |: (areEqual(ms, mp) && invs)
180
- // }
181
- // results.reduceLeft(_ && _)
182
- // }
164
+ property(" mappings must be equal" ) = forAllNoShrink(collectionPairs) { case (t, coll) =>
165
+ val results = for ((f, ind) <- mapFunctions.zipWithIndex) yield {
166
+ val ms = t.map(f)
167
+ val mp = coll.map(f)
168
+ val invs = checkDataStructureInvariants(ms, mp)
169
+ if (! areEqual(ms, mp) || ! invs) {
170
+ println(t)
171
+ println(coll)
172
+ println(" mapped to: " )
173
+ println(ms)
174
+ println(mp)
175
+ println(" sizes: " )
176
+ println(ms.size)
177
+ println(mp.size)
178
+ println(" valid: " + invs)
179
+ }
180
+ (" op index: " + ind) |: (areEqual(ms, mp) && invs)
181
+ }
182
+ results.reduceLeft(_ && _)
183
+ }
183
184
184
- // property("collects must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
185
- // val results = for ((f, ind) <- partialMapFunctions.zipWithIndex) yield {
186
- // val ps = t.collect(f)
187
- // val pp = coll.collect(f)
188
- // if (!areEqual(ps, pp)) {
189
- // println(t)
190
- // println(coll)
191
- // println("collected to: ")
192
- // println(ps)
193
- // println(pp)
194
- // }
195
- // ("op index: " + ind) |: areEqual(ps, pp)
196
- // }
197
- // results.reduceLeft(_ && _)
198
- // }
185
+ property(" collects must be equal" ) = forAllNoShrink(collectionPairs) { case (t, coll) =>
186
+ val results = for ((f, ind) <- partialMapFunctions.zipWithIndex) yield {
187
+ val ps = t.collect(f)
188
+ val pp = coll.collect(f)
189
+ if (! areEqual(ps, pp)) {
190
+ println(t)
191
+ println(coll)
192
+ println(" collected to: " )
193
+ println(ps)
194
+ println(pp)
195
+ }
196
+ (" op index: " + ind) |: areEqual(ps, pp)
197
+ }
198
+ results.reduceLeft(_ && _)
199
+ }
199
200
200
- // property("flatMaps must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
201
- // (for ((f, ind) <- flatMapFunctions.zipWithIndex)
202
- // yield ("op index: " + ind) |: areEqual(t.flatMap(f), coll.flatMap(f))).reduceLeft(_ && _)
203
- // }
201
+ property(" flatMaps must be equal" ) = forAllNoShrink(collectionPairs) { case (t, coll) =>
202
+ (for ((f, ind) <- flatMapFunctions.zipWithIndex)
203
+ yield (" op index: " + ind) |: areEqual(t.flatMap(f), coll.flatMap(f))).reduceLeft(_ && _)
204
+ }
204
205
205
206
property(" filters must be equal" ) = forAllNoShrink(collectionPairs) { case (t, coll) =>
206
207
(for ((p, ind) <- filterPredicates.zipWithIndex) yield {
@@ -353,37 +354,37 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
353
354
}).reduceLeft(_ && _)
354
355
}
355
356
356
- // property("++s must be equal") = forAll(collectionTriplets) { case (t, coll, colltoadd) =>
357
- // try {
358
- // val toadd = colltoadd
359
- // val tr = t ++ toadd.iterator
360
- // val cr = coll ++ toadd.iterator
361
- // if (!areEqual(tr, cr)) {
362
- // println("from: " + t)
363
- // println("and: " + coll.iterator.toList)
364
- // println("adding: " + toadd)
365
- // println(tr.toList)
366
- // println(cr.iterator.toList)
367
- // }
368
- // ("adding " |: areEqual(tr, cr)) &&
369
- // (for ((trav, ind) <- (addAllTraversables) .zipWithIndex) yield {
370
- // val tadded = t ++ trav
371
- // val cadded = coll ++ collection.parallel.mutable.ParArray(trav.toSeq: _*)
372
- // if (!areEqual(tadded, cadded)) {
373
- // println("----------------------")
374
- // println("from: " + t)
375
- // println("and: " + coll)
376
- // println("adding: " + trav)
377
- // println(tadded)
378
- // println(cadded)
379
- // }
380
- // ("traversable " + ind) |: areEqual(tadded, cadded)
381
- // }).reduceLeft(_ && _)
382
- // } catch {
383
- // case e: java.lang.Exception =>
384
- // throw e
385
- // }
386
- // }
357
+ property(" ++s must be equal" ) = forAll(collectionTriplets) { case (t, coll, colltoadd) =>
358
+ try {
359
+ val toadd = colltoadd
360
+ val tr = t ++ toadd.iterator
361
+ val cr = coll ++ toadd.iterator
362
+ if (! areEqual(tr, cr)) {
363
+ println(" from: " + t)
364
+ println(" and: " + coll.iterator.toList)
365
+ println(" adding: " + toadd)
366
+ println(tr.toList)
367
+ println(cr.iterator.toList)
368
+ }
369
+ (" adding " |: areEqual(tr, cr)) &&
370
+ (for ((trav, ind) <- addAllIterables .zipWithIndex) yield {
371
+ val tadded = t ++ trav
372
+ val cadded = coll ++ collection.parallel.mutable.ParArray (trav.toSeq: _* )
373
+ if (! areEqual(tadded, cadded)) {
374
+ println(" ----------------------" )
375
+ println(" from: " + t)
376
+ println(" and: " + coll)
377
+ println(" adding: " + trav)
378
+ println(tadded)
379
+ println(cadded)
380
+ }
381
+ (" traversable " + ind) |: areEqual(tadded, cadded)
382
+ }).reduceLeft(_ && _)
383
+ } catch {
384
+ case e : java.lang.Exception =>
385
+ throw e
386
+ }
387
+ }
387
388
388
389
if (hasStrictOrder) property(" copies to array must be equal" ) = forAllNoShrink(collectionPairs) { case (t, coll) =>
389
390
val tarr = newArray(t.size)
0 commit comments