# 2013 March 10
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library. The focus of
# this file is testing the tointeger() and toreal() functions.
#
# Several of the toreal() tests are disabled on platforms where floating
# point precision is not high enough to represent their constant integer
# expression arguments as double precision floating point values.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set saved_tcl_precision $tcl_precision
set tcl_precision 0
load_static_extension db totype

set highPrecision(1) [expr \
    {[db eval {SELECT tointeger(9223372036854775807 + 1);}] eq {{}}}]

do_execsql_test func4-1.1 {
  SELECT tointeger(NULL);
} {{}}
do_execsql_test func4-1.2 {
  SELECT tointeger('');
} {{}}
do_execsql_test func4-1.3 {
  SELECT tointeger('   ');
} {{}}
do_execsql_test func4-1.4 {
  SELECT tointeger('1234');
} {1234}
do_execsql_test func4-1.5 {
  SELECT tointeger('   1234');
} {{}}
do_execsql_test func4-1.6 {
  SELECT tointeger('bad');
} {{}}
do_execsql_test func4-1.7 {
  SELECT tointeger('0xBAD');
} {{}}
do_execsql_test func4-1.8 {
  SELECT tointeger('123BAD');
} {{}}
do_execsql_test func4-1.9 {
  SELECT tointeger('0x123BAD');
} {{}}
do_execsql_test func4-1.10 {
  SELECT tointeger('123NO');
} {{}}
do_execsql_test func4-1.11 {
  SELECT tointeger('0x123NO');
} {{}}
do_execsql_test func4-1.12 {
  SELECT tointeger('-0x1');
} {{}}
do_execsql_test func4-1.13 {
  SELECT tointeger('-0x0');
} {{}}
do_execsql_test func4-1.14 {
  SELECT tointeger('0x0');
} {{}}
do_execsql_test func4-1.15 {
  SELECT tointeger('0x1');
} {{}}
do_execsql_test func4-1.16 {
  SELECT tointeger(-1);
} {-1}
do_execsql_test func4-1.17 {
  SELECT tointeger(-0);
} {0}
do_execsql_test func4-1.18 {
  SELECT tointeger(0);
} {0}
do_execsql_test func4-1.19 {
  SELECT tointeger(1);
} {1}
do_execsql_test func4-1.20 {
  SELECT tointeger(-1.79769313486232e308 - 1);
} {{}}
do_execsql_test func4-1.21 {
  SELECT tointeger(-1.79769313486232e308);
} {{}}
do_execsql_test func4-1.22 {
  SELECT tointeger(-1.79769313486232e308 + 1);
} {{}}
do_execsql_test func4-1.23 {
  SELECT tointeger(-9223372036854775808 - 1);
} {-9223372036854775808}
do_execsql_test func4-1.24 {
  SELECT tointeger(-9223372036854775808);
} {-9223372036854775808}
do_execsql_test func4-1.25 {
  SELECT tointeger(-9223372036854775808 + 1);
} {-9223372036854775807}
do_execsql_test func4-1.26 {
  SELECT tointeger(-9223372036854775807 - 1);
} {-9223372036854775808}
do_execsql_test func4-1.27 {
  SELECT tointeger(-9223372036854775807);
} {-9223372036854775807}
do_execsql_test func4-1.28 {
  SELECT tointeger(-9223372036854775807 + 1);
} {-9223372036854775806}
do_execsql_test func4-1.29 {
  SELECT tointeger(-2147483648 - 1);
} {-2147483649}
do_execsql_test func4-1.30 {
  SELECT tointeger(-2147483648);
} {-2147483648}
do_execsql_test func4-1.31 {
  SELECT tointeger(-2147483648 + 1);
} {-2147483647}
do_execsql_test func4-1.32 {
  SELECT tointeger(2147483647 - 1);
} {2147483646}
do_execsql_test func4-1.33 {
  SELECT tointeger(2147483647);
} {2147483647}
do_execsql_test func4-1.34 {
  SELECT tointeger(2147483647 + 1);
} {2147483648}
do_execsql_test func4-1.35 {
  SELECT tointeger(9223372036854775807 - 1);
} {9223372036854775806}
do_execsql_test func4-1.36 {
  SELECT tointeger(9223372036854775807);
} {9223372036854775807}
if {$highPrecision(1)} {
  do_execsql_test func4-1.37 {
    SELECT tointeger(9223372036854775807 + 1);
  } {{}}
}
do_execsql_test func4-1.38 {
  SELECT tointeger(1.79769313486232e308 - 1);
} {{}}
do_execsql_test func4-1.39 {
  SELECT tointeger(1.79769313486232e308);
} {{}}
do_execsql_test func4-1.40 {
  SELECT tointeger(1.79769313486232e308 + 1);
} {{}}
do_execsql_test func4-1.41 {
  SELECT tointeger(4503599627370496 - 1);
} {4503599627370495}
do_execsql_test func4-1.42 {
  SELECT tointeger(4503599627370496);
} {4503599627370496}
do_execsql_test func4-1.43 {
  SELECT tointeger(4503599627370496 + 1);
} {4503599627370497}
do_execsql_test func4-1.44 {
  SELECT tointeger(9007199254740992 - 1);
} {9007199254740991}
do_execsql_test func4-1.45 {
  SELECT tointeger(9007199254740992);
} {9007199254740992}
do_execsql_test func4-1.46 {
  SELECT tointeger(9007199254740992 + 1);
} {9007199254740993}
do_execsql_test func4-1.47 {
  SELECT tointeger(9223372036854775807 - 1);
} {9223372036854775806}
do_execsql_test func4-1.48 {
  SELECT tointeger(9223372036854775807);
} {9223372036854775807}
if {$highPrecision(1)} {
  do_execsql_test func4-1.49 {
    SELECT tointeger(9223372036854775807 + 1);
  } {{}}
  do_execsql_test func4-1.50 {
    SELECT tointeger(9223372036854775808 - 1);
  } {{}}
  do_execsql_test func4-1.51 {
    SELECT tointeger(9223372036854775808);
  } {{}}
  do_execsql_test func4-1.52 {
    SELECT tointeger(9223372036854775808 + 1);
  } {{}}
}
do_execsql_test func4-1.53 {
  SELECT tointeger(18446744073709551616 - 1);
} {{}}
do_execsql_test func4-1.54 {
  SELECT tointeger(18446744073709551616);
} {{}}
do_execsql_test func4-1.55 {
  SELECT tointeger(18446744073709551616 + 1);
} {{}}

