refactor(simulator): random float generator signature simplification
authorJérôme Benoit <jerome.benoit@sap.com>
Fri, 10 Feb 2023 10:30:43 +0000 (11:30 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Fri, 10 Feb 2023 10:30:43 +0000 (11:30 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/utils/Utils.ts
test/utils/UtilsTest.ts

index 34ace09c50fe4bcbddf5b21015e9482fa72532c2..ab2a8a5f26302bf23d52aa3bf0a21e407d29ace8 100644 (file)
@@ -121,13 +121,15 @@ export default class Utils {
     return result;
   }
 
-  public static getRandomFloat(max = Number.MAX_VALUE, min = 0, negative = false): number {
-    if (max < min || max < 0 || min < 0) {
+  public static getRandomFloat(max = Number.MAX_VALUE, min = 0): number {
+    if (max < min) {
+      throw new RangeError('Invalid interval');
+    }
+    if (max - min === Infinity) {
       throw new RangeError('Invalid interval');
     }
     const randomPositiveFloat = crypto.randomBytes(4).readUInt32LE() / 0xffffffff;
-    const sign = negative && randomPositiveFloat < 0.5 ? -1 : 1;
-    return sign * (randomPositiveFloat * (max - min) + min);
+    return randomPositiveFloat * (max - min) + min;
   }
 
   public static getRandomInteger(max = Constants.MAX_RANDOM_INTEGER, min = 0): number {
index 9d694308fdda835948be94afc7c7c8e98656ec13..423d61f335dda19aebf894978eb047ea2697c9cd 100644 (file)
@@ -110,6 +110,9 @@ describe('Utils test suite', () => {
     expect(randomInteger).toBeGreaterThanOrEqual(0);
     expect(randomInteger).toBeLessThanOrEqual(Constants.MAX_RANDOM_INTEGER);
     expect(randomInteger).not.toEqual(Utils.getRandomInteger());
+    randomInteger = Utils.getRandomInteger(0, -Constants.MAX_RANDOM_INTEGER);
+    expect(randomInteger).toBeGreaterThanOrEqual(-Constants.MAX_RANDOM_INTEGER);
+    expect(randomInteger).toBeLessThanOrEqual(0);
     expect(() => Utils.getRandomInteger(0, 1)).toThrowError(
       'The value of "max" is out of range. It must be greater than the value of "min" (1). Received 1'
     );
@@ -138,11 +141,12 @@ describe('Utils test suite', () => {
     expect(randomFloat).toBeLessThanOrEqual(Number.MAX_VALUE);
     expect(randomFloat).not.toEqual(Utils.getRandomFloat());
     expect(() => Utils.getRandomFloat(0, 1)).toThrowError(new RangeError('Invalid interval'));
-    expect(() => Utils.getRandomFloat(-1)).toThrowError(new RangeError('Invalid interval'));
-    expect(() => Utils.getRandomFloat(0, -1)).toThrowError(new RangeError('Invalid interval'));
-    randomFloat = Utils.getRandomFloat(Number.MAX_VALUE, 0, true);
+    expect(() => Utils.getRandomFloat(Number.MAX_VALUE, -Number.MAX_VALUE)).toThrowError(
+      new RangeError('Invalid interval')
+    );
+    randomFloat = Utils.getRandomFloat(0, -Number.MAX_VALUE);
     expect(randomFloat).toBeGreaterThanOrEqual(-Number.MAX_VALUE);
-    expect(randomFloat).toBeLessThanOrEqual(Number.MAX_VALUE);
+    expect(randomFloat).toBeLessThanOrEqual(0);
   });
 
   it('Verify isIterable()', () => {