File: test_readable_numbers.py

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (151 lines) | stat: -rw-r--r-- 4,678 bytes parent folder | download | duplicates (3)
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
145
146
147
148
149
150
151
# fmt: off

import pytest
import subprocess
import sys
from typing import List
from conftest import ShellTest
import os

def test_readable_numbers(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering footer")
        .statement("select 59986052 as count, 123456789 as count2, 9999999999 count3, -9999999999 count4;")
    )
    result = test.run()
    result.check_stdout("(59.99 million)")
    result.check_stdout("(123.46 million)")
    result.check_stdout("(10.00 billion)")
    result.check_stdout("(-10.00 billion)")

@pytest.mark.parametrize('test_rounding', [False, True])
def test_readable_numbers_exhaustive(shell, test_rounding):
    query = "select "
    for i in range(1, 20):
        if i > 1:
            query += ", "
        if test_rounding:
            query += '9' * i
        else:
            query += '1' + ('0' * i)
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering all")
        .statement(".maxwidth 99999")
        .statement(query)
    )
    result = test.run()
    for unit in ['million', 'billion', 'trillion', 'quadrillion', 'quintillion']:
        for number in ['1.00', '10.00', '100.00']:
            if unit == 'quintillion' and number in ['10.00', '100.00']:
                continue
            result.check_stdout(number + " " + unit)

def test_readable_numbers_rounding(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering footer")
        .statement(".maxwidth 99999")
        .statement("select 1005000, 1004999, -1005000, -1004999;")
    )
    result = test.run()
    result.check_stdout("(1.01 million)")
    result.check_stdout("(1.00 million)")
    result.check_stdout("(-1.01 million)")
    result.check_stdout("(-1.00 million)")

def test_readable_rounding_edge_case(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering all")
        .statement(".maxwidth 99999")
        .statement("select 994999, 995000")
    )
    result = test.run()
    result.check_stdout("1.00 million")

def test_readable_numbers_limit(shell):
    test = (
        ShellTest(shell)
        .statement(".maxwidth 99999")
        .statement(".large_number_rendering all")
        .statement("select 18446744073709551616, -18446744073709551616, 9999999999999999999, -9999999999999999999;")
    )
    result = test.run()
    result.check_stdout("10.00 quintillion")
    result.check_stdout("-10.00 quintillion")

def test_decimal_separator(shell):
    test = (
        ShellTest(shell)
        .statement(".decimal_sep ,")
        .statement(".large_number_rendering all")
        .statement("select 59986052, 59986052.5, 999999999.123456789, 1e20, 'nan'::double;")
    )
    result = test.run()
    result.check_stdout("59,99 million")
    result.check_stdout("1,00 billion")

def test_odd_floating_points(shell):
    test = (
        ShellTest(shell)
        .statement("select 1e20, 'nan'::double;")
    )
    result = test.run()
    result.check_stdout("nan")

def test_disable_readable_numbers(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering off")
        .statement("select 123456789;")
    )
    result = test.run()
    result.check_not_exist('(123.46 million)')

def test_large_number_rendering_all(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering all")
        .statement("select 123456789 from range(10);")
    )
    result = test.run()
    result.check_stdout('123.46 million')
    result.check_not_exist('(123.46 million)')

def test_readable_numbers_columns(shell):
    test = (
        ShellTest(shell)
        .statement(".columns")
        .statement("select 123456789;")
    )
    result = test.run()
    result.check_not_exist('(123.46 million)')

def test_readable_numbers_row_count(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering footer")
        .statement("select r from range(1230000) t(r);")
    )
    result = test.run()
    result.check_stdout('1.23 million rows')

def test_readable_numbers_row_count_wide(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering footer")
        .statement("select r, r, r, r, r, r, r from range(1230000) t(r);")
    )
    result = test.run()
    result.check_stdout('1.23 million rows')

def test_readable_numbers_row_count_wide_single_col(shell):
    test = (
        ShellTest(shell)
        .statement(".large_number_rendering footer")
        .statement("select concat(r, r, r, r, r, r, r) c from range(1230000) t(r);")
    )
    result = test.run()
    result.check_stdout('1.23 million rows')