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)