int2.sql 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --
  2. -- INT2
  3. --
  4. CREATE TABLE INT2_TBL(f1 int2);
  5. INSERT INTO INT2_TBL(f1) VALUES ('0 ');
  6. INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
  7. INSERT INTO INT2_TBL(f1) VALUES (' -1234');
  8. INSERT INTO INT2_TBL(f1) VALUES ('34.5');
  9. -- largest and smallest values
  10. INSERT INTO INT2_TBL(f1) VALUES ('32767');
  11. INSERT INTO INT2_TBL(f1) VALUES ('-32767');
  12. -- bad input values -- should give errors
  13. INSERT INTO INT2_TBL(f1) VALUES ('100000');
  14. INSERT INTO INT2_TBL(f1) VALUES ('asdf');
  15. INSERT INTO INT2_TBL(f1) VALUES (' ');
  16. INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
  17. INSERT INTO INT2_TBL(f1) VALUES ('4 444');
  18. INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
  19. INSERT INTO INT2_TBL(f1) VALUES ('');
  20. SELECT * FROM INT2_TBL;
  21. SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0';
  22. SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0';
  23. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int2 '0';
  24. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int4 '0';
  25. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int2 '0';
  26. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int4 '0';
  27. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0';
  28. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0';
  29. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int2 '0';
  30. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int4 '0';
  31. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0';
  32. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0';
  33. -- positive odds
  34. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
  35. -- any evens
  36. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
  37. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
  38. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
  39. WHERE abs(f1) < 16384;
  40. SELECT i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
  41. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
  42. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
  43. WHERE f1 < 32766;
  44. SELECT i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
  45. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
  46. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
  47. WHERE f1 > -32767;
  48. SELECT i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
  49. SELECT i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
  50. SELECT i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i;
  51. -- corner cases
  52. SELECT (-1::int2<<15)::text;
  53. SELECT ((-1::int2<<15)+1::int2)::text;
  54. -- check sane handling of INT16_MIN overflow cases
  55. SELECT (-32768)::int2 * (-1)::int2;
  56. SELECT (-32768)::int2 / (-1)::int2;
  57. SELECT (-32768)::int2 % (-1)::int2;
  58. -- check rounding when casting from float
  59. SELECT x, x::int2 AS int2_value
  60. FROM (VALUES (-2.5::float8),
  61. (-1.5::float8),
  62. (-0.5::float8),
  63. (0.0::float8),
  64. (0.5::float8),
  65. (1.5::float8),
  66. (2.5::float8)) t(x);
  67. -- check rounding when casting from numeric
  68. SELECT x, x::int2 AS int2_value
  69. FROM (VALUES (-2.5::numeric),
  70. (-1.5::numeric),
  71. (-0.5::numeric),
  72. (0.0::numeric),
  73. (0.5::numeric),
  74. (1.5::numeric),
  75. (2.5::numeric)) t(x);