3
0
mirror of https://github.com/triqs/dft_tools synced 2024-07-01 17:06:04 +02:00
dft_tools/python/converters/vasp/test/_plocar_io/test_fileio.py
Oleg E. Peil db16a8438d Restructed test directory
The names of the test suites have been prefixed with an underscore
to avoid name conflicts with corresponding modules.
Also an attempt to make a scan of all tests has been made by
creating a 'test_all.py' script that is supposed to discover all
test cases and run them. Unfortunately, this does not work as expected
because many tests use input files assumed to be found in the current
directory, which is not true if the tests are run from a different
(parent) directory.

This can be fixed by either forcing the change of directory (but it
seems that 'unittest' does not have this functionality) or
prepending input file names with the current module directory.
2015-10-11 13:57:46 +02:00

94 lines
3.0 KiB
Python

r"""
Tests of 'read_plocar()' from module 'plocar_io.c_plocar_io'
"""
import mytest
import numpy as np
from plocar_io.c_plocar_io import read_plocar
################################################################################
#
# TestFileIO
#
################################################################################
class TestFileIO(mytest.MyTestCase):
"""
Function:
def read_plocar(filename)
Scenarios:
- **if** file PLOCAR does not exist **raise** IOError
- **if** PLOCAR is truncated **raise** IOError
- **if** the precision flag is not 4 or 8 **raise** ValueError
- **if** PLOCAR with prec=8 is read **compare** the output
- **if** PLOCAR with prec=4 is read **compare** the output
"""
# Scenario 1
def test_no_plocar(self):
err_mess = "Error opening xPLOCAR"
with self.assertRaisesRegexp(IOError, err_mess):
read_plocar('xPLOCAR')
# Scenario 2
def test_end_of_file(self):
err_mess = "End-of-file reading"
with self.assertRaisesRegexp(IOError, err_mess):
read_plocar('PLOCAR.trunc')
# Scenario 3
def test_wrong_prec(self):
err_mess = "only 'prec = 4, 8' are supported"
with self.assertRaisesRegexp(ValueError, err_mess):
read_plocar('PLOCAR.noprec')
# Scenario 4
def test_plocar_prec8(self):
pars, plo, ferw = read_plocar('PLOCAR.prec8')
nion, ns, nk, nb, nlm = plo.shape
test_file = 'PLOCAR.prec8.out.test'
with open(test_file, 'wt') as f:
f.write(" nlm =%5i\n"%(nlm))
ion = 1
isp = 1
for ik in xrange(nk):
for ib in xrange(nb):
f.write("%5i%5i%5i%5i%10.5f\n"%(ion, isp, ik+1, ib+1, ferw[0, 0, ik, ib]))
for ilm in xrange(nlm):
p = plo[0, 0, ik, ib, ilm]
f.write("%5i%15.7f%15.7f\n"%(ilm+1, p.real, p.imag))
expected_file = 'PLOCAR.prec8.out'
self.assertFileEqual(test_file, expected_file)
# Scenario 5
def test_plocar_example(self):
pars, plo, ferw = read_plocar('PLOCAR.example')
nion, ns, nk, nb, nlm = plo.shape
self.assertEqual(pars['nion'], nion)
self.assertEqual(pars['ns'], ns)
self.assertEqual(pars['nk'], nk)
self.assertEqual(pars['nb'], nb)
test_file = 'PLOCAR.example.out.test'
with open(test_file, 'wt') as f:
f.write("pars: %s\n"%(pars))
for ion in xrange(nion):
for isp in xrange(ns):
for ik in xrange(nk):
for ib in xrange(nb):
f.write("%5i%5i%5i%5i %s\n"%(ion+1, isp+1, ik+1, ib+1,
ferw[ion, isp, ik, ib]))
for ilm in xrange(nlm):
p = plo[ion, isp, ik, ib, ilm]
f.write("%5i %s\n"%(ilm+1, p))
expected_file = 'PLOCAR.example.out'
self.assertFileEqual(test_file, expected_file)