<?php
use \ParagonIE\ConstantTime\Base32;

class Base32Test extends PHPUnit\Framework\TestCase {

	/**
	 * @covers Base32::encode()
	 * @covers Base32::decode()
	 * @covers Base32::encodeUpper()
	 * @covers Base32::decodeUpper()
	 */
	public function testRandom() {
		for ( $i = 1; $i < 32; ++$i ) {
			for ( $j = 0; $j < 50; ++$j ) {
				$random = \random_bytes( $i );

				$enc = Base32::encode( $random );
				$this->assertSame(
					$random,
					Base32::decode( $enc )
				);
				$unpadded = \rtrim( $enc, '=' );
				$this->assertSame(
					$unpadded,
					Base32::encodeUnpadded( $random )
				);
				$this->assertSame(
					$random,
					Base32::decode( $unpadded )
				);

				$enc = Base32::encodeUpper( $random );
				$this->assertSame(
					$random,
					Base32::decodeUpper( $enc )
				);
				$unpadded = \rtrim( $enc, '=' );
				$this->assertSame(
					$unpadded,
					Base32::encodeUpperUnpadded( $random )
				);
				$this->assertSame(
					$random,
					Base32::decodeUpper( $unpadded )
				);
			}
		}
	}
}
