diff --git a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.main.js b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.main.js index bbb3096e8f43..107fef9b3854 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.main.js @@ -23,8 +23,7 @@ var tape = require( 'tape' ); var Float64Array = require( '@stdlib/array/float64' ); var dcopy = require( '@stdlib/blas/base/dcopy' ); -var EPS = require( '@stdlib/constants/float64/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var drot = require( './../lib' ); @@ -37,22 +36,14 @@ var drot = require( './../lib' ); * @param {Object} t - test object * @param {Collection} actual - actual values * @param {Collection} expected - expected values -* @param {number} rtol - relative tolerance +* @param {NonNegativeInteger} ulp - maximum allowed ULP difference */ -function isApprox( t, actual, expected, rtol ) { - var delta; - var tol; +function isApprox( t, actual, expected, ulp ) { var i; t.strictEqual( actual.length, expected.length, 'returns expected value' ); for ( i = 0; i < expected.length; i++ ) { - if ( actual[ i ] === expected[ i ] ) { - t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); - } else { - delta = abs( actual[ i ] - expected[ i ] ); - tol = rtol * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( actual[ i ], expected[ i ], ulp ), true, 'returns expected value' ); } } @@ -103,8 +94,8 @@ tape( 'the function applies a plane rotation (sx=1, sy=1)', function test( t ) { x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.main( N[ i ], x, 1, y, 1, 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 6.0 ); - isApprox( t, y, ye[ i ], 6.0 ); + isApprox( t, x, xe[ i ], 1 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -143,8 +134,8 @@ tape( 'the function applies a plane rotation (sx=2, sy=-2)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.main( N[ i ], x, 2, y, -2, 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 20.0 ); - isApprox( t, y, ye[ i ], 20.0 ); + isApprox( t, x, xe[ i ], 21 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -183,8 +174,8 @@ tape( 'the function applies a plane rotation (sx=-2, sy=1)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.main( N[ i ], x, -2, y, 1, 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 20.0 ); - isApprox( t, y, ye[ i ], 20.0 ); + isApprox( t, x, xe[ i ], 21 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -223,8 +214,8 @@ tape( 'the function applies a plane rotation (sx=-1, sy=-2)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.main( N[ i ], x, -1, y, -2, 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 4.0 ); - isApprox( t, y, ye[ i ], 4.0 ); + isApprox( t, x, xe[ i ], 0 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -256,8 +247,8 @@ tape( 'the function supports an `x` stride', function test( t ) { xe = new Float64Array( [ 4.4, 2.0, 6.6, 4.0, 5.0 ] ); ye = new Float64Array( [ 4.2, 3.8, 8.0, 9.0, 10.0 ] ); - isApprox( t, x, xe, 2.0 ); - isApprox( t, y, ye, 2.0 ); + isApprox( t, x, xe, 1 ); + isApprox( t, y, ye, 2 ); t.end(); }); @@ -364,8 +355,8 @@ tape( 'the function supports negative strides', function test( t ) { xe = new Float64Array( [ 0.9, 0.1, -0.22, 0.8, 0.18, -0.3, -0.02 ] ); ye = new Float64Array( [ 0.64, -1.26, 0.54, 0.2, -0.6, 0.2, 0.8 ] ); - isApprox( t, x, xe, 20.0 ); - isApprox( t, y, ye, 20.0 ); + isApprox( t, x, xe, 21 ); + isApprox( t, y, ye, 2 ); t.end(); }); @@ -400,8 +391,8 @@ tape( 'the function supports complex access patterns', function test( t ) { xe = new Float64Array( [ 0.78, 0.26, -0.5, 0.8, 0.9, -0.3, -0.4 ] ); ye = new Float64Array( [ 0.04, -0.9, 0.18, 0.7, -0.6, 0.2, 0.8 ] ); - isApprox( t, x, xe, 5.0 ); - isApprox( t, y, ye, 5.0 ); + isApprox( t, x, xe, 0 ); + isApprox( t, y, ye, 5 ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.main.js b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.main.js index 7e9ddb2f1929..1103508e38ce 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.main.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.main.js @@ -25,8 +25,7 @@ var tape = require( 'tape' ); var Memory = require( '@stdlib/wasm/memory' ); var Float64Array = require( '@stdlib/array/float64' ); -var EPS = require( '@stdlib/constants/float64/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var Module = require( './../lib' ).Module; @@ -39,22 +38,14 @@ var Module = require( './../lib' ).Module; * @param {Object} t - test object * @param {Collection} actual - actual values * @param {Collection} expected - expected values -* @param {number} rtol - relative tolerance +* @param {NonNegativeInteger} ulp - maximum allowed ULP difference */ -function isApprox( t, actual, expected, rtol ) { - var delta; - var tol; +function isApprox( t, actual, expected, ulp ) { var i; t.strictEqual( actual.length, expected.length, 'returns expected value' ); for ( i = 0; i < expected.length; i++ ) { - if ( actual[ i ] === expected[ i ] ) { - t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); - } else { - delta = abs( actual[ i ] - expected[ i ] ); - tol = rtol * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( actual[ i ], expected[ i ], ulp ), true, 'returns expected value' ); } } @@ -110,8 +101,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 1 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); @@ -147,8 +138,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -184,8 +175,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -221,8 +212,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 4.0 ); - isApprox( t, actualY, ye, 4.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); @@ -270,8 +261,8 @@ tape( 'a module instance has a `main` method which supports an `x` stride', func actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 1 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -319,8 +310,8 @@ tape( 'a module instance has a `main` method which supports a `y` stride', funct actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 0 ); t.end(); }); @@ -441,8 +432,8 @@ tape( 'a module instance has a `main` method which supports negative strides', f actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -494,8 +485,8 @@ tape( 'a module instance has a `main` method which supports complex access patte actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.ndarray.js b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.ndarray.js index 197816126606..62e0ef3a0423 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.module.ndarray.js @@ -25,8 +25,7 @@ var tape = require( 'tape' ); var Memory = require( '@stdlib/wasm/memory' ); var Float64Array = require( '@stdlib/array/float64' ); -var EPS = require( '@stdlib/constants/float64/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var Module = require( './../lib' ).Module; @@ -39,22 +38,14 @@ var Module = require( './../lib' ).Module; * @param {Object} t - test object * @param {Collection} actual - actual values * @param {Collection} expected - expected values -* @param {number} rtol - relative tolerance +* @param {NonNegativeInteger} ulp - maximum allowed ULP difference */ -function isApprox( t, actual, expected, rtol ) { - var delta; - var tol; +function isApprox( t, actual, expected, ulp ) { var i; t.strictEqual( actual.length, expected.length, 'returns expected value' ); for ( i = 0; i < expected.length; i++ ) { - if ( actual[ i ] === expected[ i ] ) { - t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); - } else { - delta = abs( actual[ i ] - expected[ i ] ); - tol = rtol * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( actual[ i ], expected[ i ], ulp ), true, 'returns expected value' ); } } @@ -110,8 +101,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 1 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); @@ -147,8 +138,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -184,8 +175,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -221,8 +212,8 @@ tape( 'a module instance has a `main` method which applies a plane rotation (sx= actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 4.0 ); - isApprox( t, actualY, ye, 4.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); @@ -270,8 +261,8 @@ tape( 'a module instance has a `main` method which supports an `x` stride', func actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 1 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -319,8 +310,8 @@ tape( 'a module instance has a `main` method which supports an `x` offset', func actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 1 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -368,8 +359,8 @@ tape( 'a module instance has a `main` method which supports a `y` stride', funct actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 0 ); t.end(); }); @@ -417,8 +408,8 @@ tape( 'a module instance has a `main` method which supports a `y` offset', funct actualY = new Float64Array( 5 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 1 ); t.end(); }); @@ -539,8 +530,8 @@ tape( 'a module instance has a `main` method which supports negative strides', f actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 20.0 ); - isApprox( t, actualY, ye, 20.0 ); + isApprox( t, actualX, xe, 21 ); + isApprox( t, actualY, ye, 2 ); t.end(); }); @@ -592,8 +583,8 @@ tape( 'a module instance has a `main` method which supports complex access patte actualY = new Float64Array( 7 ); mod.read( xp, actualX ); mod.read( yp, actualY ); - isApprox( t, actualX, xe, 6.0 ); - isApprox( t, actualY, ye, 6.0 ); + isApprox( t, actualX, xe, 0 ); + isApprox( t, actualY, ye, 5 ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.ndarray.js index 34bfd8929190..6e12dfd17999 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/drot/test/test.ndarray.js @@ -23,8 +23,7 @@ var tape = require( 'tape' ); var Float64Array = require( '@stdlib/array/float64' ); var dcopy = require( '@stdlib/blas/base/dcopy' ).ndarray; -var EPS = require( '@stdlib/constants/float64/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var drot = require( './../lib' ); @@ -37,22 +36,14 @@ var drot = require( './../lib' ); * @param {Object} t - test object * @param {Collection} actual - actual values * @param {Collection} expected - expected values -* @param {number} rtol - relative tolerance +* @param {NonNegativeInteger} ulp - maximum allowed ULP difference */ -function isApprox( t, actual, expected, rtol ) { - var delta; - var tol; +function isApprox( t, actual, expected, ulp ) { var i; t.strictEqual( actual.length, expected.length, 'returns expected value' ); for ( i = 0; i < expected.length; i++ ) { - if ( actual[ i ] === expected[ i ] ) { - t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' ); - } else { - delta = abs( actual[ i ] - expected[ i ] ); - tol = rtol * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( actual[ i ], expected[ i ], ulp ), true, 'returns expected value' ); } } @@ -108,8 +99,8 @@ tape( 'the function applies a plane rotation (sx=1, sy=1)', function test( t ) { x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.ndarray( N[ i ], x, 1, ox[ i ], y, 1, oy[ i ], 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 6.0 ); - isApprox( t, y, ye[ i ], 6.0 ); + isApprox( t, x, xe[ i ], 1 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -153,8 +144,8 @@ tape( 'the function applies a plane rotation (sx=2, sy=-2)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.ndarray( N[ i ], x, 2, ox[ i ], y, -2, oy[ i ], 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 20.0 ); - isApprox( t, y, ye[ i ], 20.0 ); + isApprox( t, x, xe[ i ], 21 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -197,8 +188,8 @@ tape( 'the function applies a plane rotation (sx=-2, sy=1)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.ndarray( N[ i ], x, -2, ox[ i ], y, 1, oy[ i ], 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 20.0 ); - isApprox( t, y, ye[ i ], 20.0 ); + isApprox( t, x, xe[ i ], 21 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -242,8 +233,8 @@ tape( 'the function applies a plane rotation (sx=-1, sy=-2)', function test( t ) x = new Float64Array( xbuf ); y = new Float64Array( ybuf ); out = drot.ndarray( N[ i ], x, -1, ox[ i ], y, -2, oy[ i ], 0.8, 0.6 ); - isApprox( t, x, xe[ i ], 4.0 ); - isApprox( t, y, ye[ i ], 4.0 ); + isApprox( t, x, xe[ i ], 0 ); + isApprox( t, y, ye[ i ], 5 ); t.strictEqual( out, y, 'returns expected value' ); } t.end(); @@ -275,8 +266,8 @@ tape( 'the function supports an `x` stride', function test( t ) { xe = new Float64Array( [ 4.4, 2.0, 6.6, 4.0, 5.0 ] ); ye = new Float64Array( [ 4.2, 3.8, 8.0, 9.0, 10.0 ] ); - isApprox( t, x, xe, 2.0 ); - isApprox( t, y, ye, 2.0 ); + isApprox( t, x, xe, 1 ); + isApprox( t, y, ye, 2 ); t.end(); }); @@ -307,8 +298,8 @@ tape( 'the function supports an `x` offset', function test( t ) { xe = new Float64Array( [ 1.0, 5.2, 6.6, 4.0, 5.0 ] ); ye = new Float64Array( [ 3.6, 3.8, 8.0, 9.0, 10.0 ] ); - isApprox( t, x, xe, 2.0 ); - isApprox( t, y, ye, 2.0 ); + isApprox( t, x, xe, 1 ); + isApprox( t, y, ye, 2 ); t.end(); }); @@ -339,8 +330,8 @@ tape( 'the function supports a `y` stride', function test( t ) { xe = new Float64Array( [ -1.0, -3.0, -5.0, 4.0, 5.0 ] ); ye = new Float64Array( [ 1.0, 2.0, 2.0, 4.0, 3.0 ] ); - isApprox( t, x, xe, 1.0 ); - isApprox( t, y, ye, 1.0 ); + isApprox( t, x, xe, 0 ); + isApprox( t, y, ye, 0 ); t.end(); }); @@ -371,8 +362,8 @@ tape( 'the function supports a `y` offset', function test( t ) { xe = new Float64Array( [ 5.6, 7.0, 3.0, 4.0, 5.0 ] ); ye = new Float64Array( [ 6.0, 7.0, 5.8, 6.0, 10.0 ] ); - isApprox( t, x, xe, 1.0 ); - isApprox( t, y, ye, 1.0 ); + isApprox( t, x, xe, 0 ); + isApprox( t, y, ye, 1 ); t.end(); }); @@ -447,8 +438,8 @@ tape( 'the function supports negative strides', function test( t ) { xe = new Float64Array( [ 0.9, 0.1, -0.22, 0.8, 0.18, -0.3, -0.02 ] ); ye = new Float64Array( [ 0.64, -1.26, 0.54, 0.2, -0.6, 0.2, 0.8 ] ); - isApprox( t, x, xe, 20.0 ); - isApprox( t, y, ye, 20.0 ); + isApprox( t, x, xe, 21 ); + isApprox( t, y, ye, 2 ); t.end(); }); @@ -483,8 +474,8 @@ tape( 'the function supports complex access patterns', function test( t ) { xe = new Float64Array( [ 0.78, 0.26, -0.5, 0.8, 0.9, -0.3, -0.4 ] ); ye = new Float64Array( [ 0.04, -0.9, 0.18, 0.7, -0.6, 0.2, 0.8 ] ); - isApprox( t, x, xe, 5.0 ); - isApprox( t, y, ye, 5.0 ); + isApprox( t, x, xe, 0 ); + isApprox( t, y, ye, 5 ); t.end(); });