Skip to content
This repository was archived by the owner on Dec 30, 2023. It is now read-only.

Commit f2f017d

Browse files
authored
refactor(number): ♻️ Major reorganization (#107)
1 parent 64ebd17 commit f2f017d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+411
-435
lines changed

.changeset/eighty-flowers-glow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@terminal-nerds/snippets-number": minor
3+
---
4+
5+
♻️ Major reorganization

packages/number/README.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
| ------------------------------------------ | ----------------------------------------------------- |
2929
| [`@terminal-nerds/snippets-number/math`] | ![math size gzip badge] ![math size brotli badge] |
3030
| [`@terminal-nerds/snippets-number/misc`] | ![misc size gzip badge] ![misc size brotli badge] |
31-
| [`@terminal-nerds/snippets-number/random`] | ![random size gzip badge] ![random size brotli badge] |
32-
| [`@terminal-nerds/snippets-number/round`] | ![round size gzip badge] ![round size brotli badge] |
3331
| [`@terminal-nerds/snippets-number/schema`] | ![schema size gzip badge] ![schema size brotli badge] |
3432

3533
<!-- prettier-ignore-start -->
@@ -42,14 +40,6 @@
4240
[misc size gzip badge]: https://badgen.net/badgesize/gzip/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/misc/misc.js?label=gzip
4341
[misc size brotli badge]: https://badgen.net/badgesize/brotli/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/misc/misc.js?label=brotli
4442

45-
[`@terminal-nerds/snippets-number/random`]: https://github.com/terminal-nerds/snippets/blob/main/packages/number/source/random/random.ts
46-
[random size gzip badge]: https://badgen.net/badgesize/gzip/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/random/random.js?label=gzip
47-
[random size brotli badge]: https://badgen.net/badgesize/brotli/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/random/random.js?label=brotli
48-
49-
[`@terminal-nerds/snippets-number/round`]: https://github.com/terminal-nerds/snippets/blob/main/packages/number/source/round/round.ts
50-
[round size gzip badge]: https://badgen.net/badgesize/gzip/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/round/round.js?label=gzip
51-
[round size brotli badge]: https://badgen.net/badgesize/brotli/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/round/round.js?label=brotli
52-
5343
[`@terminal-nerds/snippets-number/schema`]: https://github.com/terminal-nerds/snippets/blob/main/packages/number/source/schema/schema.ts
5444
[schema size gzip badge]: https://badgen.net/badgesize/gzip/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/schema/schema.js?label=gzip
5545
[schema size brotli badge]: https://badgen.net/badgesize/brotli/file-url/unpkg.com/@terminal-nerds/snippets-number/dist/schema/schema.js?label=brotli

packages/number/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
],
4848
"dependencies": {
4949
"@terminal-nerds/snippets-runtime": "workspace:*",
50+
"@terminal-nerds/snippets-string": "workspace:^",
5051
"@terminal-nerds/snippets-type": "workspace:*",
5152
"type-fest": "3.11.0",
5253
"zod": "3.21.4"

packages/number/source/main.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
/* MODULES */
2-
export * from "./math/math.ts";
3-
export * from "./misc/misc.ts";
4-
export * from "./random/random.ts";
5-
export * from "./round/round.ts";
6-
export * from "./schema/schema.ts";
2+
export * from "./math/index.ts";
3+
export * from "./misc/index.ts";
4+
export * from "./schema/index.ts";

packages/number/source/math/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from "./sub/fibonacci.ts";
2+
export * from "./sub/round.ts";
3+
export * from "./sub/sum.ts";

packages/number/source/math/math.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { returns, throws } from "@terminal-nerds/snippets-test/unit";
2-
import { describe, expect, it } from "vitest";
2+
import { describe, it } from "vitest";
33
import { ZodError } from "zod";
44

5-
import { fibonacci } from "./math.ts";
5+
import { getFibonacciNumber } from "./fibonacci.ts";
66

77
const FIBONACCI_NUMBERS = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] as const;
88
const INVALID_INPUTS = [0, -1, 1.5] as const;
99

