diff --git a/tools/python/pizza/log.py b/tools/python/pizza/log.py index 92190ec929..794898e28a 100644 --- a/tools/python/pizza/log.py +++ b/tools/python/pizza/log.py @@ -71,6 +71,7 @@ class log: self.names = [] self.ptr = {} self.data = [] + self.style = -1 # flist = list of all log file names diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index a1fcce635c..0aebc6fc7c 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -108,6 +108,11 @@ if(Python_EXECUTABLE) WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) set_tests_properties(PythonFormats PROPERTIES ENVIRONMENT "${PYTHON_TEST_ENVIRONMENT}") + add_test(NAME PythonPizza + COMMAND ${PYTHON_TEST_RUNNER} ${CMAKE_CURRENT_SOURCE_DIR}/python-pizza.py -v + WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) + set_tests_properties(PythonPizza PROPERTIES ENVIRONMENT "${PYTHON_TEST_ENVIRONMENT}") + add_test(NAME PythonFixExternal COMMAND ${PYTHON_TEST_RUNNER} ${CMAKE_CURRENT_SOURCE_DIR}/python-fix-external.py -v WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) diff --git a/unittest/python/python-pizza.py b/unittest/python/python-pizza.py new file mode 100644 index 0000000000..5773b0c430 --- /dev/null +++ b/unittest/python/python-pizza.py @@ -0,0 +1,125 @@ +import os +import sys +import unittest +from lammps import lammps + +EXAMPLES_DIR=os.path.abspath(os.path.join(__file__, '..', '..', '..', 'examples')) +PIZZA_DIR=os.path.abspath(os.path.join(__file__, '..', '..', '..', 'tools', 'python', 'pizza')) +DEFAULT_STYLE_EXAMPLE_LOG=os.path.join('melt', 'log.*.melt.g++.1') +MULTI_STYLE_EXAMPLE_LOG=os.path.join('peptide', 'log.27Nov18.peptide.g++.1') +sys.path.insert(1,PIZZA_DIR) + +import dump +import log + +class Logfiles(unittest.TestCase): + def testLogFileNotFound(self): + with self.assertRaises(ValueError): + l = log.log('test.log') + + def testDefaultLogFile(self): + l = log.log(os.path.join(EXAMPLES_DIR, DEFAULT_STYLE_EXAMPLE_LOG)) + self.assertEqual(l.nvec, 6) + self.assertEqual(l.nlen, 6) + self.assertEqual(l.style, 2) + self.assertEqual(l.increment, 0) + n = l.names + self.assertEqual(len(n), 6) + self.assertIn("Step", n) + self.assertIn("Temp", n) + self.assertIn("E_pair", n) + self.assertIn("E_mol", n) + self.assertIn("TotEng", n) + self.assertIn("Press", n) + s = l.get("Step") + self.assertEqual(0.0, s[0]) + self.assertEqual(50.0, s[1]) + self.assertEqual(100.0, s[2]) + self.assertEqual(150.0, s[3]) + self.assertEqual(200.0, s[4]) + self.assertEqual(250.0, s[5]) + t,m = l.get("Temp", "E_mol") + self.assertEqual(t[0],3.0) + self.assertEqual(m[2],0.0) + l.write("all.txt",0) + l.write("some.txt",1,"Step","Temp","Press") + + with self.assertRaises(Exception): + t = l.next() + + os.remove('all.txt') + os.remove('some.txt') + + def testIncrementalLogFile(self): + l = log.log(os.path.join(EXAMPLES_DIR, DEFAULT_STYLE_EXAMPLE_LOG), 0) + self.assertEqual(l.style, -1) + self.assertEqual(l.nvec, 0) + self.assertEqual(l.increment, 1) + t = l.next() + self.assertEqual(l.style, 2) + self.assertEqual(l.nvec, 6) + + def testMultiLogFile(self): + l = log.log(os.path.join(EXAMPLES_DIR, MULTI_STYLE_EXAMPLE_LOG)) + self.assertEqual(l.nvec, 14) + self.assertEqual(l.nlen, 7) + self.assertEqual(l.style, 1) + n = l.names + self.assertEqual(len(n), 14) + self.assertIn("Step", n) + self.assertIn("CPU", n) + self.assertIn("TotEng", n) + self.assertIn("KinEng", n) + self.assertIn("Temp", n) + self.assertIn("PotEng", n) + self.assertIn("E_bond", n) + self.assertIn("E_angle", n) + self.assertIn("E_dihed", n) + self.assertIn("E_impro", n) + self.assertIn("E_vdwl", n) + self.assertIn("E_coul", n) + self.assertIn("E_long", n) + self.assertIn("Press", n) + s = l.get("Step") + self.assertEqual(0.0, s[0]) + self.assertEqual(50.0, s[1]) + self.assertEqual(100.0, s[2]) + self.assertEqual(150.0, s[3]) + self.assertEqual(200.0, s[4]) + self.assertEqual(250.0, s[5]) + self.assertEqual(300.0, s[6]) + v,c = l.get("E_vdwl", "E_coul") + self.assertEqual(v[0],692.8945) + self.assertEqual(c[0],26772.2646) + l.write("all.txt",0) + l.write("some.txt",1,"Step","Temp","Press") + + with self.assertRaises(ValueError): + v = l.get("Volume") + with self.assertRaises(Exception): + t = l.next() + + os.remove('all.txt') + os.remove('some.txt') + +class PythonDump(unittest.TestCase): + def setUp(self): + machine = None + if 'LAMMPS_MACHINE_NAME' in os.environ: + machine=os.environ['LAMMPS_MACHINE_NAME'] + self.lmp = lammps(name=machine, cmdargs=['-nocite', '-log', 'none', '-echo', 'screen']) + + def tearDown(self): + del self.lmp + + def testDumpCustom(self): + dumpfile = os.path.join(os.path.abspath('.'), 'dump.custom') + self.lmp.command('shell cd ' + os.environ['TEST_INPUT_DIR']) + self.lmp.command("newton on on") + self.lmp.file("in.fourmol") + self.lmp.command("dump 1 all custom 2 " + dumpfile + " id type mol q x y z vx vy vz") + self.lmp.command("dump_modify 1 time yes units yes") + self.lmp.command("run 4 post no") + +if __name__ == "__main__": + unittest.main()