should be it
This commit is contained in:
151
external/duckdb/tools/shell/tests/test_readable_numbers.py
vendored
Normal file
151
external/duckdb/tools/shell/tests/test_readable_numbers.py
vendored
Normal file
@@ -0,0 +1,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')
|
||||
Reference in New Issue
Block a user