336 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			336 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								declare(strict_types = 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace BaconQrCodeTest\Encoder;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Common\BitArray;
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Common\ErrorCorrectionLevel;
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Common\Version;
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Encoder\ByteMatrix;
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Encoder\MatrixUtil;
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								use ReflectionClass;
							 | 
						||
| 
								 | 
							
								use ReflectionMethod;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MatrixUtilTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @var ReflectionMethod[]
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected $methods = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function setUp() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Hack to be able to test protected methods
							 | 
						||
| 
								 | 
							
								        $reflection = new ReflectionClass(MatrixUtil::class);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($reflection->getMethods(ReflectionMethod::IS_STATIC) as $method) {
							 | 
						||
| 
								 | 
							
								            $method->setAccessible(true);
							 | 
						||
| 
								 | 
							
								            $this->methods[$method->getName()] = $method;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testToString() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(3, 3);
							 | 
						||
| 
								 | 
							
								        $matrix->set(0, 0, 0);
							 | 
						||
| 
								 | 
							
								        $matrix->set(1, 0, 1);
							 | 
						||
| 
								 | 
							
								        $matrix->set(2, 0, 0);
							 | 
						||
| 
								 | 
							
								        $matrix->set(0, 1, 1);
							 | 
						||
| 
								 | 
							
								        $matrix->set(1, 1, 0);
							 | 
						||
| 
								 | 
							
								        $matrix->set(2, 1, 1);
							 | 
						||
| 
								 | 
							
								        $matrix->set(0, 2, -1);
							 | 
						||
| 
								 | 
							
								        $matrix->set(1, 2, -1);
							 | 
						||
| 
								 | 
							
								        $matrix->set(2, 2, -1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $expected = " 0 1 0\n 1 0 1\n      \n";
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testClearMatrix() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(2, 2);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame(-1, $matrix->get(0, 0));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(-1, $matrix->get(1, 0));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(-1, $matrix->get(0, 1));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(-1, $matrix->get(1, 1));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEmbedBasicPatterns1() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(21, 21);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								        $this->methods['embedBasicPatterns']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            Version::getVersionForNumber(1),
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $expected = " 1 1 1 1 1 1 1 0           0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0           0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0           0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0           0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . "             1                            \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                            \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                            \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                            \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                            \n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 1                        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0                          \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEmbedBasicPatterns2() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(25, 25);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								        $this->methods['embedBasicPatterns']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            Version::getVersionForNumber(2),
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $expected = " 1 1 1 1 1 1 1 0                   0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                   0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                   0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0                   0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . "             1                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             0                                    \n"
							 | 
						||
| 
								 | 
							
								                  . "             1                   1 1 1 1 1        \n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 1               1 0 0 0 1        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0                 1 0 1 0 1        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                 1 0 0 0 1        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                 1 1 1 1 1        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                                  \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0                                  \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0                                  \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0                                  \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEmbedTypeInfo() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(21, 21);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								        $this->methods['embedTypeInfo']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            ErrorCorrectionLevel::M(),
							 | 
						||
| 
								 | 
							
								            5,
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $expected = "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 1                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 1                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 1                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                 1                        \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0   0 1         1 1 0 0 1 1 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 0                        \n"
							 | 
						||
| 
								 | 
							
								                  . "                 1                        \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEmbedVersionInfo() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(21, 21);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								        $this->methods['maybeEmbedVersionInfo']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            Version::getVersionForNumber(7),
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $expected = "                     0 0 1                \n"
							 | 
						||
| 
								 | 
							
								                  . "                     0 1 0                \n"
							 | 
						||
| 
								 | 
							
								                  . "                     0 1 0                \n"
							 | 
						||
| 
								 | 
							
								                  . "                     0 1 1                \n"
							 | 
						||
| 
								 | 
							
								                  . "                     1 1 1                \n"
							 | 
						||
| 
								 | 
							
								                  . "                     0 0 0                \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 1 0                              \n"
							 | 
						||
| 
								 | 
							
								                  . " 0 1 1 1 1 0                              \n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 1 1 0                              \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n"
							 | 
						||
| 
								 | 
							
								                  . "                                          \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEmbedDataBits() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(21, 21);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::clearMatrix($matrix);
							 | 
						||
| 
								 | 
							
								        $this->methods['embedBasicPatterns']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            Version::getVersionForNumber(1),
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $bits = new BitArray();
							 | 
						||
| 
								 | 
							
								        $this->methods['embedDataBits']->invoke(
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            $bits,
							 | 
						||
| 
								 | 
							
								            -1,
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $expected = " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testBuildMatrix() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $bytes = [
							 | 
						||
| 
								 | 
							
								            32, 65, 205, 69, 41, 220, 46, 128, 236, 42, 159, 74, 221, 244, 169,
							 | 
						||
| 
								 | 
							
								            239, 150, 138, 70, 237, 85, 224, 96, 74, 219 , 61
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $bits = new BitArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($bytes as $byte) {
							 | 
						||
| 
								 | 
							
								            $bits->appendBits($byte, 8);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $matrix = new ByteMatrix(21, 21);
							 | 
						||
| 
								 | 
							
								        MatrixUtil::buildMatrix(
							 | 
						||
| 
								 | 
							
								            $bits,
							 | 
						||
| 
								 | 
							
								            ErrorCorrectionLevel::H(),
							 | 
						||
| 
								 | 
							
								            Version::getVersionForNumber(1),
							 | 
						||
| 
								 | 
							
								            3,
							 | 
						||
| 
								 | 
							
								            $matrix
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $expected = " 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0\n"
							 | 
						||
| 
								 | 
							
								                  . " 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($expected, (string) $matrix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testFindMsbSet() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0, $this->methods['findMsbSet']->invoke(null, 0));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(1, $this->methods['findMsbSet']->invoke(null, 1));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(8, $this->methods['findMsbSet']->invoke(null, 0x80));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(32, $this->methods['findMsbSet']->invoke(null, 0x80000000));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCalculateBchCode() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Encoding of type information.
							 | 
						||
| 
								 | 
							
								        // From Appendix C in JISX0510:2004 (p 65)
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0xdc, $this->methods['calculateBchCode']->invoke(null, 5, 0x537));
							 | 
						||
| 
								 | 
							
								        // From http://www.swetake.com/qr/qr6.html
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0x1c2, $this->methods['calculateBchCode']->invoke(null, 0x13, 0x537));
							 | 
						||
| 
								 | 
							
								        // From http://www.swetake.com/qr/qr11.html
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0x214, $this->methods['calculateBchCode']->invoke(null, 0x1b, 0x537));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Encoding of version information.
							 | 
						||
| 
								 | 
							
								        // From Appendix D in JISX0510:2004 (p 68)
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0xc94, $this->methods['calculateBchCode']->invoke(null, 7, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0x5bc, $this->methods['calculateBchCode']->invoke(null, 8, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0xa99, $this->methods['calculateBchCode']->invoke(null, 9, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0x4d3, $this->methods['calculateBchCode']->invoke(null, 10, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0x9a6, $this->methods['calculateBchCode']->invoke(null, 20, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0xd75, $this->methods['calculateBchCode']->invoke(null, 30, 0x1f25));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0xc69, $this->methods['calculateBchCode']->invoke(null, 40, 0x1f25));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testMakeVersionInfoBits() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // From Appendix D in JISX0510:2004 (p 68)
							 | 
						||
| 
								 | 
							
								        $bits = new BitArray();
							 | 
						||
| 
								 | 
							
								        $this->methods['makeVersionInfoBits']->invoke(null, Version::getVersionForNumber(7), $bits);
							 | 
						||
| 
								 | 
							
								        $this->assertSame(' ...XXXXX ..X..X.X ..', (string) $bits);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testMakeTypeInfoBits() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // From Appendix D in JISX0510:2004 (p 68)
							 | 
						||
| 
								 | 
							
								        $bits = new BitArray();
							 | 
						||
| 
								 | 
							
								        $this->methods['makeTypeInfoBits']->invoke(null, ErrorCorrectionLevel::M(), 5, $bits);
							 | 
						||
| 
								 | 
							
								        $this->assertSame(' X......X X..XXX.', (string) $bits);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |