<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Rodber\Wordle\Tests;
use LengthException;
use PHPUnit\Framework\TestCase;
use Rodber\Wordle\Compare;
use Rodber\Wordle\Word;
final class CompareTest extends TestCase
{
public function testMatch(): void
{
$foo = 'word';
$word = new Word($foo);
$against = new Word($foo);
$compare = new Compare($word, $against);
$this->assertSame(
[
[
'w' => Word::CHAR_MATCH_EXACT,
],
[
'o' => Word::CHAR_MATCH_EXACT,
],
[
'r' => Word::CHAR_MATCH_EXACT,
],
[
'd' => Word::CHAR_MATCH_EXACT,
],
],
$compare->computed()
);
$this->assertTrue($compare->match());
$against = new Word(strrev($foo));
$compare = new Compare($word, $against);
$this->assertSame(
[
[
'd' => Word::CHAR_MATCH_PARTIAL,
],
[
'r' => Word::CHAR_MATCH_PARTIAL,
],
[
'o' => Word::CHAR_MATCH_PARTIAL,
],
[
'w' => Word::CHAR_MATCH_PARTIAL,
],
],
$compare->computed()
);
$this->assertFalse($compare->match());
}
public function testMatchUtf8(): void
{
$foo = 'piņa';
$word = new Word($foo);
$against = new Word($foo);
$compare = new Compare($word, $against);
$this->assertSame(
[
[
'p' => Word::CHAR_MATCH_EXACT,
],
[
'i' => Word::CHAR_MATCH_EXACT,
],
[
'ņ' => Word::CHAR_MATCH_EXACT,
],
[
'a' => Word::CHAR_MATCH_EXACT,
],
],
$compare->computed()
);
$this->assertTrue($compare->match());
}
public function testPartialMatch(): void
{
$foo = 'word';
$bar = 'wdrd';
$word = new Word($foo);
$against = new Word($bar);
$compare = new Compare($word, $against);
$this->assertSame(
[
[
'w' => Word::CHAR_MATCH_EXACT,
],
[
'd' => Word::CHAR_MATCH_NONE,
],
[
'r' => Word::CHAR_MATCH_EXACT,
],
[
'd' => Word::CHAR_MATCH_EXACT,
],
],
$compare->computed()
);
}
public function testLengthException(): void
{
$foo = 'word';
$word = new Word($foo);
$this->expectException(LengthException::class);
(new Compare($word, new Word($foo . $foo)));
}
}
|