ifcapable floatingpoint {
  set highPrecision(2) [expr \
      {[db eval {SELECT toreal(-9223372036854775808 + 1);}] eq {{}}}]

  do_execsql_test func4-2.1 {
    SELECT toreal(NULL);
  } {{}}
  do_execsql_test func4-2.2 {
    SELECT toreal('');
  } {{}}
  do_execsql_test func4-2.3 {
    SELECT toreal('   ');
  } {{}}
  do_execsql_test func4-2.4 {
    SELECT toreal('1234');
  } {1234.0}
  do_execsql_test func4-2.5 {
    SELECT toreal('   1234');
  } {{}}
  do_execsql_test func4-2.6 {
    SELECT toreal('bad');
  } {{}}
  do_execsql_test func4-2.7 {
    SELECT toreal('0xBAD');
  } {{}}
  do_execsql_test func4-2.8 {
    SELECT toreal('123BAD');
  } {{}}
  do_execsql_test func4-2.9 {
    SELECT toreal('0x123BAD');
  } {{}}
  do_execsql_test func4-2.10 {
    SELECT toreal('123NO');
  } {{}}
  do_execsql_test func4-2.11 {
    SELECT toreal('0x123NO');
  } {{}}
  do_execsql_test func4-2.12 {
    SELECT toreal('-0x1');
  } {{}}
  do_execsql_test func4-2.13 {
    SELECT toreal('-0x0');
  } {{}}
  do_execsql_test func4-2.14 {
    SELECT toreal('0x0');
  } {{}}
  do_execsql_test func4-2.15 {
    SELECT toreal('0x1');
  } {{}}
  do_execsql_test func4-2.16 {
    SELECT toreal(-1);
  } {-1.0}
  do_execsql_test func4-2.17 {
    SELECT toreal(-0);
  } {0.0}
  do_execsql_test func4-2.18 {
    SELECT toreal(0);
  } {0.0}
  do_execsql_test func4-2.19 {
    SELECT toreal(1);
  } {1.0}
  do_execsql_test func4-2.20 {
    SELECT toreal(-1.79769313486232e308 - 1);
  } {-Inf}
  do_execsql_test func4-2.21 {
    SELECT toreal(-1.79769313486232e308);
  } {-Inf}
  do_execsql_test func4-2.22 {
    SELECT toreal(-1.79769313486232e308 + 1);
  } {-Inf}
  do_execsql_test func4-2.23 {
    SELECT toreal(-9223372036854775808 - 1);
  } {-9.223372036854776e+18}
  do_execsql_test func4-2.24 {
    SELECT toreal(-9223372036854775808);
  } {-9.223372036854776e+18}
  if {$highPrecision(2)} {
    do_execsql_test func4-2.25 {
      SELECT toreal(-9223372036854775808 + 1);
    } {{}}
  }
  do_execsql_test func4-2.26 {
    SELECT toreal(-9223372036854775807 - 1);
  } {-9.223372036854776e+18}
  if {$highPrecision(2)} {
    do_execsql_test func4-2.27 {
      SELECT toreal(-9223372036854775807);
    } {{}}
    do_execsql_test func4-2.28 {
      SELECT toreal(-9223372036854775807 + 1);
    } {{}}
  }
  do_execsql_test func4-2.29 {
    SELECT toreal(-2147483648 - 1);
  } {-2147483649.0}
  do_execsql_test func4-2.30 {
    SELECT toreal(-2147483648);
  } {-2147483648.0}
  do_execsql_test func4-2.31 {
    SELECT toreal(-2147483648 + 1);
  } {-2147483647.0}
  do_execsql_test func4-2.32 {
    SELECT toreal(2147483647 - 1);
  } {2147483646.0}
  do_execsql_test func4-2.33 {
    SELECT toreal(2147483647);
  } {2147483647.0}
  do_execsql_test func4-2.34 {
    SELECT toreal(2147483647 + 1);
  } {2147483648.0}
  if {$highPrecision(2)} {
    do_execsql_test func4-2.35 {
      SELECT toreal(9223372036854775807 - 1);
    } {{}}
    if {$highPrecision(1)} {
      do_execsql_test func4-2.36 {
        SELECT toreal(9223372036854775807);
      } {{}}
    }
  }
  do_execsql_test func4-2.37 {
    SELECT toreal(9223372036854775807 + 1);
  } {9.223372036854776e+18}
  do_execsql_test func4-2.38 {
    SELECT toreal(1.79769313486232e308 - 1);
  } {Inf}
  do_execsql_test func4-2.39 {
    SELECT toreal(1.79769313486232e308);
  } {Inf}
  do_execsql_test func4-2.40 {
    SELECT toreal(1.79769313486232e308 + 1);
  } {Inf}
  do_execsql_test func4-2.41 {
    SELECT toreal(4503599627370496 - 1);
  } {4503599627370495.0}
  do_execsql_test func4-2.42 {
    SELECT toreal(4503599627370496);
  } {4503599627370496.0}
  do_execsql_test func4-2.43 {
    SELECT toreal(4503599627370496 + 1);
  } {4503599627370497.0}
  do_execsql_test func4-2.44 {
    SELECT toreal(9007199254740992 - 1);
  } {9007199254740991.0}
  do_execsql_test func4-2.45 {
    SELECT toreal(9007199254740992);
  } {9007199254740992.0}
  if {$highPrecision(2)} {
    do_execsql_test func4-2.46 {
      SELECT toreal(9007199254740992 + 1);
    } {{}}
  }
  do_execsql_test func4-2.47 {
    SELECT toreal(9007199254740992 + 2);
  } {9007199254740994.0}
  do_execsql_test func4-2.48 {
    SELECT toreal(tointeger(9223372036854775808) - 1);
  } {{}}
  if {$highPrecision(1)} {
    do_execsql_test func4-2.49 {
      SELECT toreal(tointeger(9223372036854775808));
    } {{}}
    do_execsql_test func4-2.50 {
      SELECT toreal(tointeger(9223372036854775808) + 1);
    } {{}}
  }
  do_execsql_test func4-2.51 {
    SELECT toreal(tointeger(18446744073709551616) - 1);
  } {{}}
  do_execsql_test func4-2.52 {
    SELECT toreal(tointeger(18446744073709551616));
  } {{}}
  do_execsql_test func4-2.53 {
    SELECT toreal(tointeger(18446744073709551616) + 1);
  } {{}}
}

