diff options
| author | Jun Kato <i@junkato.jp> | 2019-05-08 01:02:31 +0900 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2019-05-07 12:02:31 -0400 |
| commit | 480b9e71ff5b377681341b2f28b6f36a44268172 (patch) | |
| tree | 801deac4e1015a66f9b01561cc9cb59e76de84a3 | |
| parent | 14afad59aa64b23d983f4ac35068e958a4f25f48 (diff) | |
[bytes] fix bytesFindIndex and bytesFindLastIndex (denoland/deno_std#381)
Original: https://github.com/denoland/deno_std/commit/87142529163ea047066a2991f51cb2cf3001df74
| -rw-r--r-- | bytes/bytes.ts | 14 | ||||
| -rw-r--r-- | bytes/bytes_test.ts | 15 |
2 files changed, 22 insertions, 7 deletions
diff --git a/bytes/bytes.ts b/bytes/bytes.ts index 080ec4445..a79a9ed56 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 c0aa1519d..9d4754a39 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]), |
