Skip to content

Commit

Permalink
Add named methods to Duration in parallel to symbolic methods for Jav…
Browse files Browse the repository at this point in the history
…a-friendliness. Also add unit tests for Duration, in Scala and Java.
  • Loading branch information
srowen committed Sep 15, 2014
1 parent cc14644 commit 4dee32e
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 0 deletions.
19 changes: 19 additions & 0 deletions streaming/src/main/scala/org/apache/spark/streaming/Duration.scala
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,25 @@ case class Duration (private val millis: Long) {

def / (that: Duration): Double = millis.toDouble / that.millis.toDouble

// Java-friendlier versions of the above:

def less(that: Duration): Boolean = this.<(that)

def lessEq(that: Duration): Boolean = this.<=(that)

def greater(that: Duration): Boolean = this.>(that)

def greaterEq(that: Duration): Boolean = this.>=(that)

def plus(that: Duration): Duration = this.+(that)

def minus(that: Duration): Duration = this.-(that)

def times(times: Int): Duration = this.*(times)

def div(that: Duration): Double = this./(that)


def isMultipleOf(that: Duration): Boolean =
(this.millis % that.millis == 0)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* 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.spark.streaming;

import org.junit.Assert;
import org.junit.Test;

public class JavaDurationSuite {

// Just testing the methods that are specially exposed for Java.
// This does not repeat all tests found in the Scala suite.

@Test
public void testLess() {
Assert.assertTrue(new Duration(999).less(new Duration(1000)));
}

@Test
public void testLessEq() {
Assert.assertTrue(new Duration(1000).lessEq(new Duration(1000)));
}

@Test
public void testGreater() {
Assert.assertTrue(new Duration(1000).greater(new Duration(999)));
}

@Test
public void testGreaterEq() {
Assert.assertTrue(new Duration(1000).greaterEq(new Duration(1000)));
}

@Test
public void testPlus() {
Assert.assertEquals(new Duration(1100), new Duration(1000).plus(new Duration(100)));
}

@Test
public void testMinus() {
Assert.assertEquals(new Duration(900), new Duration(1000).minus(new Duration(100)));
}

@Test
public void testTimes() {
Assert.assertEquals(new Duration(200), new Duration(100).times(2));
}

@Test
public void testDiv() {
Assert.assertEquals(200.0, new Duration(1000).div(new Duration(5)), 1.0e-12);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* 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.spark.streaming

class DurationSuite extends TestSuiteBase {

test("less") {
assert(new Duration(999) < new Duration(1000))
assert(new Duration(0) < new Duration(1))
assert(!(new Duration(1000) < new Duration(999)))
assert(!(new Duration(1000) < new Duration(1000)))
}

test("lessEq") {
assert(new Duration(999) <= new Duration(1000))
assert(new Duration(0) <= new Duration(1))
assert(!(new Duration(1000) <= new Duration(999)))
assert(new Duration(1000) <= new Duration(1000))
}

test("greater") {
assert(!(new Duration(999) > new Duration(1000)))
assert(!(new Duration(0) > new Duration(1)))
assert(new Duration(1000) > new Duration(999))
assert(!(new Duration(1000) > new Duration(1000)))
}

test("greaterEq") {
assert(!(new Duration(999) >= new Duration(1000)))
assert(!(new Duration(0) >= new Duration(1)))
assert(new Duration(1000) >= new Duration(999))
assert(new Duration(1000) >= new Duration(1000))
}

test("plus") {
assert((new Duration(1000) + new Duration(100)) == new Duration(1100))
assert((new Duration(1000) + new Duration(0)) == new Duration(1000))
}

test("minus") {
assert((new Duration(1000) - new Duration(100)) == new Duration(900))
assert((new Duration(1000) - new Duration(0)) == new Duration(1000))
}

test("times") {
assert((new Duration(100) * 2) == new Duration(200))
assert((new Duration(100) * 1) == new Duration(100))
assert((new Duration(100) * 0) == new Duration(0))
}

test("div") {
assert((new Duration(1000) / new Duration(5)) == 200.0)
assert((new Duration(1000) / new Duration(1)) == 1000.0)
assert((new Duration(1000) / new Duration(1000)) == 1.0)
assert((new Duration(1000) / new Duration(2000)) == 0.5)
}

test("isMultipleOf") {
assert(new Duration(1000).isMultipleOf(new Duration(5)))
assert(new Duration(1000).isMultipleOf(new Duration(1000)))
assert(new Duration(1000).isMultipleOf(new Duration(1)))
assert(!new Duration(1000).isMultipleOf(new Duration(6)))
}

test("min") {
assert(new Duration(999).min(new Duration(1000)) == new Duration(999))
assert(new Duration(1000).min(new Duration(999)) == new Duration(999))
assert(new Duration(1000).min(new Duration(1000)) == new Duration(1000))
}

test("max") {
assert(new Duration(999).max(new Duration(1000)) == new Duration(1000))
assert(new Duration(1000).max(new Duration(999)) == new Duration(1000))
assert(new Duration(1000).max(new Duration(1000)) == new Duration(1000))
}

test("isZero") {
assert(new Duration(0).isZero)
assert(!(new Duration(1).isZero))
}

}

0 comments on commit 4dee32e

Please sign in to comment.