1SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
2    (VALUES (10::bigint), (1000::bigint), (1000000::bigint),
3            (1000000000::bigint), (1000000000000::bigint),
4            (1000000000000000::bigint)) x(size);
5
6SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
7    (VALUES (10::numeric), (1000::numeric), (1000000::numeric),
8            (1000000000::numeric), (1000000000000::numeric),
9            (1000000000000000::numeric),
10            (10.5::numeric), (1000.5::numeric), (1000000.5::numeric),
11            (1000000000.5::numeric), (1000000000000.5::numeric),
12            (1000000000000000.5::numeric)) x(size);
13
14SELECT size, pg_size_bytes(size) FROM
15    (VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '),
16            ('1TB'), ('3000 TB'), ('1e6 MB')) x(size);
17
18-- case-insensitive units are supported
19SELECT size, pg_size_bytes(size) FROM
20    (VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '),
21            ('1tb'), ('3000 tb'), ('1e6 mb')) x(size);
22
23-- negative numbers are supported
24SELECT size, pg_size_bytes(size) FROM
25    (VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '),
26            ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size);
27
28-- different cases with allowed points
29SELECT size, pg_size_bytes(size) FROM
30     (VALUES ('-1.'), ('-1.kb'), ('-1. kb'), ('-0. gb'),
31             ('-.1'), ('-.1kb'), ('-.1 kb'), ('-.0 gb')) x(size);
32
33-- invalid inputs
34SELECT pg_size_bytes('1 AB');
35SELECT pg_size_bytes('1 AB A');
36SELECT pg_size_bytes('1 AB A    ');
37SELECT pg_size_bytes('9223372036854775807.9');
38SELECT pg_size_bytes('1e100');
39SELECT pg_size_bytes('1e1000000000000000000');
40SELECT pg_size_bytes('1 byte');  -- the singular "byte" is not supported
41SELECT pg_size_bytes('');
42
43SELECT pg_size_bytes('kb');
44SELECT pg_size_bytes('..');
45SELECT pg_size_bytes('-.');
46SELECT pg_size_bytes('-.kb');
47SELECT pg_size_bytes('-. kb');
48
49SELECT pg_size_bytes('.+912');
50SELECT pg_size_bytes('+912+ kB');
51SELECT pg_size_bytes('++123 kB');
52