3
0
mirror of https://github.com/triqs/dft_tools synced 2024-11-14 18:13:49 +01:00
dft_tools/test/plovasp/plocar_io/test_fileio.py
Oleg E. Peil f86038a7fd Fixed tests to make them runnable with build pytriqs
All imports inside the test cases refer now to paths relative
to TRIQS python library path. For example,

`import vaspio`

is replaced with

`import applications.dft.converters.plovasp.vasio`

In this way all tests can be executed wtih `build_pytriqs` provided
that the package is installed (the same practice as with other
'dft_tools' tests).

Also, the underscore can now be removed from subdirectory names
because there is no more conflict with module names.
2016-03-10 12:24:05 +01: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)