xref: /PHP-8.0/ext/gmp/tests/gmp_export.phpt (revision a29016d7)
1--TEST--
2gmp_export() basic tests
3--SKIPIF--
4<?php if (!extension_loaded("gmp")) echo "skip"; ?>
5--FILE--
6<?php
7
8// Tests taken from GMPs own test suite.
9
10// format is [output, size, options, expected]
11$export = [
12    ['0',1,GMP_BIG_ENDIAN,''],
13    ['0',2,GMP_BIG_ENDIAN,''],
14    ['0',3,GMP_BIG_ENDIAN,''],
15    ['12345678',1,GMP_BIG_ENDIAN,'12345678'],
16    ['12345678',4,GMP_BIG_ENDIAN,'12345678'],
17    ['12345678',4,GMP_LSW_FIRST | GMP_BIG_ENDIAN,'12345678'],
18    ['12345678',1,GMP_LSW_FIRST | GMP_LITTLE_ENDIAN,'78563412'],
19    ['12345678',4,GMP_LITTLE_ENDIAN,'78563412'],
20    ['12345678',4,GMP_LSW_FIRST | GMP_LITTLE_ENDIAN,'78563412'],
21    ['123456789ABC',2,GMP_BIG_ENDIAN,'123456789abc'],
22    ['123456789ABC',2,GMP_LSW_FIRST | GMP_BIG_ENDIAN,'9abc56781234'],
23    ['123456789ABC',2,GMP_LITTLE_ENDIAN,'34127856bc9a'],
24    ['123456789ABC',2,GMP_LSW_FIRST | GMP_LITTLE_ENDIAN,'bc9a78563412'],
25    ['112233445566778899AABBCC',4,GMP_BIG_ENDIAN,'112233445566778899aabbcc'],
26    ['112233445566778899AABBCC',4,GMP_LSW_FIRST | GMP_BIG_ENDIAN,'99aabbcc5566778811223344'],
27    ['112233445566778899AABBCC',4,GMP_LITTLE_ENDIAN,'4433221188776655ccbbaa99'],
28    ['112233445566778899AABBCC',4,GMP_LSW_FIRST | GMP_LITTLE_ENDIAN,'ccbbaa998877665544332211'],
29    ['100120023003400450056006700780089009A00AB00BC00C',8,GMP_BIG_ENDIAN,'100120023003400450056006700780089009a00ab00bc00c'],
30    ['100120023003400450056006700780089009A00AB00BC00C',8,GMP_LSW_FIRST | GMP_BIG_ENDIAN,'9009a00ab00bc00c50056006700780081001200230034004'],
31    ['100120023003400450056006700780089009A00AB00BC00C',8,GMP_LITTLE_ENDIAN,'044003300220011008800770066005500cc00bb00aa00990'],
32    ['100120023003400450056006700780089009A00AB00BC00C',8,GMP_LSW_FIRST | GMP_LITTLE_ENDIAN,'0cc00bb00aa0099008800770066005500440033002200110']
33];
34
35$passed = true;
36foreach ($export as $k => $test) {
37    $gmp = gmp_init($test[0], 16);
38    $str = gmp_export($gmp, $test[1], $test[2]);
39    if (is_string($str)) {
40        $result = bin2hex($str);
41        if ($result !== $test[3]) {
42            echo "$k: '$result' !== '{$test[3]}'\n";
43            $passed = false;
44        }
45    } else {
46        $type = gettype($str);
47        echo "$k: $type !== '{$test[3]}'\n";
48    }
49}
50
51var_dump($passed);
52
53// Argument converted from int to GMP
54var_dump(bin2hex(gmp_export(0xff)));
55
56// Invalid word sizes
57try {
58    var_dump(gmp_export(123, -1));
59} catch (\ValueError $e) {
60    echo $e->getMessage() . \PHP_EOL;
61}
62try {
63    var_dump(gmp_export(123, 0));
64} catch (\ValueError $e) {
65    echo $e->getMessage() . \PHP_EOL;
66}
67
68// Invalid options
69try {
70    var_dump(gmp_export(123, 1, GMP_MSW_FIRST | GMP_LSW_FIRST));
71} catch (\ValueError $e) {
72    echo $e->getMessage() . \PHP_EOL;
73}
74try {
75    var_dump(gmp_export(123, 1, GMP_BIG_ENDIAN | GMP_LITTLE_ENDIAN));
76} catch (\ValueError $e) {
77    echo $e->getMessage() . \PHP_EOL;
78}
79?>
80--EXPECT--
81bool(true)
82string(2) "ff"
83gmp_export(): Argument #2 ($word_size) must be greater than or equal to 1
84gmp_export(): Argument #2 ($word_size) must be greater than or equal to 1
85gmp_export(): Argument #3 ($flags) cannot use multiple word order options
86gmp_export(): Argument #3 ($flags) cannot use multiple endian options
87