0 ) {\n\t\t\t\tdigits -= 1;\n\t\t\t}\n\t\t\tout = f.toExponential( digits );\n\t\t} else {\n\t\t\tout = f.toPrecision( token.precision );\n\t\t}\n\t\tif ( !token.alternate ) {\n\t\t\tout = replace.call( out, RE_ZERO_BEFORE_EXP, '$1e' );\n\t\t\tout = replace.call( out, RE_PERIOD_ZERO_EXP, 'e' );\n\t\t\tout = replace.call( out, RE_TRAILING_PERIOD_ZERO, '' );\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tthrow new Error( 'invalid double notation. Value: ' + token.specifier );\n\t}\n\tout = replace.call( out, RE_EXP_POS_DIGITS, 'e+0$1' );\n\tout = replace.call( out, RE_EXP_NEG_DIGITS, 'e-0$1' );\n\tif ( token.alternate ) {\n\t\tout = replace.call( out, RE_ONLY_DIGITS, '$1.' );\n\t\tout = replace.call( out, RE_DIGITS_BEFORE_EXP, '$1.e' );\n\t}\n\tif ( f >= 0 && token.sign ) {\n\t\tout = token.sign + out;\n\t}\n\tout = ( token.specifier === uppercase.call( token.specifier ) ) ?\n\t\tuppercase.call( out ) :\n\t\tlowercase.call( out );\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default formatDouble;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// FUNCTIONS //\n\n/**\n* Returns `n` spaces.\n*\n* @private\n* @param {number} n - number of spaces\n* @returns {string} string of spaces\n*/\nfunction spaces( n ) {\n\tvar out = '';\n\tvar i;\n\tfor ( i = 0; i < n; i++ ) {\n\t\tout += ' ';\n\t}\n\treturn out;\n}\n\n\n// MAIN //\n\n/**\n* Pads a token with spaces to the specified width.\n*\n* @private\n* @param {string} str - token argument\n* @param {number} width - token width\n* @param {boolean} [right=false] - boolean indicating whether to pad to the right\n* @returns {string} padded token argument\n*/\nfunction spacePad( str, width, right ) {\n\tvar pad = width - str.length;\n\tif ( pad < 0 ) {\n\t\treturn str;\n\t}\n\tstr = ( right ) ?\n\t\tstr + spaces( pad ) :\n\t\tspaces( pad ) + str;\n\treturn str;\n}\n\n\n// EXPORTS //\n\nexport default spacePad;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport formatInteger from './format_integer.js';\nimport isString from './is_string.js';\nimport formatDouble from './format_double.js';\nimport spacePad from './space_pad.js';\nimport zeroPad from './zero_pad.js';\n\n\n// VARIABLES //\n\nvar fromCharCode = String.fromCharCode;\nvar isArray = Array.isArray; // NOTE: We use the global `Array.isArray` function here instead of `@stdlib/assert/is-array` to avoid circular dependencies.\n\n\n// FUNCTIONS //\n\n/**\n* Returns a boolean indicating whether a value is `NaN`.\n*\n* @private\n* @param {*} value - input value\n* @returns {boolean} boolean indicating whether a value is `NaN`\n*\n* @example\n* var bool = isnan( NaN );\n* // returns true\n*\n* @example\n* var bool = isnan( 4 );\n* // returns false\n*/\nfunction isnan( value ) { // explicitly define a function here instead of `@stdlib/math/base/assert/is-nan` in order to avoid circular dependencies\n\treturn ( value !== value );\n}\n\n/**\n* Initializes token object with properties of supplied format identifier object or default values if not present.\n*\n* @private\n* @param {Object} token - format identifier object\n* @returns {Object} token object\n*/\nfunction initialize( token ) {\n\tvar out = {};\n\tout.specifier = token.specifier;\n\tout.precision = ( token.precision === void 0 ) ? 1 : token.precision;\n\tout.width = token.width;\n\tout.flags = token.flags || '';\n\tout.mapping = token.mapping;\n\treturn out;\n}\n\n\n// MAIN //\n\n/**\n* Generates string from a token array by interpolating values.\n*\n* @param {Array} tokens - string parts and format identifier objects\n* @param {Array} ...args - variable values\n* @throws {TypeError} first argument must be an array\n* @throws {Error} invalid flags\n* @returns {string} formatted string\n*\n* @example\n* var tokens = [ 'beep ', { 'specifier': 's' } ];\n* var out = formatInterpolate( tokens, 'boop' );\n* // returns 'beep boop'\n*/\nfunction formatInterpolate( tokens ) {\n\tvar hasPeriod;\n\tvar flags;\n\tvar token;\n\tvar flag;\n\tvar num;\n\tvar out;\n\tvar pos;\n\tvar i;\n\tvar j;\n\n\tif ( !isArray( tokens ) ) {\n\t\tthrow new TypeError( 'invalid argument. First argument must be an array. Value: `' + tokens + '`.' );\n\t}\n\tout = '';\n\tpos = 1;\n\tfor ( i = 0; i < tokens.length; i++ ) {\n\t\ttoken = tokens[ i ];\n\t\tif ( isString( token ) ) {\n\t\t\tout += token;\n\t\t} else {\n\t\t\thasPeriod = token.precision !== void 0;\n\t\t\ttoken = initialize( token );\n\t\t\tif ( !token.specifier ) {\n\t\t\t\tthrow new TypeError( 'invalid argument. Token is missing `specifier` property. Index: `'+ i +'`. Value: `' + token + '`.' );\n\t\t\t}\n\t\t\tif ( token.mapping ) {\n\t\t\t\tpos = token.mapping;\n\t\t\t}\n\t\t\tflags = token.flags;\n\t\t\tfor ( j = 0; j < flags.length; j++ ) {\n\t\t\t\tflag = flags.charAt( j );\n\t\t\t\tswitch ( flag ) {\n\t\t\t\tcase ' ':\n\t\t\t\t\ttoken.sign = ' ';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '+':\n\t\t\t\t\ttoken.sign = '+';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\ttoken.padRight = true;\n\t\t\t\t\ttoken.padZeros = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '0':\n\t\t\t\t\ttoken.padZeros = flags.indexOf( '-' ) < 0; // NOTE: We use built-in `Array.prototype.indexOf` here instead of `@stdlib/assert/contains` in order to avoid circular dependencies.\n\t\t\t\t\tbreak;\n\t\t\t\tcase '#':\n\t\t\t\t\ttoken.alternate = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'invalid flag: ' + flag );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( token.width === '*' ) {\n\t\t\t\ttoken.width = parseInt( arguments[ pos ], 10 );\n\t\t\t\tpos += 1;\n\t\t\t\tif ( isnan( token.width ) ) {\n\t\t\t\t\tthrow new TypeError( 'the argument for * width at position ' + pos + ' is not a number. Value: `' + token.width + '`.' );\n\t\t\t\t}\n\t\t\t\tif ( token.width < 0 ) {\n\t\t\t\t\ttoken.padRight = true;\n\t\t\t\t\ttoken.width = -token.width;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( hasPeriod ) {\n\t\t\t\tif ( token.precision === '*' ) {\n\t\t\t\t\ttoken.precision = parseInt( arguments[ pos ], 10 );\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tif ( isnan( token.precision ) ) {\n\t\t\t\t\t\tthrow new TypeError( 'the argument for * precision at position ' + pos + ' is not a number. Value: `' + token.precision + '`.' );\n\t\t\t\t\t}\n\t\t\t\t\tif ( token.precision < 0 ) {\n\t\t\t\t\t\ttoken.precision = 1;\n\t\t\t\t\t\thasPeriod = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttoken.arg = arguments[ pos ];\n\t\t\tswitch ( token.specifier ) {\n\t\t\tcase 'b':\n\t\t\tcase 'o':\n\t\t\tcase 'x':\n\t\t\tcase 'X':\n\t\t\tcase 'd':\n\t\t\tcase 'i':\n\t\t\tcase 'u':\n\t\t\t\t// Case: %b (binary), %o (octal), %x, %X (hexadecimal), %d, %i (decimal), %u (unsigned decimal)\n\t\t\t\tif ( hasPeriod ) {\n\t\t\t\t\ttoken.padZeros = false;\n\t\t\t\t}\n\t\t\t\ttoken.arg = formatInteger( token );\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\t// Case: %s (string)\n\t\t\t\ttoken.maxWidth = ( hasPeriod ) ? token.precision : -1;\n\t\t\t\ttoken.arg = String( token.arg );\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\t// Case: %c (character)\n\t\t\t\tif ( !isnan( token.arg ) ) {\n\t\t\t\t\tnum = parseInt( token.arg, 10 );\n\t\t\t\t\tif ( num < 0 || num > 127 ) {\n\t\t\t\t\t\tthrow new Error( 'invalid character code. Value: ' + token.arg );\n\t\t\t\t\t}\n\t\t\t\t\ttoken.arg = ( isnan( num ) ) ? String( token.arg ) : fromCharCode( num ); // eslint-disable-line max-len\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'e':\n\t\t\tcase 'E':\n\t\t\tcase 'f':\n\t\t\tcase 'F':\n\t\t\tcase 'g':\n\t\t\tcase 'G':\n\t\t\t\t// Case: %e, %E (scientific notation), %f, %F (decimal floating point), %g, %G (uses the shorter of %e/E or %f/F)\n\t\t\t\tif ( !hasPeriod ) {\n\t\t\t\t\ttoken.precision = 6;\n\t\t\t\t}\n\t\t\t\ttoken.arg = formatDouble( token );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'invalid specifier: ' + token.specifier );\n\t\t\t}\n\t\t\t// Fit argument into field width...\n\t\t\tif ( token.maxWidth >= 0 && token.arg.length > token.maxWidth ) {\n\t\t\t\ttoken.arg = token.arg.substring( 0, token.maxWidth );\n\t\t\t}\n\t\t\tif ( token.padZeros ) {\n\t\t\t\ttoken.arg = zeroPad( token.arg, token.width || token.precision, token.padRight ); // eslint-disable-line max-len\n\t\t\t} else if ( token.width ) {\n\t\t\t\ttoken.arg = spacePad( token.arg, token.width, token.padRight );\n\t\t\t}\n\t\t\tout += token.arg || '';\n\t\t\tpos += 1;\n\t\t}\n\t}\n\treturn out;\n}\n\n\n// EXPORTS //\n\nexport default formatInterpolate;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Tests if a value is a string primitive.\n*\n* @param {*} value - value to test\n* @returns {boolean} boolean indicating if a value is a string primitive\n*\n* @example\n* var bool = isString( 'beep' );\n* // returns true\n*\n* @example\n* var bool = isString( new String( 'beep' ) );\n* // returns false\n*/\nfunction isString( value ) {\n\treturn ( typeof value === 'string' ); // NOTE: we inline the `isString.isPrimitive` function from `@stdlib/assert/is-string` in order to avoid circular dependencies.\n}\n\n\n// EXPORTS //\n\nexport default isString;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// VARIABLES //\n\nvar RE = /%(?:([1-9]\\d*)\\$)?([0 +\\-#]*)(\\*|\\d+)?(?:(\\.)(\\*|\\d+)?)?[hlL]?([%A-Za-z])/g;\n\n\n// FUNCTIONS //\n\n/**\n* Parses a delimiter.\n*\n* @private\n* @param {Array} match - regular expression match\n* @returns {Object} delimiter token object\n*/\nfunction parse( match ) {\n\tvar token = {\n\t\t'mapping': ( match[ 1 ] ) ? parseInt( match[ 1 ], 10 ) : void 0,\n\t\t'flags': match[ 2 ],\n\t\t'width': match[ 3 ],\n\t\t'precision': match[ 5 ],\n\t\t'specifier': match[ 6 ]\n\t};\n\tif ( match[ 4 ] === '.' && match[ 5 ] === void 0 ) {\n\t\ttoken.precision = '1';\n\t}\n\treturn token;\n}\n\n\n// MAIN //\n\n/**\n* Tokenizes a string into an array of string parts and format identifier objects.\n*\n* @param {string} str - input string\n* @returns {Array} tokens\n*\n* @example\n* var tokens = formatTokenize( 'Hello %s!' );\n* // returns [ 'Hello ', {...}, '!' ]\n*/\nfunction formatTokenize( str ) {\n\tvar content;\n\tvar tokens;\n\tvar match;\n\tvar prev;\n\n\ttokens = [];\n\tprev = 0;\n\tmatch = RE.exec( str );\n\twhile ( match ) {\n\t\tcontent = str.slice( prev, RE.lastIndex - match[ 0 ].length );\n\t\tif ( content.length ) {\n\t\t\ttokens.push( content );\n\t\t}\n\t\ttokens.push( parse( match ) );\n\t\tprev = RE.lastIndex;\n\t\tmatch = RE.exec( str );\n\t}\n\tcontent = str.slice( prev );\n\tif ( content.length ) {\n\t\ttokens.push( content );\n\t}\n\treturn tokens;\n}\n\n\n// EXPORTS //\n\nexport default formatTokenize;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n// MODULES //\n\nimport interpolate from '@stdlib/string-base-format-interpolate';\nimport tokenize from '@stdlib/string-base-format-tokenize';\nimport isString from './is_string.js';\n\n\n// MAIN //\n\n/**\n* Inserts supplied variable values into a format string.\n*\n* @param {string} str - input string\n* @param {Array} ...args - variable values\n* @throws {TypeError} first argument must be a string\n* @throws {Error} invalid flags\n* @returns {string} formatted string\n*\n* @example\n* var str = format( 'Hello %s!', 'world' );\n* // returns 'Hello world!'\n*\n* @example\n* var str = format( 'Pi: ~%.2f', 3.141592653589793 );\n* // returns 'Pi: ~3.14'\n*/\nfunction format( str ) {\n\tvar args;\n\tvar i;\n\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( format( '1Of3F', str ) );\n\t}\n\targs = [ tokenize( str ) ];\n\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\targs.push( arguments[ i ] );\n\t}\n\treturn interpolate.apply( null, args );\n}\n\n\n// EXPORTS //\n\nexport default format;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2022 The Stdlib Authors.\n*\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n* you may not use this file except in compliance with the License.\n* You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing, software\n* distributed under the License is distributed on an \"AS IS\" BASIS,\n* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n* See the License for the specific language governing permissions and\n* limitations under the License.\n*/\n\n'use strict';\n\n/**\n* Tests if a value is a string primitive.\n*\n* @param {*} value - value to test\n* @returns {boolean} boolean indicating if a value is a string primitive\n*\n* @example\n* var bool = isString( 'beep' );\n* // returns true\n*\n* @example\n* var bool = isString( new String( 'beep' ) );\n* // returns false\n*/\nfunction isString( value ) {\n\treturn ( typeof value === 'string' ); // NOTE: we inline the `isString.isPrimitive` function from `@stdlib/assert/is-string` in order to avoid circular dependencies.\n}\n\n\n// EXPORTS //\n\nexport default isString;\n"],"names":["isNumber","value","zeros","n","i","out","zeroPad","str","width","right","negative","pad","length","startsWithMinus","substr","lowercase","String","prototype","toLowerCase","uppercase","toUpperCase","formatInteger","token","base","specifier","arg","parseInt","isFinite","Error","toString","precision","padRight","sign","alternate","call","charAt","abs","Math","replace","RE_EXP_POS_DIGITS","RE_EXP_NEG_DIGITS","RE_ONLY_DIGITS","RE_DIGITS_BEFORE_EXP","RE_TRAILING_PERIOD_ZERO","RE_PERIOD_ZERO_EXP","RE_ZERO_BEFORE_EXP","formatDouble","digits","f","parseFloat","toExponential","toFixed","toPrecision","spaces","fromCharCode","isArray","Array","isnan","initialize","flags","mapping","formatInterpolate","tokens","hasPeriod","flag","num","pos","j","TypeError","padZeros","indexOf","arguments","maxWidth","substring","RE","parse","match","formatTokenize","content","prev","exec","slice","lastIndex","push","format","args","tokenize","interpolate","apply"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
\ No newline at end of file
diff --git a/lib/index.js b/lib/index.js
deleted file mode 100644
index 8aefc9d..0000000
--- a/lib/index.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2022 The Stdlib Authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-'use strict';
-
-/**
-* Insert supplied variable values into a format string.
-*
-* @module @stdlib/string-format
-*
-* @example
-* var format = require( '@stdlib/string-format' );
-*
-* var out = format( '%s %s!', 'Hello', 'World' );
-* // returns 'Hello World!'
-*
-* out = format( 'Pi: ~%.2f', 3.141592653589793 );
-* // returns 'Pi: ~3.14'
-*/
-
-// MODULES //
-
-var main = require( './main.js' );
-
-
-// EXPORTS //
-
-module.exports = main;
diff --git a/lib/is_string.js b/lib/is_string.js
deleted file mode 100644
index 8f1fd29..0000000
--- a/lib/is_string.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2022 The Stdlib Authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-'use strict';
-
-/**
-* Tests if a value is a string primitive.
-*
-* @param {*} value - value to test
-* @returns {boolean} boolean indicating if a value is a string primitive
-*
-* @example
-* var bool = isString( 'beep' );
-* // returns true
-*
-* @example
-* var bool = isString( new String( 'beep' ) );
-* // returns false
-*/
-function isString( value ) {
- return ( typeof value === 'string' ); // NOTE: we inline the `isString.isPrimitive` function from `@stdlib/assert/is-string` in order to avoid circular dependencies.
-}
-
-
-// EXPORTS //
-
-module.exports = isString;
diff --git a/lib/main.js b/lib/main.js
deleted file mode 100644
index 40d7310..0000000
--- a/lib/main.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2022 The Stdlib Authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-'use strict';
-
-// MODULES //
-
-var interpolate = require( '@stdlib/string-base-format-interpolate' );
-var tokenize = require( '@stdlib/string-base-format-tokenize' );
-var isString = require( './is_string.js' );
-
-
-// MAIN //
-
-/**
-* Inserts supplied variable values into a format string.
-*
-* @param {string} str - input string
-* @param {Array} ...args - variable values
-* @throws {TypeError} first argument must be a string
-* @throws {Error} invalid flags
-* @returns {string} formatted string
-*
-* @example
-* var str = format( 'Hello %s!', 'world' );
-* // returns 'Hello world!'
-*
-* @example
-* var str = format( 'Pi: ~%.2f', 3.141592653589793 );
-* // returns 'Pi: ~3.14'
-*/
-function format( str ) {
- var args;
- var i;
-
- if ( !isString( str ) ) {
- throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', str ) );
- }
- args = [ tokenize( str ) ];
- for ( i = 1; i < arguments.length; i++ ) {
- args.push( arguments[ i ] );
- }
- return interpolate.apply( null, args );
-}
-
-
-// EXPORTS //
-
-module.exports = format;
diff --git a/package.json b/package.json
index f76545a..7ce3ed4 100644
--- a/package.json
+++ b/package.json
@@ -3,31 +3,7 @@
"version": "0.2.2",
"description": "Insert supplied variable values into a format string.",
"license": "Apache-2.0",
- "author": {
- "name": "The Stdlib Authors",
- "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
- },
- "contributors": [
- {
- "name": "The Stdlib Authors",
- "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
- }
- ],
- "main": "./lib",
- "directories": {
- "benchmark": "./benchmark",
- "doc": "./docs",
- "example": "./examples",
- "lib": "./lib",
- "test": "./test"
- },
- "types": "./docs/types",
- "scripts": {
- "test": "make test",
- "test-cov": "make test-cov",
- "examples": "make examples",
- "benchmark": "make benchmark"
- },
+ "main": "./index.js",
"homepage": "https://stdlib.io",
"repository": {
"type": "git",
@@ -36,35 +12,6 @@
"bugs": {
"url": "https://github.com/stdlib-js/stdlib/issues"
},
- "dependencies": {
- "@stdlib/string-base-format-interpolate": "^0.2.2",
- "@stdlib/string-base-format-tokenize": "^0.2.2"
- },
- "devDependencies": {
- "@stdlib/assert-is-string": "^0.2.2",
- "@stdlib/constants-float64-ninf": "^0.2.2",
- "@stdlib/constants-float64-pi": "^0.2.2",
- "@stdlib/constants-float64-pinf": "^0.2.2",
- "tape": "git+https://github.com/kgryte/tape.git#fix/globby",
- "istanbul": "^0.4.1",
- "tap-min": "git+https://github.com/Planeshifter/tap-min.git",
- "@stdlib/bench-harness": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0",
- "npm": ">2.7.0"
- },
- "os": [
- "aix",
- "darwin",
- "freebsd",
- "linux",
- "macos",
- "openbsd",
- "sunos",
- "win32",
- "windows"
- ],
"keywords": [
"stdlib",
"stdstring",
diff --git a/stats_browser.html b/stats_browser.html
new file mode 100644
index 0000000..bf47225
--- /dev/null
+++ b/stats_browser.html
@@ -0,0 +1,4842 @@
+
+
+
+
+
+
+
+ Rollup Visualizer
+
+
+
+
+
+
+
+
+
diff --git a/stats_node.html b/stats_node.html
new file mode 100644
index 0000000..4c00b12
--- /dev/null
+++ b/stats_node.html
@@ -0,0 +1,4842 @@
+
+
+
+
+
+
+
+ Rollup Visualizer
+
+
+
+
+
+
+
+
+
diff --git a/test/dist/test.js b/test/dist/test.js
deleted file mode 100644
index a8a9c60..0000000
--- a/test/dist/test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2023 The Stdlib Authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-'use strict';
-
-// MODULES //
-
-var tape = require( 'tape' );
-var main = require( './../../dist' );
-
-
-// TESTS //
-
-tape( 'main export is defined', function test( t ) {
- t.ok( true, __filename );
- t.strictEqual( main !== void 0, true, 'main export is defined' );
- t.end();
-});
diff --git a/test/test.js b/test/test.js
deleted file mode 100644
index acf1714..0000000
--- a/test/test.js
+++ /dev/null
@@ -1,1092 +0,0 @@
-/**
-* @license Apache-2.0
-*
-* Copyright (c) 2022 The Stdlib Authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-'use strict';
-
-// MODULES //
-
-var tape = require( 'tape' );
-var PI = require( '@stdlib/constants-float64-pi' );
-var PINF = require( '@stdlib/constants-float64-pinf' );
-var NINF = require( '@stdlib/constants-float64-ninf' );
-var format = require( './../lib' );
-
-
-// TESTS //
-
-tape( 'main export is a function', function test( t ) {
- t.ok( true, __filename );
- t.strictEqual( typeof format, 'function', 'main export is a function' );
- t.end();
-});
-
-tape( 'the function throws an error if not provided a primitive string', function test( t ) {
- var values;
- var i;
-
- values = [
- 5,
- NaN,
- null,
- void 0,
- true,
- [],
- {},
- function noop() {}
- ];
- for ( i = 0; i < values.length; i++ ) {
- t.throws( badValue( values[i] ), TypeError, 'throws a type error when provided '+values[i] );
- }
- t.end();
-
- function badValue( value ) {
- return function badValue() {
- format( value );
- };
- }
-});
-
-tape( 'the function throws an error if provided a format string with an invalid format specifier', function test( t ) {
- var values;
- var i;
-
- values = [
- '%C',
- '%S',
- '%U',
- '%Z'
- ];
- for ( i = 0; i < values.length; i++ ) {
- t.throws( badValue( values[i] ), Error, 'throws an error when provided '+values[i] );
- }
- t.end();
-
- function badValue( value ) {
- return function badValue() {
- format( value, 'beep' );
- };
- }
-});
-
-tape( 'the function returns a formatted string (`s` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%s';
- actual = format( str, 'beep' );
- expected = 'beep';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %s';
- actual = format( str, 'boop' );
- expected = 'beep boop';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%s %s baz';
- actual = format( str, 'beep', 'boop' );
- expected = 'beep boop baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%6s';
- actual = format( str, 'beep' );
- expected = ' beep';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %6s';
- actual = format( str, 'boop' );
- expected = 'beep boop';
-
- str = '%2s %2s baz';
- actual = format( str, 'beep', 'boop' );
- expected = 'beep boop baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, variable width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%*s';
- actual = format( str, 6, 'beep' );
- expected = ' beep';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %*s';
- actual = format( str, 6, 'boop' );
- expected = 'beep boop';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%*s %*s baz';
- actual = format( str, 6, 'beep', 4, 'boop' );
- expected = ' beep boop baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, minimum width, left-justified)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%-6s';
- actual = format( str, 'beep' );
- expected = 'beep ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %-6s';
- actual = format( str, 'boop' );
- expected = 'beep boop ';
-
- str = '%-2s %-2s baz';
- actual = format( str, 'beep', 'boop' );
- expected = 'beep boop baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%.2s';
- actual = format( str, 'beep' );
- expected = 'be';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %.2s';
- actual = format( str, 'boop' );
- expected = 'beep bo';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, precision, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%6.2s';
- actual = format( str, 'beep' );
- expected = ' be';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %6.2s';
- actual = format( str, 'boop' );
- expected = 'beep bo';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%6.8s %4.2s baz';
- actual = format( str, 'beep', 'boop' );
- expected = 'beep bo b';
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, precision, minimum width, zero-padded)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%06.2s';
- actual = format( str, 'beep' );
- expected = '0000be';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %06.2s';
- actual = format( str, 'boop' );
- expected = 'beep 0000bo';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%06.8s %04.2s baz';
- actual = format( str, 'beep', 'boop' );
- expected = 'beep bo00 b';
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`c` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%c';
- actual = format( str, 70 );
- expected = 'F';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %c';
- actual = format( str, 75 );
- expected = 'beep K';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%c %c baz';
- actual = format( str, 70, 75 );
- expected = 'F K baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`c` specifier, string arguments)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%c';
- actual = format( str, 'b' );
- expected = 'b';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %c';
- actual = format( str, 'boop' );
- expected = 'beep boop';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`c` specifier, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%2c';
- actual = format( str, 80 );
- expected = ' P';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %4c';
- actual = format( str, 90 );
- expected = 'beep Z';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%2c %c baz';
- actual = format( str, 80, 90 );
- expected = ' P Z baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`c` specifier, minimum width, left-justified)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%-2c';
- actual = format( str, 80 );
- expected = 'P ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %-4c';
- actual = format( str, 90 );
- expected = 'beep Z ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%-2c %-c baz';
- actual = format( str, 80, 90 );
- expected = 'P Z baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`d` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%d';
- actual = format( str, 3 );
- expected = '3';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %d';
- actual = format( str, 5.8 );
- expected = 'beep 5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%d %d baz';
- actual = format( str, 3, 5 );
- expected = '3 5 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`d` specifier, sign)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%+d';
- actual = format( str, 3 );
- expected = '+3';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %+d';
- actual = format( str, 5.8 );
- expected = 'beep +5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%+d %+d baz';
- actual = format( str, 3, 5 );
- expected = '+3 +5 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%+d %+d baz';
- actual = format( str, -3, -5 );
- expected = '-3 -5 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`d` specifier, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%2d';
- actual = format( str, 3 );
- expected = ' 3';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %4d';
- actual = format( str, 5 );
- expected = 'beep 5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%2d %d baz';
- actual = format( str, 3.1, 5 );
- expected = ' 3 5 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`d` specifier, minimum width, left-justified)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%-2d';
- actual = format( str, 3 );
- expected = '3 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %-4d';
- actual = format( str, 5.2 );
- expected = 'beep 5 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%-3d baz';
- actual = format( str, 3, 5 );
- expected = '3 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`d` specifier, minimum width, zero-padded)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%02d';
- actual = format( str, 3 );
- expected = '03';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %04d';
- actual = format( str, 5.1 );
- expected = 'beep 0005';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%02d %d baz';
- actual = format( str, 3, 5 );
- expected = '03 5 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%f';
- actual = format( str, 3.14 );
- expected = '3.140000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%f %f baz';
- actual = format( str, 3.14, 5.0 );
- expected = '3.140000 5.000000 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%f %f baz';
- actual = format( str, PINF, NINF );
- expected = 'infinity -infinity baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%f';
- actual = format( str, NaN );
- expected = 'nan';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`F` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%F';
- actual = format( str, 3.14 );
- expected = '3.140000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %F';
- actual = format( str, 5.0 );
- expected = 'beep 5.000000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%F %F baz';
- actual = format( str, 3.14, 5.0 );
- expected = '3.140000 5.000000 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%F %F baz';
- actual = format( str, PINF, NINF );
- expected = 'INFINITY -INFINITY baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%F';
- actual = format( str, NaN );
- expected = 'NAN';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, specified precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%.3f';
- actual = format( str, PI );
- expected = '3.142';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %.3f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, variable precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%.*f';
- actual = format( str, 3, PI );
- expected = '3.142';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %.*f';
- actual = format( str, 3, 5.0 );
- expected = 'beep 5.000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%.*f %.*f baz';
- actual = format( str, 3, PI, 3, PI );
- expected = '3.142 3.142 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`g` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%g';
- actual = format( str, PI );
- expected = '3.14159';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %g';
- actual = format( str, 1.0003212e-10 );
- expected = 'beep 1.00032e-10';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%g %g baz';
- actual = format( str, PI, 1.0003212e-10 );
- expected = '3.14159 1.00032e-10 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`G` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%G';
- actual = format( str, PI );
- expected = '3.14159';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%3.G';
- actual = format( str, 100 );
- expected = '1E+02';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %G';
- actual = format( str, 1.0003212e-10 );
- expected = 'beep 1.00032E-10';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%G %G baz';
- actual = format( str, PI, 1.0003212e-10 );
- expected = '3.14159 1.00032E-10 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`G` specifier, alternate form)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%#G';
- actual = format( str, PI );
- expected = '3.14159';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#3.G';
- actual = format( str, 100 );
- expected = '1.E+02'; // always contains a decimal point!
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %#G';
- actual = format( str, 1.0003212e-10 );
- expected = 'beep 1.00032E-10';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#G %#G baz';
- actual = format( str, PI, 1.0003212e-10 );
- expected = '3.14159 1.00032E-10 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%12f';
- actual = format( str, 3.14 );
- expected = ' 3.140000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %12f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, decimal precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%.3f';
- actual = format( str, 3.14 );
- expected = '3.140';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%.3f';
- actual = format( str, PI );
- expected = '3.142';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %.3f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, minimum width, decimal precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%8.3f';
- actual = format( str, 3.14 );
- expected = ' 3.140';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %8.3f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%8.3f %.3f baz';
- actual = format( str, 3.14, 5.0 );
- expected = ' 3.140 5.000 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`f` specifier, minimum width, left-justified, decimal precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%-8.3f';
- actual = format( str, 3.14 );
- expected = '3.140 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %-8.3f';
- actual = format( str, 5.0 );
- expected = 'beep 5.000 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%-8.3f %.3f baz';
- actual = format( str, 3.14, 5.0 );
- expected = '3.140 5.000 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`b` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%b';
- actual = format( str, 3 );
- expected = '11';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %b';
- actual = format( str, 5 );
- expected = 'beep 101';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%b %b baz';
- actual = format( str, 3, 5 );
- expected = '11 101 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`b` specifier, alternate form)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%#b';
- actual = format( str, 3 );
- expected = '11';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %#b';
- actual = format( str, 5 );
- expected = 'beep 101';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#b %#b baz';
- actual = format( str, 3, 5 );
- expected = '11 101 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`b` specifier, minimum width)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%12b';
- actual = format( str, 3 );
- expected = ' 11';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %12b';
- actual = format( str, 5 );
- expected = 'beep 101';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`b` specifier, minimum width, left-justified)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%-12b';
- actual = format( str, 3 );
- expected = '11 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %-12b';
- actual = format( str, 5 );
- expected = 'beep 101 ';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`b` specifier, minimum width, zero-padded)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%012b';
- actual = format( str, 3 );
- expected = '000000000011';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %012b';
- actual = format( str, 5 );
- expected = 'beep 000000000101';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`o` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%o';
- actual = format( str, 12 );
- expected = '14';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %o';
- actual = format( str, 5 );
- expected = 'beep 5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%o %o baz';
- actual = format( str, 8, 9 );
- expected = '10 11 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`o` specifier, alternate form)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%#o';
- actual = format( str, 12 );
- expected = '014';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %#o';
- actual = format( str, 5 );
- expected = 'beep 05';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#o %#o baz';
- actual = format( str, 8, 9 );
- expected = '010 011 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`x` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%x';
- actual = format( str, 12 );
- expected = 'c';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %x';
- actual = format( str, 5 );
- expected = 'beep 5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%x %x baz';
- actual = format( str, 14, 15 );
- expected = 'e f baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`x` specifier, alternate form)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%#x';
- actual = format( str, 12 );
- expected = '0xc';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %#x';
- actual = format( str, 5 );
- expected = 'beep 0x5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#x %#x baz';
- actual = format( str, 14, 15 );
- expected = '0xe 0xf baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`X` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%X';
- actual = format( str, 12 );
- expected = 'C';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %X';
- actual = format( str, 5 );
- expected = 'beep 5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%X %X baz';
- actual = format( str, 14, 15 );
- expected = 'E F baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`X` specifier, alternate form)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%#X';
- actual = format( str, 12 );
- expected = '0XC';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %#X';
- actual = format( str, 5 );
- expected = 'beep 0X5';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%#X %#X baz';
- actual = format( str, 14, 15 );
- expected = '0XE 0XF baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`u` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%u';
- actual = format( str, 12 );
- expected = '12';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %u';
- actual = format( str, -5 );
- expected = 'beep 4294967291';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%u %u baz';
- actual = format( str, 14, 15 );
- expected = '14 15 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`e` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%e';
- actual = format( str, 12 );
- expected = '1.200000e+01';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %e';
- actual = format( str, -5 );
- expected = 'beep -5.000000e+00';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%e %e baz';
- actual = format( str, 14, 15 );
- expected = '1.400000e+01 1.500000e+01 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`e` specifier, minimum width, precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%12.2e';
- actual = format( str, 12 );
- expected = ' 1.20e+01';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %12.2e';
- actual = format( str, -5 );
- expected = 'beep -5.00e+00';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%12.2e %12.2e baz';
- actual = format( str, 14, 15 );
- expected = ' 1.40e+01 1.50e+01 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`E` specifier)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%E';
- actual = format( str, 12 );
- expected = '1.200000E+01';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %E';
- actual = format( str, -5 );
- expected = 'beep -5.000000E+00';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%E %E baz';
- actual = format( str, 14, 15 );
- expected = '1.400000E+01 1.500000E+01 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`E` specifier, minimum width, precision)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%12.2E';
- actual = format( str, 12 );
- expected = ' 1.20E+01';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = 'beep %12.2E';
- actual = format( str, -5 );
- expected = 'beep -5.00E+00';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%12.2E %12.2E baz';
- actual = format( str, 14, 15 );
- expected = ' 1.40E+01 1.50E+01 baz';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
-
-tape( 'the function returns a formatted string (`s` specifier, positional arguments)', function test( t ) {
- var expected;
- var actual;
- var str;
-
- str = '%2$s %1$s!';
- actual = format( str, 'World', 'Hello' );
- expected = 'Hello World!';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%2$s %1$s %1$s!';
- actual = format( str, 'World', 'Hello' );
- expected = 'Hello World World!';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- str = '%3$s %2$s %1$s!';
- actual = format( str, 'C', 'B', 'A' );
- expected = 'A B C!';
- t.strictEqual( actual, expected, 'returns expected output' );
-
- t.end();
-});
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy