5f43cb06fc689975646946e244f1c603dfdb7f0e
[yaffs-website] / test / ConvertTest.php
1 <?php
2
3 /**
4  * PEL: PHP Exif Library.
5  * A library with support for reading and
6  * writing all Exif headers in JPEG and TIFF images using PHP.
7  *
8  * Copyright (C) 2004 Martin Geisler.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program in the file COPYING; if not, write to the
22  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23  * Boston, MA 02110-1301 USA
24  */
25
26 use lsolesen\pel\PelConvert;
27
28 class ConvertTest extends \PHPUnit_Framework_TestCase
29 {
30
31     private $bytes = "\x00\x00\x00\x00\x01\x23\x45\x67\x89\xAB\xCD\xEF\xFF\xFF\xFF\xFF";
32
33     function testLongLittle()
34     {
35         $o = PelConvert::LITTLE_ENDIAN;
36
37         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 0, $o), 0x00000000);
38         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 1, $o), 0x01000000);
39         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 2, $o), 0x23010000);
40         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 3, $o), 0x45230100);
41         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 4, $o), 0x67452301);
42         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 5, $o), 0x89674523);
43         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 6, $o), 0xAB896745);
44         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 7, $o), 0xCDAB8967);
45         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 8, $o), 0xEFCDAB89);
46         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 9, $o), 0xFFEFCDAB);
47         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 10, $o), 0xFFFFEFCD);
48         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 11, $o), 0xFFFFFFEF);
49         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 12, $o), 0xFFFFFFFF);
50     }
51
52     function testLongBig()
53     {
54         $o = PelConvert::BIG_ENDIAN;
55
56         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 0, $o), 0x00000000);
57         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 1, $o), 0x00000001);
58         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 2, $o), 0x00000123);
59         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 3, $o), 0x00012345);
60         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 4, $o), 0x01234567);
61         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 5, $o), 0x23456789);
62         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 6, $o), 0x456789AB);
63         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 7, $o), 0x6789ABCD);
64         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 8, $o), 0x89ABCDEF);
65         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 9, $o), 0xABCDEFFF);
66         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 10, $o), 0xCDEFFFFF);
67         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 11, $o), 0xEFFFFFFF);
68         $this->assertEquals(PelConvert::bytesToLong($this->bytes, 12, $o), 0xFFFFFFFF);
69     }
70
71     function testSLongLittle()
72     {
73         // TODO: Does not work on 64bit systems!
74         $this->markTestIncomplete(
75             'Does not work on 64bit systems!'
76         );
77         $o = PelConvert::LITTLE_ENDIAN;
78
79         /*
80          * The easiest way to calculate the numbers to compare with, is to
81          * let PHP do the arithmetic for us. When using the bit-wise
82          * operators PHP will return a proper signed 32 bit integer.
83          */
84
85         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 0, $o), 0x00 << 24 | 0x00 << 16 | 0x00 << 8 | 0x00);
86         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 1, $o), 0x01 << 24 | 0x00 << 16 | 0x00 << 8 | 0x00);
87         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 2, $o), 0x23 << 24 | 0x01 << 16 | 0x00 << 8 | 0x00);
88         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 3, $o), 0x45 << 24 | 0x23 << 16 | 0x01 << 8 | 0x00);
89         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 4, $o), 0x67 << 24 | 0x45 << 16 | 0x23 << 8 | 0x01);
90         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 5, $o), 0x89 << 24 | 0x67 << 16 | 0x45 << 8 | 0x23);
91         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 6, $o), 0xAB << 24 | 0x89 << 16 | 0x67 << 8 | 0x45);
92         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 7, $o), 0xCD << 24 | 0xAB << 16 | 0x89 << 8 | 0x67);
93         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 8, $o), 0xEF << 24 | 0xCD << 16 | 0xAB << 8 | 0x89);
94         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 9, $o), 0xFF << 24 | 0xEF << 16 | 0xCD << 8 | 0xAB);
95         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 10, $o), 0xFF << 24 | 0xFF << 16 | 0xEF << 8 | 0xCD);
96         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 11, $o), 0xFF << 24 | 0xFF << 16 | 0xFF << 8 | 0xEF);
97         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 12, $o), 0xFF << 24 | 0xFF << 16 | 0xFF << 8 | 0xFF);
98     }
99
100     function testSLongBig()
101     {
102         // TODO: Does not work on 64bit systems
103         $this->markTestIncomplete(
104             'Does not work on 64bit systems!'
105         );
106
107         $o = PelConvert::BIG_ENDIAN;
108
109         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 0, $o), 0x00 << 24 | 0x00 << 16 | 0x00 << 8 | 0x00);
110         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 1, $o), 0x00 << 24 | 0x00 << 16 | 0x00 << 8 | 0x01);
111         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 2, $o), 0x00 << 24 | 0x00 << 16 | 0x01 << 8 | 0x23);
112         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 3, $o), 0x00 << 24 | 0x01 << 16 | 0x23 << 8 | 0x45);
113         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 4, $o), 0x01 << 24 | 0x23 << 16 | 0x45 << 8 | 0x67);
114         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 5, $o), 0x23 << 24 | 0x45 << 16 | 0x67 << 8 | 0x89);
115         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 6, $o), 0x45 << 24 | 0x67 << 16 | 0x89 << 8 | 0xAB);
116         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 7, $o), 0x67 << 24 | 0x89 << 16 | 0xAB << 8 | 0xCD);
117         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 8, $o), 0x89 << 24 | 0xAB << 16 | 0xCD << 8 | 0xEF);
118         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 9, $o), 0xAB << 24 | 0xCD << 16 | 0xEF << 8 | 0xFF);
119         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 10, $o), 0xCD << 24 | 0xEF << 16 | 0xFF << 8 | 0xFF);
120         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 11, $o), 0xEF << 24 | 0xFF << 16 | 0xFF << 8 | 0xFF);
121         $this->assertEquals(PelConvert::bytesToSLong($this->bytes, 12, $o), 0xFF << 24 | 0xFF << 16 | 0xFF << 8 | 0xFF);
122     }
123
124     function testShortLittle()
125     {
126         $o = PelConvert::LITTLE_ENDIAN;
127
128         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 0, $o), 0x0000);
129         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 1, $o), 0x0000);
130         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 2, $o), 0x0000);
131         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 3, $o), 0x0100);
132         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 4, $o), 0x2301);
133         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 5, $o), 0x4523);
134         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 6, $o), 0x6745);
135         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 7, $o), 0x8967);
136         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 8, $o), 0xAB89);
137         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 9, $o), 0xCDAB);
138         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 10, $o), 0xEFCD);
139         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 11, $o), 0xFFEF);
140         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 12, $o), 0xFFFF);
141         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 13, $o), 0xFFFF);
142         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 14, $o), 0xFFFF);
143     }
144
145     function testShortBig()
146     {
147         $o = PelConvert::BIG_ENDIAN;
148
149         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 0, $o), 0x0000);
150         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 1, $o), 0x0000);
151         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 2, $o), 0x0000);
152         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 3, $o), 0x0001);
153         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 4, $o), 0x0123);
154         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 5, $o), 0x2345);
155         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 6, $o), 0x4567);
156         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 7, $o), 0x6789);
157         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 8, $o), 0x89AB);
158         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 9, $o), 0xABCD);
159         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 10, $o), 0xCDEF);
160         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 11, $o), 0xEFFF);
161         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 12, $o), 0xFFFF);
162         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 13, $o), 0xFFFF);
163         $this->assertEquals(PelConvert::bytesToShort($this->bytes, 14, $o), 0xFFFF);
164     }
165
166     function testSShortLittle()
167     {
168         $o = PelConvert::LITTLE_ENDIAN;
169
170         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 0, $o), 0);
171         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 1, $o), 0);
172         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 2, $o), 0);
173         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 3, $o), 256);
174         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 4, $o), 8961);
175         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 5, $o), 17699);
176         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 6, $o), 26437);
177         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 7, $o), - 30361);
178         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 8, $o), - 21623);
179         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 9, $o), - 12885);
180         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 10, $o), - 4147);
181         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 11, $o), - 17);
182         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 12, $o), - 1);
183         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 13, $o), - 1);
184         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 14, $o), - 1);
185     }
186
187     function testSShortBig()
188     {
189         $o = PelConvert::BIG_ENDIAN;
190
191         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 0, $o), 0);
192         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 1, $o), 0);
193         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 2, $o), 0);
194         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 3, $o), 1);
195         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 4, $o), 291);
196         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 5, $o), 9029);
197         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 6, $o), 17767);
198         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 7, $o), 26505);
199         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 8, $o), - 30293);
200         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 9, $o), - 21555);
201         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 10, $o), - 12817);
202         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 11, $o), - 4097);
203         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 12, $o), - 1);
204         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 13, $o), - 1);
205         $this->assertEquals(PelConvert::bytesToSShort($this->bytes, 14, $o), - 1);
206     }
207
208     function testByte()
209     {
210         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 0), 0x00);
211         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 1), 0x00);
212         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 2), 0x00);
213         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 3), 0x00);
214         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 4), 0x01);
215         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 5), 0x23);
216         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 6), 0x45);
217         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 7), 0x67);
218         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 8), 0x89);
219         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 9), 0xAB);
220         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 10), 0xCD);
221         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 11), 0xEF);
222         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 12), 0xFF);
223         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 13), 0xFF);
224         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 14), 0xFF);
225         $this->assertEquals(PelConvert::bytesToByte($this->bytes, 15), 0xFF);
226     }
227
228     function testSByte()
229     {
230         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 0), 0);
231         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 1), 0);
232         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 2), 0);
233         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 3), 0);
234         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 4), 1);
235         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 5), 35);
236         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 6), 69);
237         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 7), 103);
238         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 8), - 119);
239         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 9), - 85);
240         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 10), - 51);
241         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 11), - 17);
242         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 12), - 1);
243         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 13), - 1);
244         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 14), - 1);
245         $this->assertEquals(PelConvert::bytesToSByte($this->bytes, 15), - 1);
246     }
247 }