diff --git a/tests/test_tally_nuclides/geometry.xml b/tests/test_tally_nuclides/geometry.xml
new file mode 100644
index 000000000..65954a785
--- /dev/null
+++ b/tests/test_tally_nuclides/geometry.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ |
+ |
+
+
diff --git a/tests/test_tally_nuclides/materials.xml b/tests/test_tally_nuclides/materials.xml
new file mode 100644
index 000000000..2761be30c
--- /dev/null
+++ b/tests/test_tally_nuclides/materials.xml
@@ -0,0 +1,13 @@
+
+
+
+ 71c
+
+
+
+
+
+
+
+
+
diff --git a/tests/test_tally_nuclides/results.py b/tests/test_tally_nuclides/results.py
new file mode 100644
index 000000000..93371960a
--- /dev/null
+++ b/tests/test_tally_nuclides/results.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+
+import sys
+import numpy as np
+
+# import statepoint
+sys.path.append('../../src/utils')
+import statepoint
+
+# read in statepoint file
+if len(sys.argv) > 1:
+ sp = statepoint.StatePoint(sys.argv[1])
+else:
+ sp = statepoint.StatePoint('statepoint.10.binary')
+sp.read_results()
+
+# extract tally results and convert to vector
+results = sp.tallies[0].results
+shape = results.shape
+size = (np.product(shape))
+results = np.reshape(results, size)
+
+# set up output string
+outstr = ''
+
+# write out k-combined
+outstr += 'k-combined:\n'
+outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1])
+
+# write out tally results
+outstr += 'tallies:\n'
+for item in results:
+ outstr += "{0:12.6E}\n".format(item)
+
+# write results to file
+with open('results_test.dat','w') as fh:
+ fh.write(outstr)
diff --git a/tests/test_tally_nuclides/results_true.dat b/tests/test_tally_nuclides/results_true.dat
new file mode 100644
index 000000000..ce7400500
--- /dev/null
+++ b/tests/test_tally_nuclides/results_true.dat
@@ -0,0 +1,19 @@
+k-combined:
+9.914201E-01 3.310472E-02
+tallies:
+7.251620E+00
+1.056750E+01
+1.649542E+00
+5.462124E-01
+1.598276E+00
+5.127366E-01
+5.602079E+00
+6.310407E+00
+7.251620E+00
+1.056750E+01
+1.649542E+00
+5.462124E-01
+1.598276E+00
+5.127366E-01
+5.602079E+00
+6.310407E+00
diff --git a/tests/test_tally_nuclides/settings.xml b/tests/test_tally_nuclides/settings.xml
new file mode 100644
index 000000000..b2ddb4248
--- /dev/null
+++ b/tests/test_tally_nuclides/settings.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ 10
+ 5
+ 100
+
+
+
+
+ point
+ 0.0 0.0 0.0
+
+
+
+
diff --git a/tests/test_tally_nuclides/tallies.xml b/tests/test_tally_nuclides/tallies.xml
new file mode 100644
index 000000000..d8c294de1
--- /dev/null
+++ b/tests/test_tally_nuclides/tallies.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ all
+ total absorption fission scatter
+
+
+
diff --git a/tests/test_tally_nuclides/test_tally_nuclides.py b/tests/test_tally_nuclides/test_tally_nuclides.py
new file mode 100644
index 000000000..bcc3f8a81
--- /dev/null
+++ b/tests/test_tally_nuclides/test_tally_nuclides.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python
+
+import os
+from subprocess import Popen, STDOUT, PIPE, call
+import filecmp
+import glob
+from optparse import OptionParser
+
+parser = OptionParser()
+parser.add_option('--mpi_exec', dest='mpi_exec', default='')
+parser.add_option('--mpi_np', dest='mpi_np', default='3')
+parser.add_option('--exe', dest='exe')
+(opts, args) = parser.parse_args()
+cwd = os.getcwd()
+
+def test_run():
+ if opts.mpi_exec != '':
+ proc = Popen([opts.mpi_exec, '-np', opts.mpi_np, opts.exe, cwd],
+ stderr=STDOUT, stdout=PIPE)
+ else:
+ proc = Popen([opts.exe, cwd], stderr=STDOUT, stdout=PIPE)
+ print(proc.communicate()[0])
+ returncode = proc.returncode
+ assert returncode == 0, 'OpenMC did not exit successfully.'
+
+def test_created_statepoint():
+ statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
+ assert len(statepoint) == 1, 'Either multiple or no statepoint files exist.'
+ assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5'),\
+ 'Statepoint file is not a binary or hdf5 file.'
+
+def test_results():
+ statepoint = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
+ call(['python', 'results.py', statepoint[0]])
+ compare = filecmp.cmp('results_test.dat', 'results_true.dat')
+ if not compare:
+ os.rename('results_test.dat', 'results_error.dat')
+ assert compare, 'Results do not agree.'
+
+def teardown():
+ output = glob.glob(os.path.join(cwd, 'statepoint.10.*'))
+ output.append(os.path.join(cwd, 'results_test.dat'))
+ for f in output:
+ if os.path.exists(f):
+ os.remove(f)
+
+if __name__ == '__main__':
+
+ # test for openmc executable
+ if opts.exe is None:
+ raise Exception('Must specify OpenMC executable from command line with --exe.')
+
+ # run tests
+ test_run()
+ test_created_statepoint()
+ test_results()
+ teardown()