blob: 4382ca9e2746951cd73acd8a9c9f0587694946aa [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.crunch.scrunch;
import org.junit.Test;
object ScalaTypesTest {
def et(s: String): Either[String, Int] = {
if (s.startsWith("a")) {
Left(s)
} else {
Right(s.length)
}
}
}
case class MyCaseClass(name: List[String], gender: Option[String], age: Int, birthday: Long)
class ScalaTypesTest extends CrunchSuite {
import ScalaTypesTest._
lazy val pipeline = Pipeline.mapReduce[ScalaTypesTest](tempDir.getDefaultConfiguration)
@Test
def option {
val shakespeare = tempDir.copyResourceFileName("shakes.txt")
val out = pipeline.read(From.textFile(shakespeare))
.map(x => if (x.startsWith("a")) Some(x) else None)
.aggregate(Aggregators.sum) // uses Algebird Monoid[Option[String]]
.materialize
assert(out.exists(!_.isEmpty))
pipeline.done
}
@Test
def either {
val shakespeare = tempDir.copyResourceFileName("shakes.txt")
val out = pipeline.read(From.textFile(shakespeare))
.map(et)
.materialize
.take(100)
pipeline.done
assert(out.exists(_.isLeft))
assert(out.exists(_.isRight))
}
@Test
def product {
val pt = Avros.caseClasses[MyCaseClass]
pt.getInputMapFn.initialize()
pt.getOutputMapFn.initialize()
val cc = MyCaseClass(List("Josh", "Wills"), Some("Male"), 35, 1234L)
val ser = pt.getOutputMapFn.map(cc)
assert(cc == pt.getInputMapFn.map(ser))
}
@Test
def productWithNulls {
val pt = Avros.caseClasses[MyCaseClass]
pt.getInputMapFn.initialize()
pt.getOutputMapFn.initialize()
val cc = MyCaseClass(List("Josh", "Wills"), null, 35, 1234L)
val ser = pt.getOutputMapFn.map(cc)
assert(cc == pt.getInputMapFn.map(ser))
}
}