1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import unittest
from numpy import argmin
from random import choice, sample
from datetime import datetime, timedelta
from GeoSpatialTools import find_nearest
from GeoSpatialTools.neighbours import SortedError, SortedWarning
class TestFindNearest(unittest.TestCase):
dates = [
datetime(2009, 1, 1, 0, 0) + timedelta(seconds=i * 3600)
for i in range(365 * 24)
]
test_dates = sample(dates, 150)
test_dates = [
d + timedelta(seconds=60 * choice(range(60))) for d in test_dates
]
test_dates.append(dates[0])
test_dates.append(dates[-1])
test_dates.append(datetime(2004, 11, 15, 17, 28))
test_dates.append(datetime(2013, 4, 22, 1, 41))
def test_nearest(self):
greedy = [
argmin([abs(x - y) for x in self.dates]) for y in self.test_dates
]
ours = find_nearest(self.dates, self.test_dates)
assert ours == greedy
def test_sorted_warn(self):
with self.assertWarns(SortedWarning):
find_nearest([1., 2., 3.], 2.3, check_sorted=False)
def test_sorted_error(self):
with self.assertRaises(SortedError):
find_nearest([3., 1., 2.], 2.3)
if __name__ == "__main__":
unittest.main()