Skip to content

Commit c594331

Browse files
authored
Merge branch 'next' into docs/fix-see-also
2 parents 57890fc + e6213a8 commit c594331

File tree

13 files changed

+130
-155
lines changed

13 files changed

+130
-155
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ jobs:
110110

111111
e2e-test:
112112
runs-on: ubuntu-latest
113-
timeout-minutes: 15
113+
container: cypress/browsers:node18.12.0-chrome107
114+
timeout-minutes: 10
114115
name: 'E2E Doc Test: node-18, ubuntu-latest'
115116
steps:
116117
- name: Checkout
@@ -121,11 +122,6 @@ jobs:
121122
with:
122123
version: 7
123124

124-
- name: Set node version to 18
125-
uses: actions/setup-node@v3
126-
with:
127-
node-version: 18
128-
129125
- name: Install deps
130126
run: pnpm install
131127

@@ -134,11 +130,6 @@ jobs:
134130

135131
- id: e2e
136132
name: Run e2e
137-
run: timeout 5m pnpm run docs:test:e2e:run
138-
continue-on-error: true
139-
140-
- name: Run e2e (2nd attempt)
141-
if: ${{ steps.e2e.outcome != 'success' }}
142133
run: pnpm run docs:test:e2e:run
143134

144135
lint:

docs/guide/upgrading.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,20 @@ The `faker.address.*` methods will continue to work as an alias in v8 and v9, bu
103103
The number-related methods previously found in `faker.datatype` have been moved to a new `faker.number` module.
104104
For the old `faker.datatype.number` method you should replace with `faker.number.int` or `faker.number.float` depending on the precision required.
105105

106-
faker.datatype.number() //35
107-
faker.datatype.int() //35
108-
109-
faker.datatype.number({precision:0.01}) //35.21
110-
faker.datatype.float({precision:0.01}) //35.21
106+
By default, `faker.number.float` no longer defaults to a precision of 0.01
107+
108+
```js
109+
// OLD
110+
faker.datatype.number({ max: 100 }); // 35
111+
faker.datatype.number({ max: 100, precision: 0.01 }); // 35.21
112+
faker.datatype.float({ max: 100 }); // 35.21
113+
faker.datatype.float({ max: 100, precision: 0.001 }); // 35.211
114+
115+
// NEW
116+
faker.number.int({ max: 100 }); // 35
117+
faker.number.float({ max: 100 }); // 35.21092065742612
118+
faker.number.float({ max: 100, precision: 0.01 }); // 35.21
119+
```
111120