10-
describe("fibonacci(number)", () => {
11-
it(throws(ZodError).on(`invalid number inputs`).samples(INVALID_INPUTS), () => {
10+
describe("getFibonacciNumber(number)", () => {
11+
it(throws(ZodError).on(`invalid number inputs`).samples(INVALID_INPUTS), ({ expect }) => {
1212
for (const invalid of INVALID_INPUTS) {
13-
expect(() => fibonacci(invalid)).toThrowError(ZodError);
13+
expect(() => getFibonacciNumber(invalid)).toThrowError(ZodError);
1414
}
1515
});
1616

17-
it(returns({ what: "Number", value: "<value>" }).on(`valid inputs - positive integers`), () => {
17+
it(returns({ what: "Number", value: "<value>" }).on(`valid inputs - positive integers`), ({ expect }) => {
1818
for (const [index, expected] of FIBONACCI_NUMBERS.entries()) {
19-
expect(fibonacci(index + 1)).toBe(expected);
19+
expect(getFibonacciNumber(index + 1)).toBe(expected);
2020
}
2121
});
2222
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { validateNumberIntegerPositive } from "../../schema/sub/integer.ts";
2+
3+
/** @see {@link https://en.wikipedia.org/wiki/Fibonacci_number} Fibonacci number */
4+
export function getFibonacciNumber(number: number): number {
5+
validateNumberIntegerPositive(number);
6+
7+
if (number === 1 || number === 2) {
8+
return 1;
9+
}
10+
11+
return getFibonacciNumber(number - 1) + getFibonacciNumber(number - 2);
12+
}

packages/number/source/round/round.test.ts renamed to packages/number/source/math/sub/round.test.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { SAMPLE_PRIMITIVES } from "@terminal-nerds/snippets-test/sample";
22
import { returns, throws } from "@terminal-nerds/snippets-test/unit";
3-
import { describe, expect, it } from "vitest";
3+
import { describe, it } from "vitest";
44
import { ZodError } from "zod";
55

6-
import { isNumber } from "../schema/groups/number/number.ts";
7-
import { roundDownNumber, roundUpNumber } from "./round.ts";
6+
import { isNumber } from "../../schema/sub/number.ts";
7+
import { roundNumberDown, roundNumberUp } from "./round.ts";
88

99
const SAMPLE_NON_NUMBERS = SAMPLE_PRIMITIVES.filter((v) => !isNumber(v));
1010
const SAMPLE_FLOAT_NUMBERS = [1.234_567_89, -9.876_543_21, 0.005, -100.123_456_789] as const;
1111

12-
describe(`roundUpNumber(value, options?)`, () => {
13-
it(throws(ZodError).on(`values which is not a number`), () => {
12+
describe(`roundNumberUp(value, options?)`, () => {
13+
it(throws(ZodError).on(`values which is not a number`), ({ expect }) => {
1414
for (const value of SAMPLE_NON_NUMBERS) {
1515
// @ts-expect-error Testing
16-
expect(() => roundUpNumber(value)).toThrowError(ZodError);
16+
expect(() => roundNumberUp(value)).toThrowError(ZodError);
1717
}
1818
});
1919

2020
const expectedDoubles = [1.23, -9.88, 0.01, -100.12] as const;
2121

2222
for (const [index, sampleFloat] of SAMPLE_FLOAT_NUMBERS.entries()) {
23-
it(returns(expectedDoubles.at(index)).on(`sample float number`).sample(sampleFloat), () => {
24-
expect(roundUpNumber(sampleFloat)).toEqual(expectedDoubles.at(index));
23+
it(returns(expectedDoubles.at(index)).on(`sample float number`).sample(sampleFloat), ({ expect }) => {
24+
expect(roundNumberUp(sampleFloat)).toEqual(expectedDoubles.at(index));
2525
});
2626
}
2727

@@ -33,26 +33,26 @@ describe(`roundUpNumber(value, options?)`, () => {
3333
.on(`sample float number`)
3434
.sample(sampleFloat)
3535
.and(`decimals set to: 3`),
36-
() => {
37-
expect(roundUpNumber(sampleFloat, { decimals: 3 })).toEqual(expectedToThreeDecimals.at(index));
36+
({ expect }) => {
37+
expect(roundNumberUp(sampleFloat, { decimals: 3 })).toEqual(expectedToThreeDecimals.at(index));
3838
},
3939
);
4040
}
4141
});
4242

43-
describe(`roundDownNumber(value, options?)`, () => {
44-
it(throws(ZodError).on(`values which is not a number`), () => {
43+
describe(`roundNumberDown(value, options?)`, () => {
44+
it(throws(ZodError).on(`values which is not a number`), ({ expect }) => {
4545
for (const value of SAMPLE_NON_NUMBERS) {
4646
// @ts-expect-error Testing
47-
expect(() => roundDownNumber(value)).toThrowError(ZodError);
47+
expect(() => roundNumberDown(value)).toThrowError(ZodError);
4848
}
4949
});
5050

5151
const expectedDoubles = [1.23, -9.88, 0, -100.13] as const;
5252

5353
for (const [index, sampleFloat] of SAMPLE_FLOAT_NUMBERS.entries()) {
54-
it(returns(expectedDoubles.at(index)).on(`sample float number`).sample(sampleFloat), () => {
55-
expect(roundDownNumber(sampleFloat)).toEqual(expectedDoubles.at(index));
54+
it(returns(expectedDoubles.at(index)).on(`sample float number`).sample(sampleFloat), ({ expect }) => {
55+
expect(roundNumberDown(sampleFloat)).toEqual(expectedDoubles.at(index));
5656
});
5757
}
5858

@@ -64,8 +64,8 @@ describe(`roundDownNumber(value, options?)`, () => {
6464
.on(`sample float number`)
6565
.sample(sampleFloat)
6666
.and(`decimals set to: 3`),
67-
() => {
68-
expect(roundDownNumber(sampleFloat, { decimals: 3 })).toEqual(expectedToThreeDecimals.at(index));
67+
({ expect }) => {
68+
expect(roundNumberDown(sampleFloat, { decimals: 3 })).toEqual(expectedToThreeDecimals.at(index));
6969
},
7070
);
7171
}

packages/number/source/round/round.ts renamed to packages/number/source/math/sub/round.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { validateNumber } from "../schema/groups/number/number.ts";
1+
import { validateNumber } from "../../schema/sub/number.ts";
22

3+
/*prettier-ignore */
34
export interface RoundingNumberOptions {
45
/** @defaultValue `2` */
56
decimals?: number;
67
}
78

89
/** Round **UP** number to specific decimals length. */
9-
export function roundUpNumber(value: number, options: RoundingNumberOptions = {}): number {
10+
export function roundNumberUp(value: number, options: RoundingNumberOptions = {}): number {
1011
validateNumber(value);
1112

1213
const { decimals = 2 } = options;
@@ -15,7 +16,7 @@ export function roundUpNumber(value: number, options: RoundingNumberOptions = {}
1516
}
1617

1718
/** Round **DOWN** number to specific decimals length. */
18-
export function roundDownNumber(value: number, options: RoundingNumberOptions = {}): number {
19+
export function roundNumberDown(value: number, options: RoundingNumberOptions = {}): number {
1920
validateNumber(value);
2021

2122
const { decimals = 2 } = options;

0 commit comments

Comments
 (0)