Coverage for tests / tests_simulation / test_time_manager.py: 99%

99 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-09 16:40 +0100

1# SPDX-FileCopyrightText: Copyright INRIA 

2# 

3# SPDX-License-Identifier: LGPL-3.0-only 

4# 

5# Copyright INRIA 

6# 

7# This file is part of PhysioBlocks, a library mostly developed by the 

8# [Ananke project-team](https://team.inria.fr/ananke) at INRIA. 

9# 

10# Authors: 

11# - Colin Drieu 

12# - Dominique Chapelle 

13# - François Kimmig 

14# - Philippe Moireau 

15# 

16# PhysioBlocks is free software: you can redistribute it and/or modify it under the 

17# terms of the GNU Lesser General Public License as published by the Free Software 

18# Foundation, version 3 of the License. 

19# 

20# PhysioBlocks is distributed in the hope that it will be useful, but WITHOUT ANY 

21# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 

22# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 

23# 

24# You should have received a copy of the GNU Lesser General Public License along with 

25# PhysioBlocks. If not, see <https://www.gnu.org/licenses/>. 

26 

27import pytest 

28 

29from physioblocks.simulation.time_manager import Time, TimeManager 

30 

31 

32@pytest.fixture 

33def zero(): 

34 return 0.0 

35 

36 

37@pytest.fixture 

38def step(): 

39 return 0.1 

40 

41 

42@pytest.fixture 

43def end(): 

44 return 2.0 

45 

46 

47@pytest.fixture 

48def min_step(): 

49 return 0.001 

50 

51 

52class TestTime: 

53 def test_constructor(self, zero): 

54 time = Time(zero) 

55 assert time.current == pytest.approx(zero) 

56 assert time.new == pytest.approx(zero) 

57 assert time.dt == pytest.approx(zero) 

58 assert time.inv_dt == pytest.approx(zero) 

59 

60 def test_initialize(self, zero, step): 

61 time = Time(zero) 

62 time.initialize(step) 

63 

64 assert time.current == pytest.approx(step) 

65 assert time.new == pytest.approx(step) 

66 assert time.dt == pytest.approx(zero) 

67 assert time.inv_dt == pytest.approx(zero) 

68 

69 def test_update(self, zero, step): 

70 time = Time(zero) 

71 time.update(step) 

72 

73 assert time.current == pytest.approx(zero) 

74 assert time.new == pytest.approx(step) 

75 assert time.dt == pytest.approx(step) 

76 assert time.inv_dt == pytest.approx(1.0 / step) 

77 

78 def test_set(self, zero, step): 

79 time = Time(zero) 

80 

81 with pytest.raises(AttributeError): 

82 time.current = step 

83 

84 with pytest.raises(AttributeError): 

85 time.new = step 

86 

87 with pytest.raises(AttributeError): 

88 time.dt = step 

89 

90 with pytest.raises(AttributeError): 

91 time.inv_dt = step 

92 

93 

94class TestTimeManager: 

95 def test_constructor(self, zero, step, end): 

96 time_manager = TimeManager(zero, end, step) 

97 assert time_manager.ended is False 

98 assert time_manager.time.current == zero 

99 assert time_manager.time.new == zero 

100 

101 with pytest.raises(ValueError): 

102 time_manager = TimeManager(end, zero, step) 

103 

104 with pytest.raises(ValueError): 

105 time_manager = TimeManager(zero, end, -step) 

106 

107 with pytest.raises(AttributeError): 

108 time_manager.time = Time(zero) 

109 

110 with pytest.raises(ValueError): 

111 TimeManager(zero, end, step, 0.0) 

112 

113 with pytest.raises(ValueError): 

114 TimeManager(zero, end, step, step + 0.1) 

115 

116 def test_set(self, zero, step, end): 

117 time_manager = TimeManager( 

118 zero, 

119 end, 

120 step, 

121 ) 

122 

123 # start 

124 assert time_manager.start == zero 

125 time_manager.start = step 

126 assert time_manager.end == time_manager.duration + step 

127 assert time_manager.start == step 

128 

129 # step 

130 assert time_manager.step_size == step 

131 with pytest.raises(ValueError): 

132 time_manager.step_size = -step 

133 

134 # duration 

135 time_manager.duration = end + step 

136 assert time_manager.end == end + 2 * step 

137 with pytest.raises(ValueError): 

138 time_manager.duration = zero - step 

139 

140 def test_update(self, zero, step, end): 

141 time_manager = TimeManager(zero, end, step) 

142 

143 time_manager.update_time() 

144 assert time_manager.time.current == zero 

145 assert time_manager.time.new == step 

146 

147 time_manager.update_time() 

148 assert time_manager.time.current == step 

149 assert time_manager.time.new == (step + step) 

150 

151 def test_ended(self, zero, step): 

152 time_manager = TimeManager(zero, step, step) 

153 time_manager.update_time() 

154 assert time_manager.ended is True 

155 assert time_manager.time.current == zero 

156 assert time_manager.time.new == step 

157 

158 time_manager.update_time() 

159 assert time_manager.ended is True 

160 assert time_manager.time.current == step 

161 assert time_manager.time.new == step 

162 

163 def test_initialize(self, zero, step, end): 

164 time_manager = TimeManager(zero, step, end) 

165 time_manager.update_time() 

166 time_manager.update_time() 

167 time_manager.initialize() 

168 assert time_manager.time.current == zero 

169 assert time_manager.time.new == zero