diff options
| author | Charles Harris <charlesr.harris@gmail.com> | 2018-02-08 19:55:41 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-08 19:55:41 -0700 |
| commit | 7c4c213c7aaaa9abf02d254e6347b7c664b459df (patch) | |
| tree | 3da9f4c9a8e15a3ae38220174d08829e014e4eda /numpy/lib/tests | |
| parent | b429be3d3904278d19b7bd4bf37431d8cc6ded1c (diff) | |
| parent | 1122303c1834eff71f9441901d1e85e74f200f93 (diff) | |
| download | numpy-7c4c213c7aaaa9abf02d254e6347b7c664b459df.tar.gz | |
Merge pull request #10324 from eric-wieser/histogram-range-comparison
BUG: Fix crashes when using float32 values in uniform histograms
Diffstat (limited to 'numpy/lib/tests')
| -rw-r--r-- | numpy/lib/tests/test_histograms.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/numpy/lib/tests/test_histograms.py b/numpy/lib/tests/test_histograms.py index 58547dc17..a2c684a20 100644 --- a/numpy/lib/tests/test_histograms.py +++ b/numpy/lib/tests/test_histograms.py @@ -299,6 +299,53 @@ class TestHistogram(object): assert_equal(d_edge.dtype, dates.dtype) assert_equal(t_edge.dtype, td) + def do_precision_lower_bound(self, float_small, float_large): + eps = np.finfo(float_large).eps + + arr = np.array([1.0], float_small) + range = np.array([1.0 + eps, 2.0], float_large) + + # test is looking for behavior when the bounds change between dtypes + if range.astype(float_small)[0] != 1: + return + + # previously crashed + count, x_loc = np.histogram(arr, bins=1, range=range) + assert_equal(count, [1]) + + # gh-10322 means that the type comes from arr - this may change + assert_equal(x_loc.dtype, float_small) + + def do_precision_upper_bound(self, float_small, float_large): + eps = np.finfo(float_large).eps + + arr = np.array([1.0], float_small) + range = np.array([0.0, 1.0 - eps], float_large) + + # test is looking for behavior when the bounds change between dtypes + if range.astype(float_small)[-1] != 1: + return + + # previously crashed + count, x_loc = np.histogram(arr, bins=1, range=range) + assert_equal(count, [1]) + + # gh-10322 means that the type comes from arr - this may change + assert_equal(x_loc.dtype, float_small) + + def do_precision(self, float_small, float_large): + self.do_precision_lower_bound(float_small, float_large) + self.do_precision_upper_bound(float_small, float_large) + + def test_precision(self): + # not looping results in a useful stack trace upon failure + self.do_precision(np.half, np.single) + self.do_precision(np.half, np.double) + self.do_precision(np.half, np.longdouble) + self.do_precision(np.single, np.double) + self.do_precision(np.single, np.longdouble) + self.do_precision(np.double, np.longdouble) + class TestHistogramOptimBinNums(object): """ |
