From 72f553eac1a4c7a7b5c865e06dff1d9d3e9f770d Mon Sep 17 00:00:00 2001 From: Chris Knight Date: Thu, 30 Jan 2020 23:57:29 +0000 Subject: [PATCH] feat(node) Endianness (denoland/deno#3833) --- node/os.ts | 15 ++++++++++++--- node/os_test.ts | 14 +++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/node/os.ts b/node/os.ts index ee64bfcebd90..c5e0f6c7613a 100644 --- a/node/os.ts +++ b/node/os.ts @@ -19,6 +19,7 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. import { notImplemented } from "./_utils.ts"; +import { EOL as fsEOL } from "../fs/eol.ts"; const SEE_GITHUB_ISSUE = "See https://github.com/denoland/deno/issues/3802"; @@ -96,9 +97,17 @@ export function cpus(): CPUCoreInfo[] { notImplemented(SEE_GITHUB_ISSUE); } -/** Not yet implemented */ +/** + * Returns a string identifying the endianness of the CPU for which the Deno + * binary was compiled. Possible values are 'BE' for big endian and 'LE' for + * little endian. + **/ export function endianness(): "BE" | "LE" { - notImplemented(SEE_GITHUB_ISSUE); + // Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView#Endianness + const buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true /* littleEndian */); + // Int16Array uses the platform's endianness. + return new Int16Array(buffer)[0] === 256 ? "LE" : "BE"; } /** Not yet implemented */ @@ -201,7 +210,7 @@ export const constants = { } }; -export const EOL = Deno.build.os == "win" ? "\r\n" : "\n"; +export const EOL = Deno.build.os == "win" ? fsEOL.CRLF : fsEOL.LF; const validateInt32 = ( value: number, diff --git a/node/os_test.ts b/node/os_test.ts index 88f0113ec568..65a9ef374b24 100644 --- a/node/os_test.ts +++ b/node/os_test.ts @@ -154,6 +154,13 @@ test({ } }); +test({ + name: "Endianness is determined", + fn() { + assert(["LE", "BE"].includes(os.endianness())); + } +}); + // Method is currently implemented correctly for windows but not for any other os test({ name: "Load average is an array of 3 numbers", @@ -187,13 +194,6 @@ test({ Error, "Not implemented" ); - assertThrows( - () => { - os.endianness(); - }, - Error, - "Not implemented" - ); assertThrows( () => { os.freemem();