From 68168d5f85ff1638eccb37273465fb5a13dfa3b0 Mon Sep 17 00:00:00 2001
From: Maxim Orlov <m.orlov@postgrespro.ru>
Date: Thu, 9 Nov 2023 18:02:25 +0300
Subject: [PATCH 4/4] Add SLRU tests for 64-bit page case

Previously, we add 64-bit naming for SLRU segments.  But no tests for the actual
64-bit pages were provided.

Author: Maxim Orlov
Reviewed-by: Aleksander Alekseev, Alexander Korotkov
Discussion: https://postgr.es/m/CACG%3DezZe1NQSCnfHOr78AtAZxJZeCvxrts0ygrxYwe%3DpyyjVWA%40mail.gmail.com
Discussion: https://postgr.es/m/CAJ7c6TPDOYBYrnCAeyndkBktO0WG2xSdYduTF0nxq%2BvfkmTF5Q%40mail.gmail.com
---
 .../modules/test_slru/expected/test_slru.out  | 135 ++++++++++++++++++
 src/test/modules/test_slru/sql/test_slru.sql  |  38 +++++
 2 files changed, 173 insertions(+)

diff --git a/src/test/modules/test_slru/expected/test_slru.out b/src/test/modules/test_slru/expected/test_slru.out
index 4e5e562b434..185c56e5d62 100644
--- a/src/test/modules/test_slru/expected/test_slru.out
+++ b/src/test/modules/test_slru/expected/test_slru.out
@@ -132,4 +132,139 @@ SELECT test_slru_page_exists(12393);
  f
 (1 row)
 
+--
+-- Test 64-bit pages
+--
+SELECT test_slru_page_exists(0x1234500000000);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+SELECT test_slru_page_write(0x1234500000000, 'Test SLRU 64-bit');
+ test_slru_page_write 
+----------------------
+ 
+(1 row)
+
+SELECT test_slru_page_read(0x1234500000000);
+ test_slru_page_read 
+---------------------
+ Test SLRU 64-bit
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000000);
+ test_slru_page_exists 
+-----------------------
+ t
+(1 row)
+
+-- 48 extra pages
+SELECT count(test_slru_page_write(a, 'Test SLRU 64-bit'))
+  FROM generate_series(0x1234500000001, 0x1234500000030, 1) as a;
+ count 
+-------
+    48
+(1 row)
+
+-- Reading page in buffer for read and write
+SELECT test_slru_page_read(0x1234500000020, true);
+ test_slru_page_read 
+---------------------
+ Test SLRU 64-bit
+(1 row)
+
+-- Reading page in buffer for read-only
+SELECT test_slru_page_readonly(0x1234500000020);
+ test_slru_page_readonly 
+-------------------------
+ Test SLRU 64-bit
+(1 row)
+
+-- Reading page not in buffer with read-only
+SELECT test_slru_page_readonly(0x1234500000001);
+ test_slru_page_readonly 
+-------------------------
+ Test SLRU 64-bit
+(1 row)
+
+-- Write all the pages in buffers
+SELECT test_slru_page_writeall();
+ test_slru_page_writeall 
+-------------------------
+ 
+(1 row)
+
+-- Flush the last page written out.
+SELECT test_slru_page_sync(0x1234500000030);
+NOTICE:  Called SlruSyncFileTag() for segment 10007944888321 on path pg_test_slru/000091A28000001
+ test_slru_page_sync 
+---------------------
+ 
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000030);
+ test_slru_page_exists 
+-----------------------
+ t
+(1 row)
+
+-- Segment deletion
+SELECT test_slru_page_delete(0x1234500000030);
+NOTICE:  Called SlruDeleteSegment() for segment 10007944888321
+ test_slru_page_delete 
+-----------------------
+ 
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000030);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+-- Page truncation
+SELECT test_slru_page_exists(0x1234500000020);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+SELECT test_slru_page_truncate(0x1234500000020);
+ test_slru_page_truncate 
+-------------------------
+ 
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000020);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+-- Full deletion
+SELECT test_slru_delete_all();
+ test_slru_delete_all 
+----------------------
+ 
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000000);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000020);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
+SELECT test_slru_page_exists(0x1234500000030);
+ test_slru_page_exists 
+-----------------------
+ f
+(1 row)
+
 DROP EXTENSION test_slru;
diff --git a/src/test/modules/test_slru/sql/test_slru.sql b/src/test/modules/test_slru/sql/test_slru.sql
index fe0d1342a94..b1b376581ab 100644
--- a/src/test/modules/test_slru/sql/test_slru.sql
+++ b/src/test/modules/test_slru/sql/test_slru.sql
@@ -35,4 +35,42 @@ SELECT test_slru_page_exists(12345);
 SELECT test_slru_page_exists(12377);
 SELECT test_slru_page_exists(12393);
 
+--
+-- Test 64-bit pages
+--
+SELECT test_slru_page_exists(0x1234500000000);
+SELECT test_slru_page_write(0x1234500000000, 'Test SLRU 64-bit');
+SELECT test_slru_page_read(0x1234500000000);
+SELECT test_slru_page_exists(0x1234500000000);
+
+-- 48 extra pages
+SELECT count(test_slru_page_write(a, 'Test SLRU 64-bit'))
+  FROM generate_series(0x1234500000001, 0x1234500000030, 1) as a;
+
+-- Reading page in buffer for read and write
+SELECT test_slru_page_read(0x1234500000020, true);
+-- Reading page in buffer for read-only
+SELECT test_slru_page_readonly(0x1234500000020);
+-- Reading page not in buffer with read-only
+SELECT test_slru_page_readonly(0x1234500000001);
+
+-- Write all the pages in buffers
+SELECT test_slru_page_writeall();
+-- Flush the last page written out.
+SELECT test_slru_page_sync(0x1234500000030);
+SELECT test_slru_page_exists(0x1234500000030);
+-- Segment deletion
+SELECT test_slru_page_delete(0x1234500000030);
+SELECT test_slru_page_exists(0x1234500000030);
+-- Page truncation
+SELECT test_slru_page_exists(0x1234500000020);
+SELECT test_slru_page_truncate(0x1234500000020);
+SELECT test_slru_page_exists(0x1234500000020);
+
+-- Full deletion
+SELECT test_slru_delete_all();
+SELECT test_slru_page_exists(0x1234500000000);
+SELECT test_slru_page_exists(0x1234500000020);
+SELECT test_slru_page_exists(0x1234500000030);
+
 DROP EXTENSION test_slru;
-- 
2.39.3 (Apple Git-145)

