@@ -159,6 +159,22 @@ class RDDSuite extends SparkFunSuite with SharedSparkContext {
159159 assert(ser.serialize(union.partitions.head).limit() < 2000 )
160160 }
161161
162+ test(" fold" ) {
163+ val rdd = sc.makeRDD(- 1000 until 1000 , 10 )
164+ def op : (Int , Int ) => Int = (c : Int , x : Int ) => c + x
165+ val sum = rdd.fold(0 )(op)
166+ assert(sum === - 1000 )
167+ }
168+
169+ test(" fold with op modifying first arg" ) {
170+ val rdd = sc.makeRDD(- 1000 until 1000 , 10 ).map(x => Array (x))
171+ def op : (Array [Int ], Array [Int ]) => Array [Int ] = { (c : Array [Int ], x : Array [Int ]) =>
172+ c(0 ) += x(0 )
173+ c
174+ }
175+ val sum = rdd.fold(Array (0 ))(op)
176+ }
177+
162178 test(" aggregate" ) {
163179 val pairs = sc.makeRDD(Array ((" a" , 1 ), (" b" , 2 ), (" a" , 2 ), (" c" , 5 ), (" a" , 3 )))
164180 type StringMap = HashMap [String , Int ]
@@ -185,7 +201,19 @@ class RDDSuite extends SparkFunSuite with SharedSparkContext {
185201 def combOp : (Long , Long ) => Long = (c1 : Long , c2 : Long ) => c1 + c2
186202 for (depth <- 1 until 10 ) {
187203 val sum = rdd.treeAggregate(0L )(seqOp, combOp, depth)
188- assert(sum === - 1000L )
204+ assert(sum === - 1000 )
205+ }
206+ }
207+
208+ test(" treeAggregate with ops modifying first args" ) {
209+ val rdd = sc.makeRDD(- 1000 until 1000 , 10 ).map(x => Array (x))
210+ def op : (Array [Int ], Array [Int ]) => Array [Int ] = { (c : Array [Int ], x : Array [Int ]) =>
211+ c(0 ) += x(0 )
212+ c
213+ }
214+ for (depth <- 1 until 10 ) {
215+ val sum = rdd.treeAggregate(Array (0 ))(op, op, depth)
216+ assert(sum === - 1000 )
189217 }
190218 }
191219
0 commit comments