summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJun Kato <i@junkato.jp>2019-05-08 01:02:31 +0900
committerRyan Dahl <ry@tinyclouds.org>2019-05-07 12:02:31 -0400
commit480b9e71ff5b377681341b2f28b6f36a44268172 (patch)
tree801deac4e1015a66f9b01561cc9cb59e76de84a3
parent14afad59aa64b23d983f4ac35068e958a4f25f48 (diff)
[bytes] fix bytesFindIndex and bytesFindLastIndex (denoland/deno_std#381)
Original: https://github.com/denoland/deno_std/commit/87142529163ea047066a2991f51cb2cf3001df74
-rw-r--r--bytes/bytes.ts14
-rw-r--r--bytes/bytes_test.ts15
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]),