Skip to content

Commit d933a60

Browse files
fix : resolve lint and doctests issue for xorshift128
1 parent fff3a25 commit d933a60

3 files changed

Lines changed: 482 additions & 0 deletions

File tree

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
2+
{{alias}}()
3+
Returns a xorshift128+ pseudorandom number generator.
4+
5+
This pseudorandom number generator (PRNG) is a 128-bit xorshift PRNG
6+
with a period of approximately 2^128.
7+
8+
The generator produces 64-bit pseudorandom integers using BigInt
9+
arithmetic.
10+
11+
The generator is suitable for general-purpose use and Monte Carlo
12+
simulations. For cryptographic applications, use a cryptographically
13+
secure pseudorandom number generator (CSPRNG).
14+
15+
Returns
16+
-------
17+
rng: Function
18+
Pseudorandom number generator (PRNG).
19+
20+
Examples
21+
--------
22+
> var rng = {{alias}}();
23+
> var v = rng();
24+
25+
26+
{{alias}}( options )
27+
Returns a xorshift128+ pseudorandom number generator with specified options.
28+
29+
Parameters
30+
----------
31+
options: Object (optional)
32+
Options.
33+
34+
options.seed: integer|bigint (optional)
35+
Pseudorandom number generator seed. The seed may be either a
36+
non-negative integer or BigInt.
37+
38+
options.state: Array<bigint> (optional)
39+
Pseudorandom number generator state. If provided, the `seed` option
40+
is ignored.
41+
42+
options.copy: boolean (optional)
43+
Boolean indicating whether to copy a provided pseudorandom number
44+
generator state. Setting this option to `false` allows sharing state
45+
between two or more pseudorandom number generators. Setting this option
46+
to `true` ensures that a returned generator has exclusive control over
47+
its internal state. Default: true.
48+
49+
Returns
50+
-------
51+
rng: Function
52+
Pseudorandom number generator (PRNG).
53+
54+
Examples
55+
--------
56+
// Basic usage:
57+
> var rng = {{alias}}();
58+
> var v = rng();
59+
> v = rng();
60+
61+
// Provide a seed:
62+
> var BigInt = require( '@stdlib/bigint/ctor' );
63+
> rng = {{alias}}( { 'seed': BigInt( 1234 ) } );
64+
> v = rng();
65+
66+
67+
rng()
68+
Returns a pseudorandom 64-bit unsigned integer.
69+
70+
Returns
71+
-------
72+
r: bigint
73+
Pseudorandom number.
74+
75+
Examples
76+
--------
77+
> var rng = {{alias}}();
78+
> var v = rng();
79+
80+
81+
rng.normalized()
82+
Returns a pseudorandom number on the interval `[0,1)`.
83+
84+
Returns
85+
-------
86+
r: number
87+
Pseudorandom number.
88+
89+
Examples
90+
--------
91+
> var rng = {{alias}}();
92+
> var v = rng.normalized();
93+
94+
95+
rng.copy()
96+
Returns a copy of the pseudorandom number generator.
97+
98+
Returns
99+
-------
100+
copy: Function
101+
Copy of the pseudorandom number generator.
102+
103+
Examples
104+
--------
105+
> var rng = {{alias}}();
106+
> var copy = rng.copy();
107+
> var v1 = rng();
108+
> var v2 = copy();
109+
110+
111+
rng.NAME
112+
Generator name.
113+
114+
Examples
115+
--------
116+
> var rng = {{alias}}();
117+
> var str = rng.NAME
118+
'xorshift128+'
119+
120+
121+
rng.seed
122+
Pseudorandom number generator seed.
123+
124+
Examples
125+
--------
126+
> var rng = {{alias}}( { 'seed': BigInt( 1234 ) } );
127+
> var seed = rng.seed;
128+
129+
130+
rng.state
131+
Generator state.
132+
133+
Examples
134+
--------
135+
> var rng = {{alias}}();
136+
> var v = rng();
137+
> v = rng();
138+
> v = rng();
139+
140+
// Get the current state:
141+
> var state = rng.state
142+
<Array<bigint>>
143+
144+
> v = rng();
145+
> v = rng();
146+
147+
// Set the state:
148+
> rng.state = state;
149+
150+
// Replay the last two pseudorandom numbers:
151+
> v = rng();
152+
> v = rng();
153+
154+
155+
rng.toJSON()
156+
Serializes the pseudorandom number generator as a JSON object.
157+
158+
Returns
159+
-------
160+
out: Object
161+
JSON representation.
162+
163+
Examples
164+
--------
165+
> var rng = {{alias}}();
166+
> var o = rng.toJSON()
167+
{ 'type': 'PRNG', 'name': 'xorshift128+', 'state': [...], 'params': [] }
168+
169+
See Also
170+
--------
171+
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
/*
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2026 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
// TypeScript Version: 4.1
20+
21+
/// <reference types="@stdlib/types"/>
22+
23+
/**
24+
* Interface defining `factory` options.
25+
*/
26+
interface Options {
27+
/**
28+
* Pseudorandom number generator seed.
29+
*/
30+
seed?: number | bigint;
31+
32+
/**
33+
* Pseudorandom number generator state.
34+
*/
35+
state?: Array<bigint>;
36+
37+
/**
38+
* Specifies whether to copy a provided pseudorandom number generator state.
39+
*/
40+
copy?: boolean;
41+
}
42+
43+
/**
44+
* Interface for PRNG properties and methods.
45+
*/
46+
interface PRNG {
47+
/**
48+
* Generator name.
49+
*/
50+
readonly NAME: string;
51+
52+
/**
53+
* PRNG seed.
54+
*/
55+
readonly seed: bigint;
56+
57+
/**
58+
* PRNG state.
59+
*/
60+
state: Array<bigint>;
61+
62+
/**
63+
* Serializes the pseudorandom number generator as a JSON object.
64+
*
65+
* @returns JSON representation
66+
*/
67+
toJSON(): {
68+
type: string;
69+
name: string;
70+
state: Array<bigint>;
71+
params: Array<unknown>;
72+
};
73+
}
74+
75+
/**
76+
* Interface for generating pseudorandom 64-bit unsigned integers.
77+
*/
78+
interface NullaryFunction extends PRNG {
79+
/**
80+
* Returns a pseudorandom 64-bit unsigned integer.
81+
*
82+
* @returns pseudorandom number
83+
*/
84+
(): bigint;
85+
86+
/**
87+
* Returns a pseudorandom number on the interval `[0,1)`.
88+
*
89+
* @returns pseudorandom number
90+
*/
91+
normalized(): number;
92+
93+
/**
94+
* Returns a copy of the PRNG.
95+
*
96+
* @returns copy of the PRNG
97+
*/
98+
copy(): NullaryFunction;
99+
}
100+
101+
/**
102+
* Interface for the xorshift128+ PRNG factory.
103+
*/
104+
interface Factory {
105+
/**
106+
* Returns a xorshift128+ pseudorandom number generator.
107+
*
108+
* @param options - function options
109+
* @param options.seed - pseudorandom number generator seed
110+
* @param options.state - pseudorandom number generator state
111+
* @param options.copy - boolean indicating whether to copy a provided pseudorandom number generator state (default: true)
112+
* @throws must provide valid options
113+
* @returns pseudorandom number generator
114+
*
115+
* @example
116+
* var rng = factory();
117+
* var v = rng();
118+
* // returns <bigint>
119+
*
120+
* @example
121+
* var rng = factory({
122+
* 'seed': BigInt(12345)
123+
* });
124+
* var v = rng();
125+
* // returns <bigint>
126+
*/
127+
( options?: Options ): NullaryFunction;
128+
}
129+
130+
/**
131+
* Returns a xorshift128+ pseudorandom number generator.
132+
*
133+
* ## Notes
134+
*
135+
* - This pseudorandom number generator (PRNG) is a 128-bit xorshift PRNG with a period of approximately 2^128.
136+
* - The generator produces 64-bit pseudorandom integers using BigInt arithmetic.
137+
* - The generator is suitable for general-purpose use and Monte Carlo simulations.
138+
* - For cryptographic applications, use a cryptographically secure pseudorandom number generator (CSPRNG).
139+
*
140+
* @param options - function options
141+
* @param options.seed - pseudorandom number generator seed
142+
* @param options.state - pseudorandom number generator state
143+
* @param options.copy - boolean indicating whether to copy a provided pseudorandom number generator state (default: true)
144+
* @throws must provide valid options
145+
* @returns pseudorandom number generator
146+
*
147+
* @example
148+
* var rng = factory();
149+
* var v = rng();
150+
* // returns <bigint>
151+
*
152+
* @example
153+
* var rng = factory();
154+
* var v = rng.normalized();
155+
* // returns <number>
156+
*
157+
* @example
158+
* var rng = factory({
159+
* 'seed': BigInt(12345)
160+
* });
161+
* var v = rng();
162+
* // returns <bigint>
163+
*/
164+
declare var factory: Factory;
165+
166+
167+
// EXPORTS //
168+
169+
export = factory;
170+

0 commit comments

Comments
 (0)