diff --git a/CHANGELOG.md b/CHANGELOG.md index 417a8f48..e76ca712 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## [Unreleased] - 🌟 [mixte] 新增 `isBoolean` 工具方法 - 💄 [mixte] 优化 `random`, `randomString` 工具方法类型定义 + - ⚠️ [mixte] 修改 `randomLetter` 工具方法逻辑, 当传参不是布尔值时, 随机一个小写或大写英文字母 ( 之前是随机一个小写字母 ) ## [v0.0.1-beta.13] - 📅 2023-07-22 diff --git a/packages/mixte/src/random/index.test.ts b/packages/mixte/src/random/index.test.ts index de6db6c9..ff7f55fe 100644 --- a/packages/mixte/src/random/index.test.ts +++ b/packages/mixte/src/random/index.test.ts @@ -1,4 +1,5 @@ -import { random, randomBoolean, randomLetter, randomLowercaseLetter, randomNatural, randomString, randomUppercaseLetter } from 'mixte'; +import { isBoolean, random, randomBoolean, randomLetter, randomLowercaseLetter, randomNatural, randomString, randomUppercaseLetter } from 'mixte'; +import { types } from '../is/testTypes'; describe('randomNatural', () => { test('在传入的两个自然数之间随机生成一个自然数', () => { @@ -122,15 +123,20 @@ describe('randomUppercaseLetter', () => { }); describe('randomLetter', () => { - test('默认随机一个小写英文字母', () => { + test('默认随机一个小写或大写英文字母', () => { const letters = new Set(); - for (let i = 0; i < 2600; i++) + for (let i = 0; i < 5200; i++) letters.add(randomLetter()); expect( Array.from(letters).sort(), - ).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']); + ).toEqual( + [ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + ].sort(), + ); }); test('传入 true, 则随机一个大写英文字母', () => { @@ -154,6 +160,39 @@ describe('randomLetter', () => { Array.from(letters).sort(), ).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']); }); + + test('传入非布尔值, 则随机一个小写或大写英文字母', () => { + Object.values(types).forEach((values) => { + values.forEach((value) => { + const letters = new Set(); + const count = isBoolean(value) ? 2600 : 5200; + + for (let i = 0; i < count; i++) + letters.add(randomLetter(value)); + + if (value === true) { + expect( + Array.from(letters).sort(), + ).toEqual(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']); + } + else if (value === false) { + expect( + Array.from(letters).sort(), + ).toEqual(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']); + } + else { + expect( + Array.from(letters).sort(), + ).toEqual( + [ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + ].sort(), + ); + } + }); + }); + }); }); describe('randomString', () => { diff --git a/packages/mixte/src/random/index.ts b/packages/mixte/src/random/index.ts index 62997d89..7b3136fd 100644 --- a/packages/mixte/src/random/index.ts +++ b/packages/mixte/src/random/index.ts @@ -1,3 +1,5 @@ +import { isBoolean } from 'mixte'; + /** * 在传入的两个自然数之间随机生成一个自然数 * @param from 最小的自然数 @@ -65,16 +67,23 @@ export function randomUppercaseLetter() { /** * 随机一个英文字母 - * @param uppercase 是否大写 ( default: false ) + * @param uppercase 是否大写 * @example * - * randomLetter(); // -> a ~ z + * randomLetter(); // -> a ~ z, A ~ Z * randomLetter(true); // -> A ~ Z + * randomLetter(false); // -> a ~ z */ -export function randomLetter(uppercase = false) { - return String.fromCharCode( - uppercase ? randomNatural(65, 90) : randomNatural(97, 122), - ); +export function randomLetter(uppercase?: boolean) { + if (isBoolean(uppercase)) { + return uppercase + ? randomUppercaseLetter() + : randomLowercaseLetter(); + } + + return randomNatural(0, 1) + ? randomLowercaseLetter() + : randomUppercaseLetter(); } /** 生成字符串的选项 */