File size: 1,833 Bytes
de2a6e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
42
"""Offline contracts only: no weights, model cache, or inference claims."""
import json
import unittest
from contracts import caption_rows, coordinate_rows, top_k_value


class InputContracts(unittest.TestCase):
    def test_captions(self):
        self.assertEqual(caption_rows('["China",{"id":"jp","text":"Japan"}]'),
                         [{"id": "0", "text": "China"}, {"id": "jp", "text": "Japan"}])

    def test_caption_bounds(self):
        for raw in ('[]', '{}', 'invalid', '[""]', json.dumps(['x'] * 101),
                    '[{"id":"same","text":"a"},{"id":"same","text":"b"}]',
                    json.dumps(['x' * 501]), '[{"text":"a","extra":1}]'):
            with self.subTest(raw=raw[:60]), self.assertRaises(ValueError):
                caption_rows(raw)

    def test_coordinates(self):
        self.assertEqual(coordinate_rows('[{"id":"zero","lat":0,"lon":0}]'),
                         [{"id": "zero", "lat": 0.0, "lon": 0.0}])
        self.assertEqual(coordinate_rows('[{"lat":90,"lon":-180}]')[0]['lat'], 90.0)

    def test_invalid_coordinates(self):
        for raw in ('[{"lat":91,"lon":1}]', '[{"lat":1,"lon":181}]',
                    '[{"lat":NaN,"lon":1}]', '[{"lat":Infinity,"lon":1}]',
                    '[{"lat":true,"lon":1}]', '[{"lat":"1","lon":1}]',
                    '[{"lat":1}]', '[{"lat":1,"lon":1,"unknown":"x"}]'):
            with self.subTest(raw=raw), self.assertRaises(ValueError):
                coordinate_rows(raw)

    def test_topk(self):
        self.assertEqual(top_k_value(20.0), 20)
        self.assertEqual(top_k_value(1), 1)
        for value in (0, 21, -1, 1.1, True, "5", float('inf'), float('nan')):
            with self.subTest(value=value), self.assertRaises(ValueError):
                top_k_value(value)


if __name__ == '__main__':
    unittest.main()