#!/usr/bin/python from PIPRes.nexus.parser import * from PIPRes.testing import silentAssertRaises import unittest class ParseNexusNumberTest(unittest.TestCase): def testSimplePositive(self): simpleList = ['2', '2.5', '1.', '.3'] self.assertEqual(str(iterNexusTokenizeStr('2').nextInteger()), '2') self.assertEqual(str(iterNexusTokenizeStr("'2'").nextInteger()), '2') for s in simpleList: self.assertEqual(str(iterNexusTokenizeStr(s).nextFloat()), s) self.assertEqual(str(iterNexusTokenizeStr("'%s'" % s).nextFloat()), s) def testNegative(self): self.assertEqual(str(iterNexusTokenizeStr('-2').nextInteger()), '-2') self.assertEqual(str(iterNexusTokenizeStr("'-2'").nextInteger()), '-2') simpleList = ['-2', '-2.5', '-1.', '-.3'] for s in simpleList: self.assertEqual(str(iterNexusTokenizeStr(s).nextFloat()), s) self.assertEqual(str(iterNexusTokenizeStr("'%s'" % s).nextFloat()), s) def testFailIntToFloat(self): silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextInteger, iterNexusTokenizeStr('2.5')) silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextInteger, iterNexusTokenizeStr("'2.5'")) def testFailCharToFloat(self): silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextInteger, iterNexusTokenizeStr('b')) silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextFloat, iterNexusTokenizeStr('b')) def testSciNotation(self): simpleList = ['-2', '-2.5', '-1.', '-.3'] suffixes = ['e1', 'E1', 'e15156', 'E26436', 'e-1', 'E-1', 'e-15156', 'E26436'] for suf in suffixes: for pref in simpleList: s = pref + suf self.assertEqual(str(iterNexusTokenizeStr(s).nextFloat()), s) self.assertEqual(str(iterNexusTokenizeStr("'%s'" % s).nextFloat()), s) badSuffix = ['b', 'ee1', 'e--1' , 'e 1', 'e -2', '..2', '.3', 'e.1', 'e1e2', 'e-1.2', 'e1.2', 'e-.2'] for suf in badSuffix: for pref in simpleList: s = pref + suf if s != '-2.3': silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextFloat, iterNexusTokenizeStr(s)) silentAssertRaises(self, NexusMissingTokenError, NexusTokenStream.nextFloat, iterNexusTokenizeStr("'%s'" % s)) self.assertEqual(str(iterNexusTokenizeStr('2.5 e1').nextFloat()), '2.5') def testConsecutiveNumbers(self): stream = iterNexusTokenizeStr('2.5-3.5') self.assertEqual(str(stream.nextFloat()), '2.5') self.assertEqual(str(stream.nextFloat()), '-3.5') ''' >>> getNexusTokens('j s -12.3e-8') ['j', 's', '-', '12.3e', '-', '8'] ''' if __name__ == '__main__': unittest.main()