Skip to content

Commit 70c65cc

Browse files
committed
test: add tests for assign method
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent d446f58 commit 70c65cc

File tree

2 files changed

+274
-1
lines changed

2 files changed

+274
-1
lines changed
Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
/**
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2023 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+
'use strict';
20+
21+
// MODULES //
22+
23+
var tape = require( 'tape' );
24+
var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' );
25+
var scalar2ndarray = require( '@stdlib/ndarray/base/from-scalar' );
26+
var array = require( '@stdlib/ndarray/array' );
27+
var zeros = require( '@stdlib/ndarray/zeros' );
28+
var getData = require( '@stdlib/ndarray/data-buffer' );
29+
var random = require( './../lib' );
30+
31+
32+
// VARIABLES //
33+
34+
var PARAM1 = 2.0;
35+
36+
37+
// TESTS //
38+
39+
tape( 'main export is a function', function test( t ) {
40+
t.ok( true, __filename );
41+
t.strictEqual( typeof random, 'function', 'main export is a function' );
42+
t.end();
43+
});
44+
45+
tape( 'attached to the main export is an `assign` method', function test( t ) {
46+
t.strictEqual( typeof random.assign, 'function', 'returns expected value' );
47+
t.end();
48+
});
49+
50+
tape( 'the `assign` method throws an error if provided a second argument which is not an ndarray', function test( t ) {
51+
var values;
52+
var i;
53+
54+
values = [
55+
'5',
56+
-5,
57+
null,
58+
true,
59+
false,
60+
void 0,
61+
NaN,
62+
[ -1 ],
63+
{},
64+
function noop() {}
65+
];
66+
67+
for ( i = 0; i < values.length; i++ ) {
68+
t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] );
69+
}
70+
t.end();
71+
72+
function badValue( value ) {
73+
return function badValue() {
74+
random.assign( PARAM1, value );
75+
};
76+
}
77+
});
78+
79+
tape( 'the `assign` method throws an error if provided distribution parameters and the output array are not broadcast compatible', function test( t ) {
80+
var values;
81+
var param1;
82+
var i;
83+
84+
values = [
85+
zeros( [ 4, 4, 4 ] ),
86+
zeros( [ 3, 3, 3, 3 ] ),
87+
zeros( [ 1, 2, 3, 4 ] ),
88+
zeros( [ 10, 10 ] )
89+
];
90+
param1 = array( [ [ PARAM1, PARAM1 ] ] );
91+
92+
for ( i = 0; i < values.length; i++ ) {
93+
t.throws( badValue( values[i] ), Error, 'throws an error when provided '+values[i] );
94+
}
95+
t.end();
96+
97+
function badValue( value ) {
98+
return function badValue() {
99+
random.assign( param1, value );
100+
};
101+
}
102+
});
103+
104+
tape( 'the `assign` method throws an error if provided a read-only output array', function test( t ) {
105+
var values;
106+
var i;
107+
108+
values = [
109+
zeros( [ 3, 3 ], {
110+
'readonly': true
111+
})
112+
];
113+
114+
for ( i = 0; i < values.length; i++ ) {
115+
t.throws( badValue( values[i] ), Error, 'throws an error when provided '+values[i] );
116+
}
117+
t.end();
118+
119+
function badValue( value ) {
120+
return function badValue() {
121+
random.assign( PARAM1, value );
122+
};
123+
}
124+
});
125+
126+
tape( 'the `assign` method fills an ndarray with pseudorandom numbers (scalar)', function test( t ) {
127+
var original;
128+
var actual;
129+
var out;
130+
131+
out = zeros( [ 3, 3 ], {
132+
'dtype': 'float64'
133+
});
134+
original = zeros( [ 3, 3 ], {
135+
'dtype': 'float64'
136+
});
137+
actual = random.assign( PARAM1, out );
138+
139+
t.strictEqual( out, actual, 'returns expected value' );
140+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
141+
142+
t.end();
143+
});
144+
145+
tape( 'the `assign` method fills an ndarray with pseudorandom numbers (zero-dimensional ndarray)', function test( t ) {
146+
var original;
147+
var actual;
148+
var param1;
149+
var out;
150+
151+
param1 = scalar2ndarray( PARAM1, 'float64', 'row-major' );
152+
out = zeros( [ 3, 3 ], {
153+
'dtype': 'float64'
154+
});
155+
original = zeros( [ 3, 3 ], {
156+
'dtype': 'float64'
157+
});
158+
159+
actual = random.assign( param1, out );
160+
161+
t.strictEqual( out, actual, 'returns expected value' );
162+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
163+
164+
t.end();
165+
});
166+
167+
tape( 'the `assign` method fills an ndarray with pseudorandom numbers (ndarray)', function test( t ) {
168+
var original;
169+
var actual;
170+
var param1;
171+
var out;
172+
173+
param1 = array( [ [ PARAM1, PARAM1 ], [ PARAM1, PARAM1 ] ] );
174+
175+
out = zeros( [ 2, 2 ], {
176+
'dtype': 'float64'
177+
});
178+
original = zeros( [ 2, 2 ], {
179+
'dtype': 'float64'
180+
});
181+
182+
actual = random.assign( param1, out );
183+
184+
t.strictEqual( out, actual, 'returns expected value' );
185+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
186+
187+
t.end();
188+
});
189+
190+
tape( 'the `assign` method fills an ndarray with pseudorandom numbers (broadcasted ndarray)', function test( t ) {
191+
var original;
192+
var actual;
193+
var param1;
194+
var out;
195+
196+
param1 = array( [ [ PARAM1, PARAM1 ] ] );
197+
198+
out = zeros( [ 2, 2 ], {
199+
'dtype': 'float64'
200+
});
201+
original = zeros( [ 2, 2 ], {
202+
'dtype': 'float64'
203+
});
204+
205+
actual = random.assign( param1, out );
206+
207+
t.strictEqual( out, actual, 'returns expected value' );
208+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
209+
210+
t.end();
211+
});
212+
213+
tape( 'the `assign` method supports filling a zero-dimensional ndarray (scalar)', function test( t ) {
214+
var original;
215+
var actual;
216+
var out;
217+
218+
out = zeros( [], {
219+
'dtype': 'float64'
220+
});
221+
original = zeros( [], {
222+
'dtype': 'float64'
223+
});
224+
225+
actual = random.assign( PARAM1, out );
226+
227+
t.strictEqual( out, actual, 'returns expected value' );
228+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
229+
230+
t.end();
231+
});
232+
233+
tape( 'the `assign` method supports filling a zero-dimensional ndarray (ndarray)', function test( t ) {
234+
var original;
235+
var actual;
236+
var param1;
237+
var out;
238+
239+
param1 = scalar2ndarray( PARAM1, 'float64', 'row-major' );
240+
out = zeros( [], {
241+
'dtype': 'float64'
242+
});
243+
original = zeros( [], {
244+
'dtype': 'float64'
245+
});
246+
247+
actual = random.assign( param1, out );
248+
249+
t.strictEqual( out, actual, 'returns expected value' );
250+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), false, 'returns expected value' );
251+
252+
t.end();
253+
});
254+
255+
tape( 'if an output array has one or more dimensions of size zero, the `assign` method returns the output array unchanged', function test( t ) {
256+
var original;
257+
var actual;
258+
var out;
259+
260+
out = zeros( [ 2, 0, 2 ], {
261+
'dtype': 'float64'
262+
});
263+
original = zeros( [ 2, 0, 2 ], {
264+
'dtype': 'float64'
265+
});
266+
267+
actual = random.assign( PARAM1, out );
268+
269+
t.strictEqual( out, actual, 'returns expected value' );
270+
t.strictEqual( isSameFloat64Array( getData( actual ), getData( original ) ), true, 'returns expected value' );
271+
272+
t.end();
273+
});

lib/node_modules/@stdlib/random/exponential/test/test.main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var getShape = require( '@stdlib/ndarray/shape' );
3030
var getOrder = require( '@stdlib/ndarray/order' );
3131
var getData = require( '@stdlib/ndarray/data-buffer' );
3232
var numel = require( '@stdlib/ndarray/numel' );
33-
var random = require( './../lib/main.js' );
33+
var random = require( './../lib' );
3434

3535

3636
// VARIABLES //

0 commit comments

Comments
 (0)