ifcapable check {
  do_execsql_test func4-3.1 {
    CREATE TABLE t1(
      x INTEGER CHECK(tointeger(x) IS NOT NULL)
    );
  } {}
  do_test func4-3.2 {
    catchsql {
      INSERT INTO t1 (x) VALUES (NULL);
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.3 {
    catchsql {
      INSERT INTO t1 (x) VALUES (NULL);
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.4 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.5 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('bad');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.6 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234bad');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.7 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234.56bad');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.8 {
    catchsql {
      INSERT INTO t1 (x) VALUES (1234);
    }
  } {0 {}}
  do_test func4-3.9 {
    catchsql {
      INSERT INTO t1 (x) VALUES (1234.56);
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.10 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234');
    }
  } {0 {}}
  do_test func4-3.11 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234.56');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.12 {
    catchsql {
      INSERT INTO t1 (x) VALUES (ZEROBLOB(4));
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.13 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.14 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'1234');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.15 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'12345678');
    }
  } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  do_test func4-3.16 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234.00');
    }
  } {0 {}}
  do_test func4-3.17 {
    catchsql {
      INSERT INTO t1 (x) VALUES (1234.00);
    }
  } {0 {}}
  do_test func4-3.18 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('-9223372036854775809');
    }
  } {0 {}}
  if {$highPrecision(1)} {
    do_test func4-3.19 {
      catchsql {
        INSERT INTO t1 (x) VALUES (9223372036854775808);
      }
    } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}}
  }
  do_execsql_test func4-3.20 {
    SELECT x FROM t1 WHERE x>0 ORDER BY x;
  } {1234 1234 1234 1234}

  ifcapable floatingpoint {
    do_execsql_test func4-4.1 {
      CREATE TABLE t2(
        x REAL CHECK(toreal(x) IS NOT NULL)
      );
    } {}
    do_test func4-4.2 {
      catchsql {
        INSERT INTO t2 (x) VALUES (NULL);
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.3 {
      catchsql {
        INSERT INTO t2 (x) VALUES (NULL);
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.4 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.5 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('bad');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.6 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234bad');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.7 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234.56bad');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.8 {
      catchsql {
        INSERT INTO t2 (x) VALUES (1234);
      }
    } {0 {}}
    do_test func4-4.9 {
      catchsql {
        INSERT INTO t2 (x) VALUES (1234.56);
      }
    } {0 {}}
    do_test func4-4.10 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234');
      }
    } {0 {}}
    do_test func4-4.11 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234.56');
      }
    } {0 {}}
    do_test func4-4.12 {
      catchsql {
        INSERT INTO t2 (x) VALUES (ZEROBLOB(4));
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.13 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.14 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'1234');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_test func4-4.15 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'12345678');
      }
    } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}}
    do_execsql_test func4-4.16 {
      SELECT x FROM t2 ORDER BY x;
    } {1234.0 1234.0 1234.56 1234.56}
  }
}

