# 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: t1}}
  do_test func4-3.3 {
    catchsql {
      INSERT INTO t1 (x) VALUES (NULL);
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.4 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.5 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('bad');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.6 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234bad');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.7 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234.56bad');
    }
  } {1 {CHECK constraint failed: t1}}
  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: t1}}
  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: t1}}
  do_test func4-3.12 {
    catchsql {
      INSERT INTO t1 (x) VALUES (ZEROBLOB(4));
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.13 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.14 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'1234');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.15 {
    catchsql {
      INSERT INTO t1 (x) VALUES (X'12345678');
    }
  } {1 {CHECK constraint failed: t1}}
  do_test func4-3.16 {
    catchsql {
      INSERT INTO t1 (x) VALUES ('1234.00');
    }
  } {1 {CHECK constraint failed: t1}}
  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');
    }
  } {1 {CHECK constraint failed: t1}}
  if {$highPrecision(1)} {
    do_test func4-3.19 {
      catchsql {
        INSERT INTO t1 (x) VALUES (9223372036854775808);
      }
    } {1 {CHECK constraint failed: t1}}
  }
  do_execsql_test func4-3.20 {
    SELECT x FROM t1 ORDER BY x;
  } {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: t2}}
    do_test func4-4.3 {
      catchsql {
        INSERT INTO t2 (x) VALUES (NULL);
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.4 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('');
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.5 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('bad');
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.6 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234bad');
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.7 {
      catchsql {
        INSERT INTO t2 (x) VALUES ('1234.56bad');
      }
    } {1 {CHECK constraint failed: t2}}
    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: t2}}
    do_test func4-4.13 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'');
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.14 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'1234');
      }
    } {1 {CHECK constraint failed: t2}}
    do_test func4-4.15 {
      catchsql {
        INSERT INTO t2 (x) VALUES (X'12345678');
      }
    } {1 {CHECK constraint failed: t2}}
    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
