xref: /sqlite-3.40.0/test/round1.test (revision c59b7b1f)
1# 2019-05-24
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# Test cases for rounding behavior of floating point values.
12#
13
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16set testprefix round1
17
18expr srand(0)
19unset -nocomplain iTest
20for {set iTest 1} {$iTest<=50000} {incr iTest} {
21   set x1 [expr int(rand()*100000)]
22   set x2 [expr int(rand()*100000)+1000*int(rand()*10000)]
23   set n [expr int(rand()*8)+1]
24   set x3 [string range [format %09d $x2] [expr {9-$n}] end]
25   set r $x1.$x3
26   set ans [string trimright $r 0]
27   if {[string match *. $ans]} {set ans ${ans}0}
28   do_test $iTest/$n/${r}4=>$ans {
29     set x [db one "SELECT round(${r}4,$n)"]
30   } $ans
31   set x4 [string range [format %09d [expr {$x2+1}]] [expr {9-$n}] end]
32   if {[string trim $x3 9]==""} {incr x1}
33   set r2 $x1.$x4
34   set ans [string trimright $r2 0]
35   if {[string match *. $ans]} {set ans ${ans}0}
36   do_test $iTest/$n/${r}5=>$ans {
37     set x [db one "SELECT round(${r}5,$n)"]
38   } $ans
39}
40
41finish_test
42