File: test_enum.py

package info (click to toggle)
python-sdjson 0.5.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 560 kB
  • sloc: python: 1,566; makefile: 6; sh: 6
file content (144 lines) | stat: -rw-r--r-- 3,099 bytes parent folder | download
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# stdlib
from enum import Enum, IntEnum
from math import isnan

# this package
import sdjson

SMALL = 1
BIG = 1 << 32
HUGE = 1 << 64
REALLY_HUGE = 1 << 96


class BigNum(IntEnum):
	small = SMALL
	big = BIG
	huge = HUGE
	really_huge = REALLY_HUGE


E = 2.718281
PI = 3.141593
TAU = 2 * PI


class FloatNum(float, Enum):
	e = E
	pi = PI
	tau = TAU


INF = float("inf")
NEG_INF = float("-inf")
NAN = float("nan")


class WierdNum(float, Enum):
	inf = INF
	neg_inf = NEG_INF
	nan = NAN


def test_floats() -> None:
	for enum in FloatNum:
		assert sdjson.dumps(enum) == repr(enum.value)
		assert float(sdjson.dumps(enum)) == enum
		assert sdjson.loads(sdjson.dumps(enum)) == enum


def test_weird_floats() -> None:
	for enum, expected in zip(WierdNum, ("Infinity", "-Infinity", "NaN")):
		assert sdjson.dumps(enum) == expected
		if not isnan(enum):
			assert float(sdjson.dumps(enum)) == enum
			assert sdjson.loads(sdjson.dumps(enum)) == enum
		else:
			assert isnan(float(sdjson.dumps(enum)))
			assert isnan(sdjson.loads(sdjson.dumps(enum)))


def test_ints() -> None:
	for enum in BigNum:
		assert sdjson.dumps(enum) == str(enum.value)
		assert int(sdjson.dumps(enum)) == enum
		assert sdjson.loads(sdjson.dumps(enum)) == enum


def test_list() -> None:
	assert sdjson.dumps(list(BigNum)) == str([SMALL, BIG, HUGE, REALLY_HUGE])
	assert sdjson.loads(sdjson.dumps(list(BigNum))) == list(BigNum)
	assert sdjson.dumps(list(FloatNum)) == str([E, PI, TAU])
	assert sdjson.loads(sdjson.dumps(list(FloatNum))) == list(FloatNum)
	assert sdjson.dumps(list(WierdNum)) == "[Infinity, -Infinity, NaN]"
	assert sdjson.loads(sdjson.dumps(list(WierdNum)))[:2] == list(WierdNum)[:2]
	assert isnan(sdjson.loads(sdjson.dumps(list(WierdNum)))[2])


def test_dict_keys() -> None:
	s: int
	b: int
	h: int
	r: int
	e: float
	p: float
	t: float
	i: float
	j: float
	n: float

	s, b, h, r = BigNum  # type: ignore[misc]
	e, p, t = FloatNum  # type: ignore[misc]
	i, j, n = WierdNum  # type: ignore[misc]

	d = {
			s: "tiny",
			b: "large",
			h: "larger",
			r: "largest",
			e: "Euler's number",
			p: "pi",
			t: "tau",
			i: "Infinity",
			j: "-Infinity",
			n: "NaN",
			}

	nd = sdjson.loads(sdjson.dumps(d))

	assert nd[str(SMALL)] == "tiny"
	assert nd[str(BIG)] == "large"
	assert nd[str(HUGE)] == "larger"
	assert nd[str(REALLY_HUGE)] == "largest"
	assert nd[repr(E)] == "Euler's number"
	assert nd[repr(PI)] == "pi"
	assert nd[repr(TAU)] == "tau"
	assert nd["Infinity"] == "Infinity"
	assert nd["-Infinity"] == "-Infinity"
	assert nd["NaN"] == "NaN"


def test_dict_values() -> None:
	d = dict(
			tiny=BigNum.small,
			large=BigNum.big,
			larger=BigNum.huge,
			largest=BigNum.really_huge,
			e=FloatNum.e,
			pi=FloatNum.pi,
			tau=FloatNum.tau,
			i=WierdNum.inf,
			j=WierdNum.neg_inf,
			n=WierdNum.nan,
			)
	nd = sdjson.loads(sdjson.dumps(d))
	assert nd["tiny"] == SMALL
	assert nd["large"] == BIG
	assert nd["larger"] == HUGE
	assert nd["largest"] == REALLY_HUGE
	assert nd['e'] == E
	assert nd["pi"] == PI
	assert nd["tau"] == TAU
	assert nd['i'] == INF
	assert nd['j'] == NEG_INF
	assert isnan(nd['n'])