From 66861f5d7ab89adfb6848af789f0a0df9d6d0c42 Mon Sep 17 00:00:00 2001
From: SATO Kentaro <kentaro@ranvis.com>
Date: Sat, 20 Apr 2024 15:45:26 +0900
Subject: [PATCH] Add generic pack test for 64bit.

---
 ext/standard/tests/strings/pack.phpt          | 76 +++++--------------
 ext/standard/tests/strings/pack_int.phpt      | 73 ++++++++++++++++++
 .../tests/strings/pack_int_64bit.phpt         | 73 ++++++++++++++++++
 3 files changed, 166 insertions(+), 56 deletions(-)
 create mode 100644 ext/standard/tests/strings/pack_int.phpt
 create mode 100644 ext/standard/tests/strings/pack_int_64bit.phpt

diff --git a/ext/standard/tests/strings/pack.phpt b/ext/standard/tests/strings/pack.phpt
index f30f5108349a4..2187e001d79a4 100644
--- a/ext/standard/tests/strings/pack.phpt
+++ b/ext/standard/tests/strings/pack.phpt
@@ -1,11 +1,5 @@
 --TEST--
 Generic pack()/unpack() tests
---SKIPIF--
-<?php
-if (PHP_INT_MAX > 2147483647) {
-    die("skip 32bit test only");
-}
-?>
 --FILE--
 <?php
 echo "A\n";
@@ -26,25 +20,25 @@ print_r(unpack("H", pack("H", 0x04)));
 echo "I\n";
 print_r(unpack("I", pack("I", 65534)));
 print_r(unpack("I", pack("I", 0)));
-print_r(unpack("I", pack("I", -1000)));
-print_r(unpack("I", pack("I", -64434)));
+echo bin2hex(pack("I", -1000)), "\n";
+echo bin2hex(pack("I", -64434)), "\n";
 print_r(unpack("I", pack("I", 4294967296)));
 print_r(unpack("I", pack("I", -4294967296)));
 
 echo "L\n";
 print_r(unpack("L", pack("L", 65534)));
 print_r(unpack("L", pack("L", 0)));
-print_r(unpack("L", pack("L", 2147483650)));
-print_r(unpack("L", pack("L", 4294967295)));
-print_r(unpack("L", pack("L", -2147483648)));
+echo bin2hex(pack("L", 2147483650)), "\n";
+echo bin2hex(pack("L", 4294967295)), "\n";
+echo bin2hex(pack("L", -2147483648)), "\n";
 
 echo "N\n";
 print_r(unpack("N", pack("N", 65534)));
 print_r(unpack("N", pack("N", 0)));
-print_r(unpack("N", pack("N", 2147483650)));
+echo bin2hex(pack("N", 2147483650)), "\n";
 print_r(unpack("N", pack("N", 4294967296)));
-print_r(unpack("N", pack("N", -2147483648)));
-print_r(unpack("N", pack("N", -30000)));
+echo bin2hex(pack("N", -2147483648)), "\n";
+echo bin2hex(pack("N", -30000)), "\n";
 
 echo "S\n";
 print_r(unpack("S", pack("S", 65534)));
@@ -57,9 +51,9 @@ print_r(unpack("S", pack("S", -65535)));
 echo "V\n";
 print_r(unpack("V", pack("V", 65534)));
 print_r(unpack("V", pack("V", 0)));
-print_r(unpack("V", pack("V", 2147483650)));
+echo bin2hex(pack("V", 2147483650)), "\n";
 print_r(unpack("V", pack("V", 4294967296)));
-print_r(unpack("V", pack("V", -2147483648)));
+echo bin2hex(pack("V", -2147483648)), "\n";
 
 echo "a\n";
 print_r(unpack("a", pack("a", "hello world")));
@@ -155,14 +149,8 @@ Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -1000
-)
-Array
-(
-    [1] => -64434
-)
+18fcffff
+4e04ffff
 Array
 (
     [1] => 0
@@ -180,18 +168,9 @@ Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -2147483646
-)
-Array
-(
-    [1] => -1
-)
-Array
-(
-    [1] => -2147483648
-)
+02000080
+ffffffff
+00000080
 N
 Array
 (
@@ -201,22 +180,13 @@ Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -2147483646
-)
+80000002
 Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -2147483648
