From 742acde59a8cf6d05bb613eec422b16b0b3ccbde Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 22 Oct 2020 20:01:03 -0700 Subject: [PATCH] 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 Reviewed-by: Bobby R. Bruce Maintainer: Gabe Black --- util/m5/README.md | 4 +++ util/m5/src/SConscript | 6 +++- util/m5/src/java/gem5/OpsTest.java | 54 ++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 util/m5/src/java/gem5/OpsTest.java diff --git a/util/m5/README.md b/util/m5/README.md index 941c499f6..7d2d66bfd 100644 --- a/util/m5/README.md +++ b/util/m5/README.md @@ -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 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 diff --git a/util/m5/src/SConscript b/util/m5/src/SConscript index 70c123a3a..5eabcc399 100644 --- a/util/m5/src/SConscript +++ b/util/m5/src/SConscript @@ -97,13 +97,17 @@ if env['HAVE_JAVA']: # A wrapper to make the m5 ops available in Java through the JNI. # 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 # 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 # around this, we set up our own builder which does the "right thing" here. java_env.Command([ Dir('java').File('gem5_Ops.h'), Dir('out').Dir('java').File('gem5Ops.jar') ], - Dir('java').Dir('gem5').File('Ops.java'), + srcs, MakeAction([ '${JAVAC} ${JAVACFLAGS} -d ${OUT} ' '${SOURCES} -h ${JAVA_DIR}', diff --git a/util/m5/src/java/gem5/OpsTest.java b/util/m5/src/java/gem5/OpsTest.java new file mode 100644 index 000000000..6e855c929 --- /dev/null +++ b/util/m5/src/java/gem5/OpsTest.java @@ -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"); + } +} -- 2.30.2