fix: Test 코드 변경

This commit is contained in:
2023-03-01 12:38:33 +09:00
parent 4fcafe88a7
commit 294897df54
3 changed files with 67 additions and 23 deletions
+10
View File
@@ -94,12 +94,18 @@ class RandUtil
public function choice(array $items)
{
$keys = array_keys($items);
if(!$keys){
throw new \InvalidArgumentException();
}
$keyIdx = $this->rng->nextInt(count($keys) - 1);
return $items[$keys[$keyIdx]];
}
public function choiceUsingWeight(array $items)
{
if(!$items){
throw new \InvalidArgumentException();
}
$sum = 0;
foreach ($items as $value) {
if ($value <= 0) {
@@ -126,6 +132,10 @@ class RandUtil
public function choiceUsingWeightPair(array $items)
{
if(!$items){
throw new \InvalidArgumentException();
}
$sum = 0;
foreach ($items as [$item, $value]) {
if ($value <= 0) {
+4 -1
View File
@@ -1,5 +1,8 @@
<?php
class BasicTest extends PHPUnit\Framework\TestCase{
use \PHPUnit\Framework\TestCase;
final class BasicTest extends TestCase{
public function testHelloWorld(){
$this->assertEquals(1+1, 2);
}
+53 -22
View File
@@ -3,6 +3,8 @@
use sammo\LiteHashDRBG;
use sammo\RandUtil;
use \PHPUnit\Framework\TestCase;
const BLOCK_SIZE = LiteHashDRBG::BUFFER_BYTE_SIZE;
function fillBlock(string $src, string $filler = '\0', int $length = BLOCK_SIZE)
@@ -41,8 +43,9 @@ class DummyBlockRNG extends LiteHashDRBG
public function __construct(protected array $repeatBlock, protected int $stateIdx = 0)
{
foreach ($repeatBlock as $block) {
$blockLen = strlen($block);
if (strlen($block) != BLOCK_SIZE) {
throw new RuntimeException('Invalid repeat block');
throw new RuntimeException("Invalid repeat block {$blockLen} != " . BLOCK_SIZE);
}
}
$this->repeatBlockCnt = count($this->repeatBlock);
@@ -70,18 +73,49 @@ def hash(key, idx):
for idx in range(5):
print(hash(fixedKey, idx).hex())
*/
$rngTestVector = hex2bin(join('', [
'24d9ccd648556255fd0ee9f5b29918de90617341958b3b354d572167e4dee02b757816a2bbe0b502c52413ffd384381a9d7b4e193df6f4345d6a95e111d661c4',
'2e9264512f6f4b080cf1376b74fab6878ecf4a6e185942d2e5b22cf923885b9952d40601a414225d6901417fd4ce9368ac77e4a63d3fc9b58ab952bb8c33f165',
'8e2ebf5af6283a1b18f4c044c86c20d02be3890613c4cc8b7c6b7b35581263b972a82630df69a9289988422d7c3a9be5edf78d5de16fabd01e5dd4e458068d8a',
'398596047ba547bfe371ec863a3e019ab0dbc4bb3b27e9077685aae4283ff6bbccfd981d92f9358f7efffbb72a940414802d98466d132e2ad0a16a12946d5f47',
'b3606fe9b18c4aa7315e78bb9e47cb51cc4e203fcc2e631f0405c1b872c8e1cb5b6415ea74bbb77fffaaadb002b47cb4f4628dc0709634365b187667f5c708cb',
]));
class RNGTest extends PHPUnit\Framework\TestCase
{
function getRngTestVector(){
static $v = null;
if($v === null){
$v = hex2bin(join('', [
'24d9ccd648556255fd0ee9f5b29918de90617341958b3b354d572167e4dee02b757816a2bbe0b502c52413ffd384381a9d7b4e193df6f4345d6a95e111d661c4',
'2e9264512f6f4b080cf1376b74fab6878ecf4a6e185942d2e5b22cf923885b9952d40601a414225d6901417fd4ce9368ac77e4a63d3fc9b58ab952bb8c33f165',
'8e2ebf5af6283a1b18f4c044c86c20d02be3890613c4cc8b7c6b7b35581263b972a82630df69a9289988422d7c3a9be5edf78d5de16fabd01e5dd4e458068d8a',
'398596047ba547bfe371ec863a3e019ab0dbc4bb3b27e9077685aae4283ff6bbccfd981d92f9358f7efffbb72a940414802d98466d132e2ad0a16a12946d5f47',
'b3606fe9b18c4aa7315e78bb9e47cb51cc4e203fcc2e631f0405c1b872c8e1cb5b6415ea74bbb77fffaaadb002b47cb4f4628dc0709634365b187667f5c708cb',
]));
}
if($v === false){
throw new RuntimeException('Invalid Test Vector');
}
return $v;
}
final class RNGTest extends TestCase
{
const FIXED_KEY = 'HelloWorld';
public function testConvTestVector(){
$tmp = [
'24d9ccd648556255fd0ee9f5b29918de90617341958b3b354d572167e4dee02b757816a2bbe0b502c52413ffd384381a9d7b4e193df6f4345d6a95e111d661c4',
'2e9264512f6f4b080cf1376b74fab6878ecf4a6e185942d2e5b22cf923885b9952d40601a414225d6901417fd4ce9368ac77e4a63d3fc9b58ab952bb8c33f165',
'8e2ebf5af6283a1b18f4c044c86c20d02be3890613c4cc8b7c6b7b35581263b972a82630df69a9289988422d7c3a9be5edf78d5de16fabd01e5dd4e458068d8a',
'398596047ba547bfe371ec863a3e019ab0dbc4bb3b27e9077685aae4283ff6bbccfd981d92f9358f7efffbb72a940414802d98466d132e2ad0a16a12946d5f47',
'b3606fe9b18c4aa7315e78bb9e47cb51cc4e203fcc2e631f0405c1b872c8e1cb5b6415ea74bbb77fffaaadb002b47cb4f4628dc0709634365b187667f5c708cb',
];
$this->assertEquals(BLOCK_SIZE * 2, strlen($tmp[0]));
$tmp = join('', $tmp);
$this->assertEquals(true, is_string($tmp));
$this->assertEquals(BLOCK_SIZE * 5 * 2, strlen($tmp));
echo $tmp;
$tmp = hex2bin($tmp);
$this->assertEquals(BLOCK_SIZE * 5, strlen($tmp));
global $rngTestVector;
$this->assertEquals(true, is_string(getRngTestVector()));
}
public function testDummyRNG()
{
//Block의 값을 고정하고 입력값을 확인
@@ -89,13 +123,13 @@ class RNGTest extends PHPUnit\Framework\TestCase
fillBlock('', "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff")
]);
$this->setName('DummyRNG-SimpleByte');
//$this->setName('DummyRNG-SimpleByte');
$this->assertEquals("\x00", $rng->nextBytes(1));
$this->assertEquals("\x11\x22", $rng->nextBytes(2));
$this->assertEquals("\x33\x44\x55", $rng->nextBytes(3));
$this->assertEquals("\x66\x77\x88\x99", $rng->nextBytes(4));
$this->setName('DummyRNG-OverflowBlock');
//$this->setName('DummyRNG-OverflowBlock');
foreach (range(1, 16) as $_i) {
$this->assertEquals(
"\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99",
@@ -103,13 +137,13 @@ class RNGTest extends PHPUnit\Framework\TestCase
);
}
$this->setName('DummyRNG-MultiBlock');
//$this->setName('DummyRNG-MultiBlock');
$this->assertEquals(
fillBlock('', "\xaa\xbb\xcc\xdd\xee\xff\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99", BLOCK_SIZE * 2),
$rng->nextBytes(BLOCK_SIZE * 2)
);
$this->setName('DummyRNG-BitTest');
//$this->setName('DummyRNG-BitTest');
$this->assertEquals("\x00", $rng->nextBits(1)); //aa
$this->assertEquals("\x01", $rng->nextBits(1)); //bb
$this->assertEquals("\xcc", $rng->nextBits(8)); //cc
@@ -117,7 +151,7 @@ class RNGTest extends PHPUnit\Framework\TestCase
$this->assertEquals("\x7f", $rng->nextBits(7)); //ff
$this->assertEquals("\x00\x11\x22\x33\x44\x55\x06", $rng->nextBits(53));
$this->setName('DummyRNG-Int');
//$this->setName('DummyRNG-Int');
$this->assertEquals(0x77, $rng->nextInt(0xff));
$this->assertEquals(0x9988, $rng->nextInt((1 << 16) - 1));
$this->assertEquals(0xddccbbaa, $rng->nextInt((1 << 32) - 1));
@@ -129,7 +163,7 @@ class RNGTest extends PHPUnit\Framework\TestCase
$this->assertEquals(0xaa, $rng->nextInt(0xaa)); //aa (fit Max)
$floatMax = 1 << 53;
$this->setName('DummyRNG-Float'); //7개씩
//$this->setName('DummyRNG-Float'); //7개씩
$fa = $rng->nextFloat1();
$this->assertEquals(0x1100ffeeddccbb / $floatMax, $fa, 'float1-1');
$this->assertIsFloat($fa);
@@ -349,8 +383,7 @@ class RNGTest extends PHPUnit\Framework\TestCase
public function testRNGBytes()
{
global $rngTestVector;
$testVector = $rngTestVector;
$testVector = getRngTestVector();
$rng = new LiteHashDRBG(static::FIXED_KEY);
@@ -371,8 +404,7 @@ class RNGTest extends PHPUnit\Framework\TestCase
public function testRNGBits()
{
global $rngTestVector;
$testVector = $rngTestVector;
$testVector = getRngTestVector();
$rng = new LiteHashDRBG(static::FIXED_KEY);
@@ -396,8 +428,7 @@ class RNGTest extends PHPUnit\Framework\TestCase
public function testRNGFloat()
{
global $rngTestVector;
$testVector = $rngTestVector;
$testVector = getRngTestVector();
$rng = new LiteHashDRBG(static::FIXED_KEY);
$rng2 = new DummyBlockRNG([