Skip to content

assert.equal(0/0, 0/0) fails despite both being NaN #30350

@balupton

Description

@balupton
  • Version: v12.12.0
  • Platform: Darwin balupton-macbook.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64
  • Subsystem: 64-bit
const assert = require('assert')
function log(fn) {
	try {
		fn()
	} catch (e) {
		console.error('---')
		console.error(fn.toString())
		console.error(e)
		console.error('\n')
	}
}

// nan value
log(() => assert.equal(0 / 0, 0 / 0))
log(() => assert.deepEqual(0 / 0, 0 / 0))

// nan reference
const nan = 0 / 0
log(() => assert.equal(nan, nan))
log(() => assert.deepEqual(nan, nan))

// object value
log(() => assert.deepEqual({ p: nan }, { p: nan }))

// object reference
const o = { p: nan }
log(() => assert.equal(o, o))
log(() => assert.deepEqual(o, o))
---
() => assert.equal(0 / 0, 0 / 0)
AssertionError [ERR_ASSERTION]: NaN == NaN
    at /Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:14:18
    at log (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:4:3)
    at Object.<anonymous> (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:14:1)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: NaN,
  expected: NaN,
  operator: '=='
}


---
() => assert.deepEqual(0 / 0, 0 / 0)
AssertionError [ERR_ASSERTION]: Expected values to be loosely deep-equal:

NaN

should loosely deep-equal

NaN
    at /Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:15:18
    at log (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:4:3)
    at Object.<anonymous> (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:15:1)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: NaN,
  expected: NaN,
  operator: 'deepEqual'
}


---
() => assert.equal(nan, nan)
AssertionError [ERR_ASSERTION]: NaN == NaN
    at /Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:19:18
    at log (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:4:3)
    at Object.<anonymous> (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:19:1)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: NaN,
  expected: NaN,
  operator: '=='
}


---
() => assert.deepEqual(nan, nan)
AssertionError [ERR_ASSERTION]: Expected values to be loosely deep-equal:

NaN

should loosely deep-equal

NaN
    at /Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:20:18
    at log (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:4:3)
    at Object.<anonymous> (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:20:1)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: NaN,
  expected: NaN,
  operator: 'deepEqual'
}


---
() => assert.deepEqual({ p: nan }, { p: nan })
AssertionError [ERR_ASSERTION]: Expected values to be loosely deep-equal:

{
  p: NaN
}

should loosely deep-equal

{
  p: NaN
}
    at /Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:23:18
    at log (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:4:3)
    at Object.<anonymous> (/Users/balupton/Projects/batches/obligations/promises/normalify/node-issue-30350.js:23:1)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11 {
  generatedMessage: true,
  code: 'ERR_ASSERTION',
  actual: [Object],
  expected: [Object],
  operator: 'deepEqual'
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    assertIssues and PRs related to the assert subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions