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')
|