float.slt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/float
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. mode cockroach
  20. simple conn=mz_system,user=mz_system
  21. ALTER SYSTEM SET unsafe_enable_table_keys = true
  22. ----
  23. COMPLETE 0
  24. # -0 and 0 should not be possible in a unique index.
  25. statement ok
  26. CREATE TABLE p (f float null, unique index (f))
  27. statement ok
  28. INSERT INTO p VALUES (NULL), ('NaN'::float), ('Inf'::float), ('-Inf'::float), ('0'::float), (1), (-1)
  29. # -0 and 0 should both equate to zero with or without an index.
  30. statement error duplicate key value
  31. INSERT INTO p VALUES ('-0'::float)
  32. query R
  33. SELECT * FROM p WHERE f = 'NaN'
  34. ----
  35. NaN
  36. query RBBB
  37. SELECT f, f IS NaN, f = 'NaN', isnan(f) FROM p@{FORCE_INDEX=primary} ORDER BY 1
  38. ----
  39. NULL NULL NULL NULL
  40. NaN true true true
  41. -Inf false false false
  42. -1 false false false
  43. 0 false false false
  44. 1 false false false
  45. +Inf false false false
  46. query RBBB
  47. SELECT f, f IS NaN, f = 'NaN', isnan(f) FROM p@{FORCE_INDEX=p_f_key} ORDER BY 1
  48. ----
  49. NULL NULL NULL NULL
  50. NaN true true true
  51. -Inf false false false
  52. -1 false false false
  53. 0 false false false
  54. 1 false false false
  55. +Inf false false false
  56. query RB
  57. select f, f > 'NaN' from p@{FORCE_INDEX=primary} where f > 'NaN' ORDER BY f
  58. ----
  59. -Inf true
  60. -1 true
  61. 0 true
  62. 1 true
  63. +Inf true
  64. query RB
  65. select f, f > 'NaN' from p@{FORCE_INDEX=p_f_key} where f > 'NaN' ORDER BY f
  66. ----
  67. -Inf true
  68. -1 true
  69. 0 true
  70. 1 true
  71. +Inf true
  72. statement ok
  73. CREATE TABLE i (f float)
  74. statement ok
  75. INSERT INTO i VALUES (0), ('-0'::float)
  76. query R rowsort
  77. SELECT * FROM i WHERE f = 0
  78. ----
  79. -0
  80. 0
  81. statement ok
  82. CREATE INDEX ON i (f)
  83. query R rowsort
  84. SELECT * FROM i WHERE f = 0
  85. ----
  86. -0
  87. 0
  88. statement error violates unique constraint
  89. CREATE UNIQUE INDEX ON i (f)
  90. subtest extra_float_digits
  91. statement ok
  92. CREATE TABLE vals(f FLOAT);
  93. INSERT INTO vals VALUES (0.0), (123.4567890123456789), (12345678901234567890000), (0.0001234567890123456789)
  94. query RT rowsort
  95. SELECT f, f::string FROM vals
  96. ----
  97. 0 0
  98. 123.456789012346 123.456789012346
  99. 1.23456789012346e+22 1.23456789012346e+22
  100. 0.000123456789012346 0.000123456789012346
  101. statement ok
  102. SET extra_float_digits = 3
  103. query RT rowsort
  104. SELECT f, f::string FROM vals
  105. ----
  106. 0 0
  107. 123.45678901234568 123.45678901234568
  108. 1.2345678901234568e+22 1.2345678901234568e+22
  109. 0.00012345678901234567 0.00012345678901234567
  110. statement ok
  111. SET extra_float_digits = -8
  112. query RT rowsort
  113. SELECT f, f::string FROM vals
  114. ----
  115. 0 0
  116. 123.4568 123.4568
  117. 1.234568e+22 1.234568e+22
  118. 0.0001234568 0.0001234568
  119. statement ok
  120. SET extra_float_digits = -15
  121. query RT rowsort
  122. SELECT f, f::string FROM vals
  123. ----
  124. 0 0
  125. 100 1e+02
  126. 1e+22 1e+22
  127. 0.0001 0.0001
  128. statement ok
  129. DROP TABLE vals
  130. statement ok
  131. RESET extra_float_digits