1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-26 09:10:40 -05:00

[bytes] fix bytesFindIndex and bytesFindLastIndex (#381)

This commit is contained in:
Jun Kato 2019-05-08 01:02:31 +09:00 committed by Ryan Dahl
parent 0f00676e8f
commit 8714252916
2 changed files with 22 additions and 7 deletions

View file

@ -6,10 +6,11 @@ export function bytesFindIndex(a: Uint8Array, pat: Uint8Array): number {
for (let i = 0; i < a.length; i++) { for (let i = 0; i < a.length; i++) {
if (a[i] !== s) continue; if (a[i] !== s) continue;
const pin = i; const pin = i;
let matched = 1; let matched = 1,
j = i;
while (matched < pat.length) { while (matched < pat.length) {
i++; j++;
if (a[i] !== pat[i - pin]) { if (a[j] !== pat[j - pin]) {
break; break;
} }
matched++; matched++;
@ -27,10 +28,11 @@ export function bytesFindLastIndex(a: Uint8Array, pat: Uint8Array): number {
for (let i = a.length - 1; i >= 0; i--) { for (let i = a.length - 1; i >= 0; i--) {
if (a[i] !== e) continue; if (a[i] !== e) continue;
const pin = i; const pin = i;
let matched = 1; let matched = 1,
j = i;
while (matched < pat.length) { while (matched < pat.length) {
i--; j--;
if (a[i] !== pat[pat.length - 1 - (pin - i)]) { if (a[j] !== pat[pat.length - 1 - (pin - j)]) {
break; break;
} }
matched++; matched++;

View file

@ -7,7 +7,7 @@ import {
import { test } from "../testing/mod.ts"; import { test } from "../testing/mod.ts";
import { assertEquals } from "../testing/asserts.ts"; import { assertEquals } from "../testing/asserts.ts";
test(function bytesBytesFindIndex(): void { test(function bytesBytesFindIndex1(): void {
const i = bytesFindIndex( const i = bytesFindIndex(
new Uint8Array([1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 3]), new Uint8Array([1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 3]),
new Uint8Array([0, 1, 2]) new Uint8Array([0, 1, 2])
@ -15,6 +15,11 @@ test(function bytesBytesFindIndex(): void {
assertEquals(i, 2); assertEquals(i, 2);
}); });
test(function bytesBytesFindIndex2(): void {
const i = bytesFindIndex(new Uint8Array([0, 0, 1]), new Uint8Array([0, 1]));
assertEquals(i, 1);
});
test(function bytesBytesFindLastIndex1(): void { test(function bytesBytesFindLastIndex1(): void {
const i = bytesFindLastIndex( const i = bytesFindLastIndex(
new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 3]), new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 3]),
@ -23,6 +28,14 @@ test(function bytesBytesFindLastIndex1(): void {
assertEquals(i, 3); assertEquals(i, 3);
}); });
test(function bytesBytesFindLastIndex2(): void {
const i = bytesFindLastIndex(
new Uint8Array([0, 1, 1]),
new Uint8Array([0, 1])
);
assertEquals(i, 0);
});
test(function bytesBytesBytesEqual(): void { test(function bytesBytesBytesEqual(): void {
const v = bytesEqual( const v = bytesEqual(
new Uint8Array([0, 1, 2, 3]), new Uint8Array([0, 1, 2, 3]),