main.js (1730B)
1 /** 2 * @license Apache-2.0 3 * 4 * Copyright (c) 2018 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 isArrayBuffer = require( './../../is-arraybuffer' ); 24 var Float64Array = require( '@stdlib/array/float64' ); 25 var GlobalArrayBuffer = require( './arraybuffer.js' ); 26 27 28 // MAIN // 29 30 /** 31 * Tests for native `ArrayBuffer` support. 32 * 33 * @returns {boolean} boolean indicating if an environment has `ArrayBuffer` support 34 * 35 * @example 36 * var bool = hasArrayBufferSupport(); 37 * // returns <boolean> 38 */ 39 function hasArrayBufferSupport() { 40 var bool; 41 var view; 42 var buf; 43 44 if ( typeof GlobalArrayBuffer !== 'function' ) { 45 return false; 46 } 47 // Test basic support... 48 try { 49 buf = new GlobalArrayBuffer( 16 ); 50 bool = ( isArrayBuffer( buf ) && typeof GlobalArrayBuffer.isView === 'function' ); 51 if ( bool ) { 52 view = new Float64Array( buf ); 53 view[ 0 ] = -3.14; 54 view[ 1 ] = NaN; 55 bool = ( 56 bool && 57 GlobalArrayBuffer.isView( view ) && 58 buf.byteLength === 16 && 59 view[ 0 ] === -3.14 && 60 view[ 1 ] !== view[ 1 ] 61 ); 62 } 63 } catch ( err ) { // eslint-disable-line no-unused-vars 64 bool = false; 65 } 66 return bool; 67 } 68 69 70 // EXPORTS // 71 72 module.exports = hasArrayBufferSupport;