112121
| Old method | New method |
113122
| ----------------------- | ------------------------------------------ |

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@
9090
"@types/sanitize-html": "~2.8.0",
9191
"@types/semver": "~7.3.13",
9292
"@types/validator": "~13.7.10",
93-
"@typescript-eslint/eslint-plugin": "~5.48.2",
94-
"@typescript-eslint/parser": "~5.48.2",
93+
"@typescript-eslint/eslint-plugin": "~5.49.0",
94+
"@typescript-eslint/parser": "~5.49.0",
9595
"@vitest/coverage-c8": "~0.27.3",
9696
"@vitest/ui": "~0.27.3",
9797
"@vueuse/core": "~9.11.1",
@@ -126,7 +126,7 @@
126126
"vitest": "~0.27.3",
127127
"vue": "~3.2.45"
128128
},
129-
"packageManager": "pnpm@7.25.1",
129+
"packageManager": "pnpm@7.26.2",
130130
"engines": {
131131
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
132132
"npm": ">=6.14.13"

pnpm-lock.yaml

Lines changed: 37 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/internal/mersenne/mersenne.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,10 @@ import Twister from './twister';
77
*/
88
export interface Mersenne {
99
/**
10-
* Generates a random number between `[min, max)`. The result is already floored.
11-
*
12-
* @param options The options to generate a random number.
13-
* @param options.min The minimum number.
14-
* @param options.max The maximum number.
10+
* Generates a random float between `[0, 1)`.
11+
* This method is called `next` so that it could be used as an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterator_protocol)
1512
*/
16-
next(options: { max: number; min: number }): number;
13+
next(): number;
1714

1815
/**
1916
* Sets the seed to use.
@@ -34,10 +31,9 @@ export default function mersenne(): Mersenne {
3431
twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
3532

3633
return {
37-
next({ min, max }): number {
38-
return Math.floor(twister.genrandReal2() * (max - min) + min);
34+
next(): number {
35+
return twister.genrandReal2();
3936
},
40-
4137
seed(seed: number | number[]): void {
4238
if (typeof seed === 'number') {
4339
twister.initGenrand(seed);

src/modules/color/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ export class ColorModule {
377377

378378
color = Array.from({ length: 3 }, () => this.faker.number.int(255));
379379
if (includeAlpha) {
380-
color.push(this.faker.number.float());
380+
color.push(this.faker.number.float({ precision: 0.01 }));
381381
cssFunction = 'rgba';
382382
}
383383

@@ -458,7 +458,7 @@ export class ColorModule {
458458
}): string | number[];
459459
cmyk(options?: { format?: ColorFormat }): string | number[] {
460460
const color: string | number[] = Array.from({ length: 4 }, () =>
461-
this.faker.number.float()
461+
this.faker.number.float({ precision: 0.01 })
462462
);
463463
return toColorFormat(color, options?.format || 'decimal', 'cmyk');
464464
}
@@ -568,7 +568,7 @@ export class ColorModule {
568568
}): string | number[] {
569569
const hsl: number[] = [this.faker.number.int(360)];
570570
for (let i = 0; i < (options?.includeAlpha ? 3 : 2); i++) {
571-
hsl.push(this.faker.number.float());
571+
hsl.push(this.faker.number.float({ precision: 0.01 }));
572572
}
573573

574574
return toColorFormat(
@@ -674,7 +674,7 @@ export class ColorModule {
674674
}): string | number[] {
675675
const hsl: number[] = [this.faker.number.int(360)];
676676
for (let i = 0; i < 2; i++) {
677-
hsl.push(this.faker.number.float());
677+
hsl.push(this.faker.number.float({ precision: 0.01 }));
678678
}
679679

680680
return toColorFormat(hsl, options?.format || 'decimal', 'hwb');

src/modules/number/index.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ export class NumberModule {
8181
const mersenne: Mersenne =
8282
// @ts-expect-error: access private member field
8383
this.faker._mersenne;
84-
85-
return mersenne.next({ min: effectiveMin, max: effectiveMax + 1 });
84+
const real = mersenne.next();
85+
return Math.floor(real * (effectiveMax + 1 - effectiveMin) + effectiveMin);
8686
}
8787

8888
/**
@@ -91,13 +91,13 @@ export class NumberModule {
9191
* @param options Upper bound or options object. Defaults to `{}`.
9292
* @param options.min Lower bound for generated number. Defaults to `0.0`.
9393
* @param options.max Upper bound for generated number. Defaults to `1.0`.
94-
* @param options.precision Precision of the generated number. Defaults to `0.01`.
94+
* @param options.precision Precision of the generated number, for example `0.01` will round to 2 decimal points.
9595
*
9696
* @example
97-
* faker.number.float() // 0.89
98-
* faker.number.float(3) // 1.14
99-
* faker.number.float({ min: -1000000 }) // -823469.91
100-
* faker.number.float({ max: 100 }) // 27.28
97+
* faker.number.float() // 0.5688541042618454
98+
* faker.number.float(3) // 2.367973240558058
99+
* faker.number.float({ min: -1000000 }) //-780678.849672846
100+
* faker.number.float({ max: 100 }) // 17.3687307164073
101101
* faker.number.float({ precision: 0.1 }) // 0.9
102102
* faker.number.float({ min: 10, max: 100, precision: 0.001 }) // 35.415
103103
*
@@ -133,7 +133,7 @@ export class NumberModule {
133133
};
134134
}
135135

136-
const { min = 0, max = 1, precision = 0.01 } = options;
136+
const { min = 0, max = 1, precision } = options;
137137

138138
if (max === min) {
139139
return min;
@@ -143,13 +143,23 @@ export class NumberModule {
143143
throw new FakerError(`Max ${max} should be greater than min ${min}.`);
144144
}
145145

146-
const factor = 1 / precision;
147-
const int = this.int({
148-
min: min * factor,
149-
max: max * factor,
150-
});
146+
if (precision !== undefined) {
147+
if (precision <= 0) {
148+
throw new FakerError(`Precision should be greater than 0.`);
149+
}
151150

152-
return int / factor;
151+
const factor = 1 / precision;
152+
const int = this.int({
153+
min: min * factor,
154+
max: max * factor,
155+
});
156+
return int / factor;
157+
} else {
158+
// @ts-expect-error: access private member field
159+
const mersenne: Mersenne = this.faker._mersenne;
160+
const real = mersenne.next();
161+
return real * (max - min) + min;
162+
}
153163
}
154164

155165
/**

0 commit comments

Comments
 (0)