Skip to content

Commit 912d927

Browse files
committed
⚡ perf
1 parent e862810 commit 912d927

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { countChar, countCharCool } from "./bean_counting.ts";
2+
3+
const lorem = `Lorem ipsum dolor sit amet, consectetur adipiscing
4+
elit. Donec iaculis enim et sem pharetra sagittis.
5+
Nunc semper, neque id volutpat aliquet, sapien diam vehicula augue,
6+
semper efficitur mauris ipsum ut justo. Aenean urna tortor,
7+
tempus vitae sodales non, posuere id mauris. Quisque consectetur,
8+
turpis sed sagittis fermentum, orci magna pharetra sem, vitae vulputate
9+
risus urna vitae eros. Aenean sagittis ipsum dolor, sed iaculis lacus
10+
faucibus sit amet. Proin at suscipit dolor. Sed volutpat ipsum id metus
11+
dictum gravida. Curabitur ut diam ac sapien finibus mattis.
12+
13+
Vivamus lobortis suscipit lorem, quis rutrum quam molestie quis.
14+
In hac habitasse platea dictumst. Nunc id mi id ipsum consequat
15+
dictum vitae a mi. Quisque sapien est, consequat nec neque aliquet,
16+
porttitor mollis leo.`;
17+
18+
Deno.bench("[countCharCool]", { group: "Counting" }, () => {
19+
countCharCool(lorem, "q");
20+
});
21+
22+
Deno.bench("[countCharRegex]", { group: "Counting" }, () => {
23+
countChar(lorem, "q");
24+
});
Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
import {
22
countBs,
33
countChar,
4+
countCharCool,
45
counterOcurrencesCreator,
56
} from "./bean_counting.ts";
67
import { assertEquals } from "../../deps.ts";
78

9+
const lorem = `Lorem ipsum dolor sit amet, consectetur adipiscing elit.`;
10+
811
Deno.test("[countBs]", () => {
912
assertEquals(countBs("BBBaB"), 4);
10-
assertEquals(countBs("111aaa"), 0);
13+
assertEquals(countBs(lorem), 0);
14+
});
15+
16+
Deno.test("[countCharCool]", () => {
17+
assertEquals(countCharCool(lorem, "o"), 4);
1118
});
1219

1320
Deno.test("[countChar]", () => {
14-
assertEquals(countChar("BBBa", "B"), 3);
21+
assertEquals(countChar(lorem, "s"), 4);
1522
});
1623

1724
Deno.test("[counterOcurrencesCreator]", () => {
18-
const countEs = counterOcurrencesCreator("E");
25+
const countEs = counterOcurrencesCreator("e");
26+
27+
assertEquals(countEs(lorem), 5);
28+
});
1929

20-
assertEquals(countEs("EEEEaaa33"), 4);
30+
Deno.test("[countChar vs countCharCool]", () => {
31+
assertEquals(countCharCool(lorem, "c"), countChar(lorem, "c"));
2132
});

src/functions/bean_counting.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1-
export function countChar(text: string, charToSearch: string) {
1+
export function countCharCool(text: string, charToSearch: string) {
22
const { length } = [...text].filter((letter) => letter === charToSearch);
33
return length;
44
}
55

6+
// Almost 9 times faster!
7+
export function countChar(text: string, charToSearch: string) {
8+
const expression = new RegExp(charToSearch, "gi");
9+
const { length } = text.match(expression) ?? [];
10+
return length;
11+
}
12+
613
export function counterOcurrencesCreator(charToSearch: string) {
714
return (text: string) => countChar(text, charToSearch);
815
}

0 commit comments

Comments
 (0)