Coverage for lasso/dyna/test_d3plot_header.py: 100%

42 statements  

« prev     ^ index     » next       coverage.py v7.2.4, created at 2023-04-28 18:42 +0100

1from unittest import TestCase 

2 

3import numpy as np 

4from lasso.dyna.d3plot_header import ( 

5 D3plotFiletype, 

6 D3plotHeader, 

7 d3plot_filetype_from_integer, 

8 get_digit, 

9) 

10from lasso.io.binary_buffer import BinaryBuffer 

11 

12 

13class D3plotHeaderTest(TestCase): 

14 def test_loading(self): 

15 

16 filepaths = [ 

17 "test/simple_d3plot/d3plot", 

18 "test/d3plot_node_temperature/d3plot", 

19 "test/d3plot_beamip/d3plot", 

20 "test/d3plot_solid_int/d3plot", 

21 ] 

22 

23 for filepath in filepaths: 

24 D3plotHeader().load_file(filepath) 

25 

26 # TODO more 

27 

28 def test_get_digit(self) -> None: 

29 

30 number = 1234567890 

31 

32 # the numbers are sorted from the lowest importance 

33 # upwards 

34 # 0 -> 0 

35 # 1 -> 9 

36 # ... 

37 number_str = str(number)[::-1] 

38 

39 for index in range(len(number_str)): 

40 digit = get_digit(number, index) 

41 self.assertEqual( 

42 digit, 

43 int(number_str[index]), 

44 f"index {index} digit {digit} digit_str {number_str[index]}", 

45 ) 

46 

47 self.assertEqual(get_digit(number, 10), 0) 

48 

49 def test_d3plot_filetype_from_integer(self) -> None: 

50 

51 self.assertEqual( 

52 d3plot_filetype_from_integer(1), 

53 D3plotFiletype.D3PLOT, 

54 ) 

55 self.assertEqual( 

56 d3plot_filetype_from_integer(5), 

57 D3plotFiletype.D3PART, 

58 ) 

59 self.assertEqual( 

60 d3plot_filetype_from_integer(11), 

61 D3plotFiletype.D3EIGV, 

62 ) 

63 

64 # INFOR is forbidden 

65 with self.assertRaises(ValueError): 

66 d3plot_filetype_from_integer(4) 

67 

68 with self.assertRaises(ValueError): 

69 d3plot_filetype_from_integer(0) 

70 

71 def test_determine_file_settings(self) -> None: 

72 

73 # the routine checks the "filetype" flag 

74 # if it makes any sense under any circumstances 

75 # we assume the corresponding file settings 

76 

77 # 44 -> int32 

78 # 88 -> int64 

79 for position in (44, 88): 

80 for filetype in (D3plotFiletype.D3PLOT, D3plotFiletype.D3PART, D3plotFiletype.D3EIGV): 

81 

82 bb = BinaryBuffer() 

83 bb.memoryview = memoryview(bytearray(256)) 

84 bb.write_number(position, filetype.value, np.int32) 

85 

86 word_size, itype, ftype = D3plotHeader._determine_file_settings(bb) 

87 

88 if position == 44: 

89 self.assertEqual(word_size, 4) 

90 self.assertEqual(itype, np.int32) 

91 self.assertEqual(ftype, np.float32) 

92 else: 

93 self.assertEqual(word_size, 8) 

94 self.assertEqual(itype, np.int64) 

95 self.assertEqual(ftype, np.float64) 

96 

97 # error 

98 bb = BinaryBuffer() 

99 bb.memoryview = memoryview(bytearray(256)) 

100 

101 with self.assertRaises(RuntimeError): 

102 D3plotHeader._determine_file_settings(bb)