ifcapable floatingpoint {
  do_execsql_test func4-5.1 {
    SELECT tointeger(toreal('1234'));
  } {1234}
  do_execsql_test func4-5.2 {
    SELECT tointeger(toreal(-1));
  } {-1}
  do_execsql_test func4-5.3 {
    SELECT tointeger(toreal(-0));
  } {0}
  do_execsql_test func4-5.4 {
    SELECT tointeger(toreal(0));
  } {0}
  do_execsql_test func4-5.5 {
    SELECT tointeger(toreal(1));
  } {1}
  do_execsql_test func4-5.6 {
    SELECT tointeger(toreal(-9223372036854775808 - 1));
  } {-9223372036854775808}
  do_execsql_test func4-5.7 {
    SELECT tointeger(toreal(-9223372036854775808));
  } {-9223372036854775808}
  if {$highPrecision(2)} {
    do_execsql_test func4-5.8 {
      SELECT tointeger(toreal(-9223372036854775808 + 1));
    } {{}}
  }
  do_execsql_test func4-5.9 {
    SELECT tointeger(toreal(-2147483648 - 1));
  } {-2147483649}
  do_execsql_test func4-5.10 {
    SELECT tointeger(toreal(-2147483648));
  } {-2147483648}
  do_execsql_test func4-5.11 {
    SELECT tointeger(toreal(-2147483648 + 1));
  } {-2147483647}
  do_execsql_test func4-5.12 {
    SELECT tointeger(toreal(2147483647 - 1));
  } {2147483646}
  do_execsql_test func4-5.13 {
    SELECT tointeger(toreal(2147483647));
  } {2147483647}
  do_execsql_test func4-5.14 {
    SELECT tointeger(toreal(2147483647 + 1));
  } {2147483648}
  do_execsql_test func4-5.15 {
    SELECT tointeger(toreal(9223372036854775807 - 1));
  } {{}}
  if {$highPrecision(1)} {
    do_execsql_test func4-5.16 {
      SELECT tointeger(toreal(9223372036854775807));
    } {{}}
    do_execsql_test func4-5.17 {
      SELECT tointeger(toreal(9223372036854775807 + 1));
    } {{}}
  }
  do_execsql_test func4-5.18 {
    SELECT tointeger(toreal(4503599627370496 - 1));
  } {4503599627370495}
  do_execsql_test func4-5.19 {
    SELECT tointeger(toreal(4503599627370496));
  } {4503599627370496}
  do_execsql_test func4-5.20 {
    SELECT tointeger(toreal(4503599627370496 + 1));
  } {4503599627370497}
  do_execsql_test func4-5.21 {
    SELECT tointeger(toreal(9007199254740992 - 1));
  } {9007199254740991}
  do_execsql_test func4-5.22 {
    SELECT tointeger(toreal(9007199254740992));
  } {9007199254740992}
  if {$highPrecision(2)} {
    do_execsql_test func4-5.23 {
      SELECT tointeger(toreal(9007199254740992 + 1));
    } {{}}
  }
  do_execsql_test func4-5.24 {
    SELECT tointeger(toreal(9007199254740992 + 2));
  } {9007199254740994}
  if {$highPrecision(1)} {
    do_execsql_test func4-5.25 {
      SELECT tointeger(toreal(9223372036854775808 - 1));
    } {{}}
    do_execsql_test func4-5.26 {
      SELECT tointeger(toreal(9223372036854775808));
    } {{}}
    do_execsql_test func4-5.27 {
      SELECT tointeger(toreal(9223372036854775808 + 1));
    } {{}}
  }
  do_execsql_test func4-5.28 {
    SELECT tointeger(toreal(18446744073709551616 - 1));
  } {{}}
  do_execsql_test func4-5.29 {
    SELECT tointeger(toreal(18446744073709551616));
  } {{}}
  do_execsql_test func4-5.30 {
    SELECT tointeger(toreal(18446744073709551616 + 1));
  } {{}}
}

