@@ -345,6 +345,34 @@ def test_learner1d_first_iteration():
345345 assert set (points ) == set (to_see )
346346
347347
348+ def _run_on_discontinuity (x_0 , bounds ):
349+
350+ def f (x ):
351+ return - 1 if x < x_0 else + 1
352+
353+ learner = Learner1D (f , bounds )
354+ while learner .loss () > 0.1 :
355+ (x ,), _ = learner .choose_points (1 )
356+ learner .add_point (x , learner .function (x ))
357+
358+ return learner
359+
360+
361+ def test_termination_on_discontinuities ():
362+
363+ learner = _run_on_discontinuity (0 , (- 1 , 1 ))
364+ smallest_interval = min (abs (a - b ) for a , b in learner .losses .keys ())
365+ assert smallest_interval >= np .finfo (float ).eps
366+
367+ learner = _run_on_discontinuity (1 , (- 2 , 2 ))
368+ smallest_interval = min (abs (a - b ) for a , b in learner .losses .keys ())
369+ assert smallest_interval >= np .finfo (float ).eps
370+
371+ learner = _run_on_discontinuity (0.5E3 , (- 1E3 , 1E3 ))
372+ smallest_interval = min (abs (a - b ) for a , b in learner .losses .keys ())
373+ assert smallest_interval >= 0.5E3 * np .finfo (float ).eps
374+
375+
348376@pytest .mark .xfail
349377@run_with (Learner1D , Learner2D )
350378def test_convergence_for_arbitrary_ordering (learner_type , f , learner_kwargs ):
0 commit comments