// Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc description: > Replaces value field even if they pass in the SameValue algorithm, including distinct NaN values info: | This test does not compare the actual byte values, instead it simply checks that the value is some valid NaN encoding. --- Previously, this method compared the "value" field using the SameValue algorithm (thereby ignoring distinct NaN values) --- [[DefineOwnProperty]] (P, Desc) Return ? OrdinaryDefineOwnProperty(O, P, Desc). #sec-ordinarydefineownproperty OrdinaryDefineOwnProperty ( O, P, Desc ) 1. Let current be ? O.[[GetOwnProperty]](P). 2. Let extensible be O.[[Extensible]]. 3. Return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current). #sec-validateandapplypropertydescriptor ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current ) ... 7. Else if IsDataDescriptor(current) and IsDataDescriptor(Desc) are both true, then a. If current.[[Configurable]] is false and current.[[Writable]] is false, then ... ... 9. If O is not undefined, then a. For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. 10. Return true. #sec-isnan-number NOTE: A reliable way for ECMAScript code to test if a value X is a NaN is an expression of the form X !== X. The result will be true if and only if X is a NaN. includes: [nans.js] ---*/ var len = NaNs.length; for (var idx = 0; idx < len; ++idx) { for (var jdx = 0; jdx < len; ++jdx) { var a = {}; var b = {}; Object.defineProperty(a, "prop", { value: NaNs[idx], configurable: true, }); Object.defineProperty(a, "prop", { value: NaNs[jdx], }); assert( a.prop !== a.prop, `Object property value reconfigured to NaN produced by (index=${idx}) results in a valid NaN` ); } } reportCompare(0, 0);