-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgen_fp2conv_tests.py
More file actions
executable file
·45 lines (38 loc) · 1.9 KB
/
Copy pathgen_fp2conv_tests.py
File metadata and controls
executable file
·45 lines (38 loc) · 1.9 KB
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
43
44
#!/usr/bin/env python3
"""Generates C test cases from JSON.
Author, Copyright, and License
------------------------------
Copyright (c) 2022 Hauke Daempfling (haukex@zero-g.net)
at the Leibniz Institute of Freshwater Ecology and Inland Fisheries (IGB),
Berlin, Germany, https://www.igb-berlin.de/
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/
"""
import json
from pathlib import Path
with open(Path(__file__).resolve().parent/'tests.json') as ifh:
tests = [ t for t in json.load(ifh) if not isinstance(t, str) ]
with open(Path(__file__).resolve().parent/'test_fp2conv_tests.inc.c','w') as ofh:
print('// ***** DO NOT EDIT *****\n'
f'// This file is generated by {Path(__file__).name}\n'
f'#define NUM_TESTS ({len(tests)})\n'
'// test string format:\n'
'// [0]: "P"=strtofp2 only, "S"=fp2tostr only, "R"=both\n'
'// [1-2]: the FP2 value\n'
'// [3]: a space character\n'
'// [4-]: the string\n'
'char *TEST[NUM_TESTS] = {', file=ofh)
for t,f,s in tests:
if t not in ('P','S','R'): raise ValueError(f"invalid test type: {t!r}")
if len(f)!=4 or not 0<=int(f,16)<=0xFFFF: raise ValueError(f"invalid fp2 value: {f!r}")
if not isinstance(s,str) or '"' in s: raise ValueError(f"invalid string: {s!r}")
print(f'\t"{t}\\x{f[0:2]}\\x{f[2:4]} {s}",',file=ofh)
print('};', file=ofh)