From 87142529163ea047066a2991f51cb2cf3001df74 Mon Sep 17 00:00:00 2001 From: Jun Kato Date: Wed, 8 May 2019 01:02:31 +0900 Subject: [PATCH] [bytes] fix bytesFindIndex and bytesFindLastIndex (#381) --- bytes/bytes.ts | 14 ++++++++------ bytes/bytes_test.ts | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/bytes/bytes.ts b/bytes/bytes.ts index 080ec4445d..a79a9ed56e 100644 --- a/bytes/bytes.ts +++ b/bytes/bytes.ts @@ -6,10 +6,11 @@ export function bytesFindIndex(a: Uint8Array, pat: Uint8Array): number { for (let i = 0; i < a.length; i++) { if (a[i] !== s) continue; const pin = i; - let matched = 1; + let matched = 1, + j = i; while (matched < pat.length) { - i++; - if (a[i] !== pat[i - pin]) { + j++; + if (a[j] !== pat[j - pin]) { break; } matched++; @@ -27,10 +28,11 @@ export function bytesFindLastIndex(a: Uint8Array, pat: Uint8Array): number { for (let i = a.length - 1; i >= 0; i--) { if (a[i] !== e) continue; const pin = i; - let matched = 1; + let matched = 1, + j = i; while (matched < pat.length) { - i--; - if (a[i] !== pat[pat.length - 1 - (pin - i)]) { + j--; + if (a[j] !== pat[pat.length - 1 - (pin - j)]) { break; } matched++; diff --git a/bytes/bytes_test.ts b/bytes/bytes_test.ts index c0aa1519dd..9d4754a39e 100644 --- a/bytes/bytes_test.ts +++ b/bytes/bytes_test.ts @@ -7,7 +7,7 @@ import { import { test } from "../testing/mod.ts"; import { assertEquals } from "../testing/asserts.ts"; -test(function bytesBytesFindIndex(): void { +test(function bytesBytesFindIndex1(): void { const i = bytesFindIndex( new Uint8Array([1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 3]), new Uint8Array([0, 1, 2]) @@ -15,6 +15,11 @@ test(function bytesBytesFindIndex(): void { 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 { const i = bytesFindLastIndex( new Uint8Array([0, 1, 2, 0, 1, 2, 0, 1, 3]), @@ -23,6 +28,14 @@ test(function bytesBytesFindLastIndex1(): void { 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 { const v = bytesEqual( new Uint8Array([0, 1, 2, 3]),