util: Add a simple junit test for the gem5 ops java wrapper.
authorGabe Black <gabe.black@gmail.com>
Fri, 23 Oct 2020 03:01:03 +0000 (20:01 -0700)
committerGabe Black <gabe.black@gmail.com>
Thu, 10 Dec 2020 11:20:00 +0000 (11:20 +0000)
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>

util/m5/README.md
util/m5/src/SConscript
util/m5/src/java/gem5/OpsTest.java [new file with mode: 0644]

index 941c499f6e4e179e0ab164dddc4d79bdff9f68c9..7d2d66bfd5db8cd6c1281ec1ead864b15c9e729e 100644 (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
 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
index 70c123a3ab99dda02b875039efb7d3a64032537c..5eabcc399f4cea587e052265dc50324c7e21329d 100644 (file)
@@ -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 (file)
index 0000000..6e855c9
--- /dev/null
@@ -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");
+    }
+}