Skip to content

Commit 959c6f2

Browse files
committed
write tests for bound_window and bound_range
1 parent cbbddf5 commit 959c6f2

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

tests/test_parameter.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
import unittest
1818

19+
import numpy as np
20+
import pytest
21+
1922
from diffpy.srfit.fitbase.parameter import (
2023
Parameter,
2124
ParameterAdapter,
@@ -121,5 +124,95 @@ def testWrapper(self):
121124
return
122125

123126

127+
@pytest.mark.parametrize(
128+
"lower, upper, expected",
129+
[
130+
# User sets both lower and upper bounds explicitly.
131+
(1, 10, [1, 10]),
132+
# User sets only a lower bound.
133+
(2, None, [2, np.inf]),
134+
# User sets only an upper bound.
135+
(None, 8, [-np.inf, 8]),
136+
# User overwrites existing bounds.
137+
(2, 6, [2, 6]),
138+
],
139+
)
140+
def test_bound_range(lower, upper, expected):
141+
p = Parameter("a", value=5)
142+
# If testing overwrite, pre-set bounds to see overwrite effect
143+
if expected == [2, 6]:
144+
p.bound_range(0, 10)
145+
p.bound_range(lower_bound=lower, upper_bound=upper)
146+
actual = p.bounds
147+
assert actual == expected
148+
149+
150+
@pytest.mark.parametrize(
151+
"lower, upper, expected",
152+
[
153+
# User sets both lower and upper bounds explicitly.
154+
(1, 10, [1, 10]),
155+
# User sets only a lower bound.
156+
(2, None, [2, np.inf]),
157+
# User sets only an upper bound.
158+
(None, 8, [-np.inf, 8]),
159+
# User overwrites existing bounds.
160+
(2, 6, [2, 6]),
161+
],
162+
)
163+
def test_boundRange(lower, upper, expected):
164+
p = Parameter("a", value=5)
165+
# If testing overwrite, pre-set bounds to see overwrite effect
166+
if expected == [2, 6]:
167+
p.boundRange(0, 10)
168+
p.boundRange(lower_bound=lower, upper_bound=upper)
169+
actual = p.bounds
170+
assert actual == expected
171+
172+
173+
@pytest.mark.parametrize(
174+
"value, lower_radius, upper_radius, expected",
175+
[
176+
# Symmetric radius (upper_radius None, uses lower_radius)
177+
(10, 2, None, [8, 12]),
178+
# Asymmetric radius
179+
(10, 3, 5, [7, 15]),
180+
# Zero radius
181+
(4, 0, None, [4, 4]),
182+
# Current value updated before bounding
183+
(20, 2, None, [18, 22]),
184+
],
185+
)
186+
def test_bound_window(value, lower_radius, upper_radius, expected):
187+
p = Parameter("a", value=5)
188+
if value != 5:
189+
p.set_value(value)
190+
p.bound_window(lower_radius=lower_radius, upper_radius=upper_radius)
191+
actual = p.bounds
192+
assert actual == expected
193+
194+
195+
@pytest.mark.parametrize(
196+
"value, lower_radius, upper_radius, expected",
197+
[
198+
# Symmetric radius (upper_radius None, uses lower_radius)
199+
(10, 2, None, [8, 12]),
200+
# Asymmetric radius
201+
(10, 3, 5, [7, 15]),
202+
# Zero radius
203+
(4, 0, None, [4, 4]),
204+
# Current value updated before bounding
205+
(20, 2, None, [18, 22]),
206+
],
207+
)
208+
def test_boundWindow(value, lower_radius, upper_radius, expected):
209+
p = Parameter("a", value=5)
210+
if value != 5:
211+
p.set_value(value)
212+
p.boundWindow(lr=lower_radius, ur=upper_radius)
213+
actual = p.bounds
214+
assert actual == expected
215+
216+
124217
if __name__ == "__main__":
125218
unittest.main()

0 commit comments

Comments
 (0)