| 
<?php
 declare(strict_types=1);
 
 use Fuse\Fuse;
 
 it('finds no matches when string is larger than 32 characters', function () {
 $list = [
 ['text' => 'pizza'],
 ['text' => 'feast'],
 ['text' => 'where in the world is carmen san diego'],
 ];
 
 $fuse = new Fuse($list, [
 'shouldSort' => true,
 'includeScore' => true,
 'threshold' => 0.6,
 'keys' => ['text'],
 ]);
 
 $result = $fuse->search('where exctly is carmen in the world san diego');
 
 expect($result)->toHaveCount(1);
 expect($result[0]['item']['text'])->toBe($list[2]['text']);
 });
 
 it('matches with very long patterns', function () {
 $fuse = new Fuse(
 [
 ['text' => 'pizza'],
 ['text' => 'feast'],
 ['text' => 'where in the world is carmen san diego'],
 ],
 [
 'shouldSort' => true,
 'includeScore' => true,
 'threshold' => 0.6,
 'keys' => ['text'],
 ],
 );
 
 $patterns = [];
 for ($i = 0; $i < 66; ++$i) {
 $patterns[] = str_repeat('w', $i);
 }
 
 foreach ([32, 33, 34, 64, 65] as $index) {
 expect($fuse->search($patterns[$index]))->toBeEmpty();
 }
 });
 
 it('handles search with hyphens', function () {
 $searchText = 'leverage-streams-to';
 
 $fuse = new Fuse(
 [
 [
 'name' => 'Streaming Service',
 'description' => 'Leverage-streams-to-ingest, analyze, monitor.',
 'tag' => 'Free',
 ],
 ],
 [
 'distance' => 1000,
 'includeScore' => true,
 'includeMatches' => true,
 'keys' => ['name', 'tag', 'description'],
 'minMatchCharLength' => floor(mb_strlen($searchText) * 0.6),
 'shouldSort' => false,
 ],
 );
 
 $results = $fuse->search($searchText);
 
 expect($results[0]['matches'])->toEqual([
 [
 'indices' => [[0, 18]],
 'key' => 'description',
 'value' => 'Leverage-streams-to-ingest, analyze, monitor.',
 ],
 ]);
 });
 
 it('handles search with spaces', function () {
 $searchText = 'leverage streams to';
 
 $fuse = new Fuse(
 [
 [
 'name' => 'Streaming Service',
 'description' => 'Leverage streams to ingest, analyze, monitor.',
 'tag' => 'Free',
 ],
 ],
 [
 'distance' => 1000,
 'includeScore' => true,
 'includeMatches' => true,
 'keys' => ['name', 'tag', 'description'],
 'minMatchCharLength' => floor(mb_strlen($searchText) * 0.6),
 'shouldSort' => false,
 ],
 );
 
 $results = $fuse->search($searchText);
 
 expect($results[0]['matches'])->toEqual([
 [
 'indices' => [[0, 18]],
 'key' => 'description',
 'value' => 'Leverage streams to ingest, analyze, monitor.',
 ],
 ]);
 });
 
 |