-)
-Array
-(
-    [1] => -30000
-)
+80000000
+ffff8ad0
 S
 Array
 (
@@ -251,18 +221,12 @@ Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -2147483646
-)
+02000080
 Array
 (
     [1] => 0
 )
-Array
-(
-    [1] => -2147483648
-)
+00000080
 a
 Array
 (
diff --git a/ext/standard/tests/strings/pack_int.phpt b/ext/standard/tests/strings/pack_int.phpt
new file mode 100644
index 0000000000000..92a4f0210cdea
--- /dev/null
+++ b/ext/standard/tests/strings/pack_int.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Int size-dependent input pack()/unpack() tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE > 4) {
+    die("skip 32bit test only");
+}
+?>
+--FILE--
+<?php
+echo "I\n";
+print_r(unpack("I", hex2bin('18fcffff')));
+print_r(unpack("I", hex2bin('4e04ffff')));
+
+echo "L\n";
+print_r(unpack("L", hex2bin('02000080')));
+print_r(unpack("L", hex2bin('ffffffff')));
+print_r(unpack("L", hex2bin('00000080')));
+
+echo "N\n";
+print_r(unpack("N", hex2bin('80000002')));
+print_r(unpack("N", hex2bin('80000000')));
+print_r(unpack("N", hex2bin('ffff8ad0')));
+
+echo "V\n";
+print_r(unpack("V", hex2bin('02000080')));
+print_r(unpack("V", hex2bin('00000080')));
+?>
+--EXPECT--
+I
+Array
+(
+    [1] => -1000
+)
+Array
+(
+    [1] => -64434
+)
+L
+Array
+(
+    [1] => -2147483646
+)
+Array
+(
+    [1] => -1
+)
+Array
+(
+    [1] => -2147483648
+)
+N
+Array
+(
+    [1] => -2147483646
+)
+Array
+(
+    [1] => -2147483648
+)
+Array
+(
+    [1] => -30000
+)
+V
+Array
+(
+    [1] => -2147483646
+)
+Array
+(
+    [1] => -2147483648
+)
diff --git a/ext/standard/tests/strings/pack_int_64bit.phpt b/ext/standard/tests/strings/pack_int_64bit.phpt
new file mode 100644
index 0000000000000..ccdecc263fc33
--- /dev/null
+++ b/ext/standard/tests/strings/pack_int_64bit.phpt
@@ -0,0 +1,73 @@
+--TEST--
+Int size-dependent input pack()/unpack() tests
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE < 8) {
+    die("skip 64bit test only");
+}
+?>
+--FILE--
+<?php
+echo "I\n";
+print_r(unpack("I", hex2bin('18fcffff')));
+print_r(unpack("I", hex2bin('4e04ffff')));
+
+echo "L\n";
+print_r(unpack("L", hex2bin('02000080')));
+print_r(unpack("L", hex2bin('ffffffff')));
+print_r(unpack("L", hex2bin('00000080')));
+
+echo "N\n";
+print_r(unpack("N", hex2bin('80000002')));
+print_r(unpack("N", hex2bin('80000000')));
+print_r(unpack("N", hex2bin('ffff8ad0')));
+
+echo "V\n";
+print_r(unpack("V", hex2bin('02000080')));
+print_r(unpack("V", hex2bin('00000080')));
+?>
+--EXPECT--
+I
+Array
+(
+    [1] => 4294966296
+)
+Array
+(
+    [1] => 4294902862
+)
+L
+Array
+(
+    [1] => 2147483650
+)
+Array
+(
+    [1] => 4294967295
+)
+Array
+(
+    [1] => 2147483648
+)
+N
+Array
+(
+    [1] => 2147483650
+)
+Array
+(
+    [1] => 2147483648
+)
+Array
+(
+    [1] => 4294937296
+)
+V
+Array
+(
+    [1] => 2147483650
+)
+Array
+(
+    [1] => 2147483648
+)