dft_tools/test/plovasp/plocar_io/test_fileio.py

94 lines
3.1 KiB
Python

r"""
Tests of 'read_plocar()' from module 'plocar_io.c_plocar_io'
"""
import mytest
import numpy as np
from triqs_dft_tools.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)