util: Add a simple junit test for the gem5 ops java wrapper.

If possible, this gets built into the jar which also holds the wrapper.
It can be run on its own through its own main function, or through the
junit mechanism directly.

Change-Id: Iaec7f6deb26bbad75da027c71edca50ef25697cf
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28181
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Gabe Black <gabe.black@gmail.com>
This commit is contained in:
Gabe Black
2020-10-22 20:01:03 -07:00
parent 97aa8425d6
commit 742acde59a
3 changed files with 63 additions and 1 deletions

View File

@@ -223,6 +223,10 @@ will catch attempts to use them and verify that they were used correctly. When
running these tests under gem5, set the RUNNING_IN_GEM5 environment variable running these tests under gem5, set the RUNNING_IN_GEM5 environment variable
which will tell the test to expect the trigger mechanism to actually work. which will tell the test to expect the trigger mechanism to actually work.
A junit test exists for the Java jar, in a file named 'OpsTest.java'. That test
can be run on its own through its own main function, or through the junit
framework.
# Command line utility # Command line utility

View File

@@ -97,13 +97,17 @@ if env['HAVE_JAVA']:
# A wrapper to make the m5 ops available in Java through the JNI. # A wrapper to make the m5 ops available in Java through the JNI.
# #
java_env = shared_env.Clone() java_env = shared_env.Clone()
pkg_dir = Dir('java').Dir('gem5')
srcs = [ pkg_dir.File('Ops.java') ]
if java_env['HAVE_JUNIT']:
srcs.append(pkg_dir.File('OpsTest.java'))
# SCons provides Java and JavaH builders, but the JavaH builder assumes # SCons provides Java and JavaH builders, but the JavaH builder assumes
# that the javah tool exists. Java has dropped that tool in favor of a -h # that the javah tool exists. Java has dropped that tool in favor of a -h
# option on javac which the Java builder doesn't know how to use. To get # option on javac which the Java builder doesn't know how to use. To get
# around this, we set up our own builder which does the "right thing" here. # around this, we set up our own builder which does the "right thing" here.
java_env.Command([ Dir('java').File('gem5_Ops.h'), java_env.Command([ Dir('java').File('gem5_Ops.h'),
Dir('out').Dir('java').File('gem5Ops.jar') ], Dir('out').Dir('java').File('gem5Ops.jar') ],
Dir('java').Dir('gem5').File('Ops.java'), srcs,
MakeAction([ MakeAction([
'${JAVAC} ${JAVACFLAGS} -d ${OUT} ' '${JAVAC} ${JAVACFLAGS} -d ${OUT} '
'${SOURCES} -h ${JAVA_DIR}', '${SOURCES} -h ${JAVA_DIR}',

View File

@@ -0,0 +1,54 @@
/*
* Copyright 2020 Google Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met: redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer;
* redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution;
* neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package gem5;
import org.junit.*;
import static org.junit.Assert.*;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import gem5.Ops;
public class OpsTest {
@Test
public void m5SumShouldReturnSum() {
gem5.Ops gem5_ops = new gem5.Ops();
long a = 1, b = 2, c = 3, d = 4, e = 5, f = 6;
long sum = gem5_ops.sum(a, b, c, d, e, f);
assertEquals(a + b + c + d + e + f, sum);
}
public static void main(String[] args) {
org.junit.runner.JUnitCore.main("gem5.OpsTest");
}
}