sqlite/test/round1.test
drh ef7d5187a7 Improved rounding even on systems with an 8-byte "long double" type.
FossilOrigin-Name: 15202aee150fa8e15fb90e90e5765c5e19a1eaf4896da2996a747636b76da8e6
2019-05-27 00:29:15 +00:00

42 lines
1.3 KiB
Plaintext

# 2019-05-24
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
# Test cases for rounding behavior of floating point values.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix round1
expr srand(0)
unset -nocomplain iTest
for {set iTest 1} {$iTest<=50000} {incr iTest} {
set x1 [expr int(rand()*100000)]
set x2 [expr int(rand()*100000)+1000*int(rand()*10000)]
set n [expr int(rand()*8)+1]
set x3 [string range [format %09d $x2] [expr {9-$n}] end]
set r $x1.$x3
set ans [string trimright $r 0]
if {[string match *. $ans]} {set ans ${ans}0}
do_test $iTest/$n/${r}4=>$ans {
set x [db one "SELECT round(${r}4,$n)"]
} $ans
set x4 [string range [format %09d [expr {$x2+1}]] [expr {9-$n}] end]
if {[string trim $x3 9]==""} {incr x1}
set r2 $x1.$x4
set ans [string trimright $r2 0]
if {[string match *. $ans]} {set ans ${ans}0}
do_test $iTest/$n/${r}5=>$ans {
set x [db one "SELECT round(${r}5,$n)"]
} $ans
}
finish_test