From 52a34a845ee6eeedee7741f54858d0970e6a5b40 Mon Sep 17 00:00:00 2001
From: Amul Sul <sulamul@gmail.com>
Date: Tue, 22 Aug 2017 14:06:50 +0530
Subject: [PATCH 2/2] test-Hash_functions

---
 src/test/regress/expected/hash_func.out | 167 ++++++++++++++++++++++++++++++++
 src/test/regress/parallel_schedule      |   2 +-
 src/test/regress/sql/hash_func.sql      |  48 +++++++++
 3 files changed, 216 insertions(+), 1 deletion(-)
 create mode 100644 src/test/regress/expected/hash_func.out
 create mode 100644 src/test/regress/sql/hash_func.sql

diff --git a/src/test/regress/expected/hash_func.out b/src/test/regress/expected/hash_func.out
new file mode 100644
index 0000000..b926bbf
--- /dev/null
+++ b/src/test/regress/expected/hash_func.out
@@ -0,0 +1,167 @@
+--
+-- Test hash functions
+--
+SELECT hashint2(837::int2), hashint2extended(837::int2, 0), hashint2extended(837::int2, 6877457);
+  hashint2  |   hashint2extended   |   hashint2extended   
+------------+----------------------+----------------------
+ -828119691 | -7711785034027113099 | -1911879269318603603
+(1 row)
+
+SELECT hashint4(837), hashint4extended(837, 0), hashint4extended(837, 6877457);
+  hashint4  |   hashint4extended   |   hashint4extended   
+------------+----------------------+----------------------
+ -828119691 | -7711785034027113099 | -1911879269318603603
+(1 row)
+
+SELECT hashint8(837), hashint8extended(837, 0), hashint8extended(837, 6877457);
+  hashint8  |   hashint8extended   |   hashint8extended   
+------------+----------------------+----------------------
+ -828119691 | -7711785034027113099 | -1911879269318603603
+(1 row)
+
+SELECT hashfloat4(837.576), hashfloat4extended(837.576, 0), hashfloat4extended(837.576, 6877457);
+ hashfloat4  | hashfloat4extended  |  hashfloat4extended  
+-------------+---------------------+----------------------
+ -1248506800 | 5445423874677492816 | -7666025229379580075
+(1 row)
+
+SELECT hashfloat8(837.576), hashfloat8extended(837.576, 0), hashfloat8extended(837.576, 6877457);
+ hashfloat8 | hashfloat8extended  | hashfloat8extended  
+------------+---------------------+---------------------
+   22809674 | 6692304374340521034 | 3015132189621834995
+(1 row)
+
+SELECT hashoid(445), hashoidextended(445, 0), hashoidextended(445, 6877457);
+ hashoid  |   hashoidextended    |   hashoidextended    
+----------+----------------------+----------------------
+ 89651167 | -3499471517977675809 | -6835125710780429670
+(1 row)
+
+SELECT hashchar('x'), hashcharextended('x', 0), hashcharextended('x', 6877457);
+  hashchar   |  hashcharextended   |   hashcharextended   
+-------------+---------------------+----------------------
+ -1072653310 | -300249585504183294 | -1689974060427644062
+(1 row)
+
+SELECT hashname('PostgreSQL'), hashnameextended('PostgreSQL', 0), hashnameextended('PostgreSQL', 6877457);
+  hashname   |   hashnameextended   |   hashnameextended   
+-------------+----------------------+----------------------
+ -1696465276 | -5770657681951818108 | -6237257254085129499
+(1 row)
+
+SELECT hashtext('PostgreSQL'), hashtextextended('PostgreSQL', 0), hashtextextended('PostgreSQL', 6877457);
+  hashtext   |   hashtextextended   |   hashtextextended   
+-------------+----------------------+----------------------
+ -1696465276 | -5770657681951818108 | -6237257254085129499
+(1 row)
+
+--SELECT hashvarlena(internal_type??), hashvarlenaextended(internal type??, 0), hashvarlenaextended(internal type??, 6877457);
+SELECT hashoidvector('1 2 3 4 5 6 7 8'), hashoidvectorextended('1 2 3 4 5 6 7 8', 0),
+	   hashoidvectorextended('1 2 3 4 5 6 7 8', 6877457);
+ hashoidvector | hashoidvectorextended | hashoidvectorextended 
+---------------+-----------------------+-----------------------
+    1162769288 |  -8958777976966712440 |   5137409721967698705
+(1 row)
+
+-- SELECT hash_aclitem(relacl[1]), hash_aclitem_extended(relacl[1], 0), hash_aclitem_extended(relacl[1], 6877457)
+-- FROM pg_class LIMIT 1;
+SELECT hashmacaddr('08:00:2b:01:02:04'), hashmacaddrextended('08:00:2b:01:02:04', 0),
+	   hashmacaddrextended('08:00:2b:01:02:04', 6877457);
+ hashmacaddr | hashmacaddrextended  | hashmacaddrextended  
+-------------+----------------------+----------------------
+  1310037952 | -1891888588126840896 | -7646251794294615557
+(1 row)
+
+SELECT hashmacaddr8('08:00:2b:01:02:03:04:05'), hashmacaddr8extended('08:00:2b:01:02:03:04:05', 0),
+	   hashmacaddr8extended('08:00:2b:01:02:03:04:05', 6877457);
+ hashmacaddr8 | hashmacaddr8extended | hashmacaddr8extended 
+--------------+----------------------+----------------------
+   -445665214 | -5218702474190278590 |  -230507670101060516
+(1 row)
+
+SELECT hashinet('192.168.100.128/25'), hashinetextended('192.168.100.128/25', 0),
+	   hashinetextended('192.168.100.128/25', 6877457);
+  hashinet  |  hashinetextended   |  hashinetextended   
+------------+---------------------+---------------------
+ 1612896565 | 8936096150078019893 | 6997678326324099600
+(1 row)
+
+SELECT hash_numeric(149484958.204628457), hash_numeric_extended(149484958.204628457, 0),
+	   hash_numeric_extended(149484958.204628457, 6877457);
+ hash_numeric | hash_numeric_extended | hash_numeric_extended 
+--------------+-----------------------+-----------------------
+   -744679049 |  -7302423428854900361 |   1216807249137458925
+(1 row)
+
+SELECT hash_array('{1,2,3,4,5,6,7,8}'::int2[]), hash_array_extended('{1,2,3,4,5,6,7,8}'::int2[], 0),
+	   hash_array_extended('{1,2,3,4,5,6,7,8}'::int2[], 6877457);
+ hash_array | hash_array_extended  | hash_array_extended  
+------------+----------------------+----------------------
+ 1332756414 | -2139327289023774786 | -5977231353903978197
+(1 row)
+
+SELECT hashbpchar('PostgreSQL'), hashbpcharextended('PostgreSQL', 0), hashbpcharextended('PostgreSQL', 6877457);
+ hashbpchar  |  hashbpcharextended  |  hashbpcharextended  
+-------------+----------------------+----------------------
+ -1696465276 | -5770657681951818108 | -6237257254085129499
+(1 row)
+
+SELECT time_hash('11:09:59'), time_hash_extended('11:09:59', 0),
+	   time_hash_extended('11:09:59', 6877457);
+ time_hash  | time_hash_extended  | time_hash_extended  
+------------+---------------------+---------------------
+ 1740227977 | 6564483993255396745 | 8740506789988024383
+(1 row)
+
+SELECT timetz_hash('2017-08-22 00:11:52.518762-07'), timetz_hash_extended('2017-08-22 00:11:52.518762-07', 0),
+	   timetz_hash_extended('2017-08-22 00:11:52.518762-07', 6877457);
+ timetz_hash | timetz_hash_extended | timetz_hash_extended 
+-------------+----------------------+----------------------
+  -360566912 |  9030192975979884416 |  1447257070792174569
+(1 row)
+
+SELECT timestamp_hash('2017-08-22 00:09:59'), timestamp_hash_extended('2017-08-22 00:09:59', 0),
+	   timestamp_hash_extended('2017-08-22 00:09:59', 6877457);
+ timestamp_hash | timestamp_hash_extended | timestamp_hash_extended 
+----------------+-------------------------+-------------------------
+    -1450627509 |      580235490235067979 |     3037149474310020228
+(1 row)
+
+SELECT interval_hash('5 month 7 day 46 minutes'), interval_hash_extended('5 month 7 day 46 minutes', 0),
+	   interval_hash_extended('5 month 7 day 46 minutes', 6877457);
+ interval_hash | interval_hash_extended | interval_hash_extended 
+---------------+------------------------+------------------------
+   -1650268900 |   -2083448633614473956 |    7239542030696170388
+(1 row)
+
+SELECT uuid_hash('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'), uuid_hash_extended('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 0),
+	   uuid_hash_extended('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 6877457);
+ uuid_hash  | uuid_hash_extended  | uuid_hash_extended  
+------------+---------------------+---------------------
+ 1154666245 | 7543054272012930821 | 5854430665682797134
+(1 row)
+
+SELECT pg_lsn_hash('16/B374D84'), pg_lsn_hash_extended('16/B374D84', 0), pg_lsn_hash_extended('16/B374D84', 6877457);
+ pg_lsn_hash | pg_lsn_hash_extended | pg_lsn_hash_extended 
+-------------+----------------------+----------------------
+   783723155 |  7832933829336017555 |  -483403495645773502
+(1 row)
+
+--CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
+--SELECT hashenum('happy'::mood), hashenumextended('happy'::mood, 0), hashenumextended('happy'::mood, 6877457);
+--DROP TYPE mood;
+SELECT jsonb_hash('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'),
+	   jsonb_hash_extended('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}', 0),
+	   jsonb_hash_extended('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}', 6877457);
+ jsonb_hash | jsonb_hash_extended | jsonb_hash_extended  
+------------+---------------------+----------------------
+ -258638552 | 6657421403376102465 | -5342236833681234663
+(1 row)
+
+SELECT hash_range(int4range(10, 20)), hash_range_extended(int4range(10, 20), 0),
+	   hash_range_extended(int4range(10, 20), 6877457);
+ hash_range | hash_range_extended  | hash_range_extended  
+------------+----------------------+----------------------
+ 1202375768 | -4361814294641587112 | -5843541585236977674
+(1 row)
+
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index eefdeea..2fd3f2b 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -60,7 +60,7 @@ test: create_index create_view
 # ----------
 # Another group of parallel tests
 # ----------
-test: create_aggregate create_function_3 create_cast constraints triggers inherit create_table_like typed_table vacuum drop_if_exists updatable_views rolenames roleattributes create_am
+test: create_aggregate create_function_3 create_cast constraints triggers inherit create_table_like typed_table vacuum drop_if_exists updatable_views rolenames roleattributes create_am hash_func
 
 # ----------
 # sanity_check does a vacuum, affecting the sort order of SELECT *
diff --git a/src/test/regress/sql/hash_func.sql b/src/test/regress/sql/hash_func.sql
new file mode 100644
index 0000000..7d751be
--- /dev/null
+++ b/src/test/regress/sql/hash_func.sql
@@ -0,0 +1,48 @@
+--
+-- Test hash functions
+--
+
+SELECT hashint2(837::int2), hashint2extended(837::int2, 0), hashint2extended(837::int2, 6877457);
+SELECT hashint4(837), hashint4extended(837, 0), hashint4extended(837, 6877457);
+SELECT hashint8(837), hashint8extended(837, 0), hashint8extended(837, 6877457);
+SELECT hashfloat4(837.576), hashfloat4extended(837.576, 0), hashfloat4extended(837.576, 6877457);
+SELECT hashfloat8(837.576), hashfloat8extended(837.576, 0), hashfloat8extended(837.576, 6877457);
+SELECT hashoid(445), hashoidextended(445, 0), hashoidextended(445, 6877457);
+SELECT hashchar('x'), hashcharextended('x', 0), hashcharextended('x', 6877457);
+SELECT hashname('PostgreSQL'), hashnameextended('PostgreSQL', 0), hashnameextended('PostgreSQL', 6877457);
+SELECT hashtext('PostgreSQL'), hashtextextended('PostgreSQL', 0), hashtextextended('PostgreSQL', 6877457);
+--SELECT hashvarlena(internal_type??), hashvarlenaextended(internal type??, 0), hashvarlenaextended(internal type??, 6877457);
+SELECT hashoidvector('1 2 3 4 5 6 7 8'), hashoidvectorextended('1 2 3 4 5 6 7 8', 0),
+	   hashoidvectorextended('1 2 3 4 5 6 7 8', 6877457);
+-- SELECT hash_aclitem(relacl[1]), hash_aclitem_extended(relacl[1], 0), hash_aclitem_extended(relacl[1], 6877457)
+-- FROM pg_class LIMIT 1;
+SELECT hashmacaddr('08:00:2b:01:02:04'), hashmacaddrextended('08:00:2b:01:02:04', 0),
+	   hashmacaddrextended('08:00:2b:01:02:04', 6877457);
+SELECT hashmacaddr8('08:00:2b:01:02:03:04:05'), hashmacaddr8extended('08:00:2b:01:02:03:04:05', 0),
+	   hashmacaddr8extended('08:00:2b:01:02:03:04:05', 6877457);
+SELECT hashinet('192.168.100.128/25'), hashinetextended('192.168.100.128/25', 0),
+	   hashinetextended('192.168.100.128/25', 6877457);
+SELECT hash_numeric(149484958.204628457), hash_numeric_extended(149484958.204628457, 0),
+	   hash_numeric_extended(149484958.204628457, 6877457);
+SELECT hash_array('{1,2,3,4,5,6,7,8}'::int2[]), hash_array_extended('{1,2,3,4,5,6,7,8}'::int2[], 0),
+	   hash_array_extended('{1,2,3,4,5,6,7,8}'::int2[], 6877457);
+SELECT hashbpchar('PostgreSQL'), hashbpcharextended('PostgreSQL', 0), hashbpcharextended('PostgreSQL', 6877457);
+SELECT time_hash('11:09:59'), time_hash_extended('11:09:59', 0),
+	   time_hash_extended('11:09:59', 6877457);
+SELECT timetz_hash('2017-08-22 00:11:52.518762-07'), timetz_hash_extended('2017-08-22 00:11:52.518762-07', 0),
+	   timetz_hash_extended('2017-08-22 00:11:52.518762-07', 6877457);
+SELECT timestamp_hash('2017-08-22 00:09:59'), timestamp_hash_extended('2017-08-22 00:09:59', 0),
+	   timestamp_hash_extended('2017-08-22 00:09:59', 6877457);
+SELECT interval_hash('5 month 7 day 46 minutes'), interval_hash_extended('5 month 7 day 46 minutes', 0),
+	   interval_hash_extended('5 month 7 day 46 minutes', 6877457);
+SELECT uuid_hash('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'), uuid_hash_extended('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 0),
+	   uuid_hash_extended('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 6877457);
+SELECT pg_lsn_hash('16/B374D84'), pg_lsn_hash_extended('16/B374D84', 0), pg_lsn_hash_extended('16/B374D84', 6877457);
+--CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
+--SELECT hashenum('happy'::mood), hashenumextended('happy'::mood, 0), hashenumextended('happy'::mood, 6877457);
+--DROP TYPE mood;
+SELECT jsonb_hash('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'),
+	   jsonb_hash_extended('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}', 0),
+	   jsonb_hash_extended('{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}', 6877457);
+SELECT hash_range(int4range(10, 20)), hash_range_extended(int4range(10, 20), 0),
+	   hash_range_extended(int4range(10, 20), 6877457);
-- 
2.6.2