for {set i 0} {$i < 10} {incr i} {
  if {$i == 8} continue
  do_execsql_test func4-6.1.$i.1 [subst {
    SELECT tointeger(x'[string repeat 01 $i]');
  }] {{}}
  ifcapable floatingpoint {
    do_execsql_test func4-6.1.$i.2 [subst {
      SELECT toreal(x'[string repeat 01 $i]');
    }] {{}}
  }
}

do_execsql_test func4-6.2.1 {
  SELECT tointeger(x'0102030405060708');
} {578437695752307201}
do_execsql_test func4-6.2.2 {
  SELECT tointeger(x'0807060504030201');
} {72623859790382856}

ifcapable floatingpoint {
  do_execsql_test func4-6.3.1 {
    SELECT toreal(x'ffefffffffffffff');
  } {-1.7976931348623157e+308}
  do_execsql_test func4-6.3.2 {
    SELECT toreal(x'8010000000000000');
  } {-2.2250738585072014e-308}
  do_execsql_test func4-6.3.3 {
    SELECT toreal(x'c000000000000000');
  } {-2.0}
  do_execsql_test func4-6.3.4 {
    SELECT toreal(x'bff0000000000000');
  } {-1.0}
  do_execsql_test func4-6.3.5 {
    SELECT toreal(x'8000000000000000');
  } {-0.0}
  do_execsql_test func4-6.3.6 {
    SELECT toreal(x'0000000000000000');
  } {0.0}
  do_execsql_test func4-6.3.7 {
    SELECT toreal(x'3ff0000000000000');
  } {1.0}
  do_execsql_test func4-6.3.8 {
    SELECT toreal(x'4000000000000000');
  } {2.0}
  do_execsql_test func4-6.3.9 {
    SELECT toreal(x'0010000000000000');
  } {2.2250738585072014e-308}
  do_execsql_test func4-6.3.10 {
    SELECT toreal(x'7fefffffffffffff');
  } {1.7976931348623157e+308}
  do_execsql_test func4-6.3.11 {
    SELECT toreal(x'8000000000000001');
  } {-5e-324}
  do_execsql_test func4-6.3.12 {
    SELECT toreal(x'800fffffffffffff');
  } {-2.225073858507201e-308}
  do_execsql_test func4-6.3.13 {
    SELECT toreal(x'0000000000000001');
  } {5e-324}
  do_execsql_test func4-6.3.14 {
    SELECT toreal(x'000fffffffffffff');
  } {2.225073858507201e-308}
  do_execsql_test func4-6.3.15 {
    SELECT toreal(x'fff0000000000000');
  } {-Inf}
  do_execsql_test func4-6.3.16 {
    SELECT toreal(x'7ff0000000000000');
  } {Inf}
  do_execsql_test func4-6.3.17 {
    SELECT toreal(x'fff8000000000000');
  } {{}}
  do_execsql_test func4-6.3.18 {
    SELECT toreal(x'fff0000000000001');
  } {{}}
  do_execsql_test func4-6.3.19 {
    SELECT toreal(x'fff7ffffffffffff');
  } {{}}
  do_execsql_test func4-6.3.20 {
    SELECT toreal(x'7ff0000000000001');
  } {{}}
  do_execsql_test func4-6.3.21 {
    SELECT toreal(x'7ff7ffffffffffff');
  } {{}}
  do_execsql_test func4-6.3.22 {
    SELECT toreal(x'fff8000000000001');
  } {{}}
  do_execsql_test func4-6.3.23 {
    SELECT toreal(x'ffffffffffffffff');
  } {{}}
  do_execsql_test func4-6.3.24 {
    SELECT toreal(x'7ff8000000000000');
  } {{}}
  do_execsql_test func4-6.3.25 {
    SELECT toreal(x'7fffffffffffffff');
  } {{}}
}

set tcl_precision $saved_tcl_precision
unset saved_tcl_precision
finish_test
