text: //-------------------------------------------------------------------------------------------------------
  // Copyright (C) Microsoft. All rights reserved.
  // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  //-------------------------------------------------------------------------------------------------------
  
  var DEBUG = false;
  function sameValue(x, y) {
    if (x == y)
    {
       return x != 0 || y != 0 || (1/x == 1/y); // 0.0 != -0.0
    }
    return (x != x) && (y != y);  // NaN == NaN
  }
  
  function equal(ev, v) {
      var eps = 0.000001;
  
      if (sameValue(ev, v))
      {
          if(DEBUG) WScript.Echo("same value");
          return true;
      }
      else if ((ev == 0.0 || v == 0.0) && Math.abs(v - ev) <= eps) // -0.0 covered here
      {
          if(DEBUG) WScript.Echo("Float 0.0 ");
          return true;
      }
      else if (Math.abs(v - ev) / Math.abs(ev) <= eps)
      {
          if(DEBUG) WScript.Echo("Float values within eps");
          return true;
      }
      else
      {
          WScript.Echo(">> Fail!");
          WScript.Echo("Expected "+ev+" Found "+v);
      }
  }
  
  function equalSimd(values, simdValue, type, msg)
  {   var ok = true;
      
      if (type == SIMD.Float32x4 || type === SIMD.Int32x4)
          length = 4;
      
      if (Array.isArray(values))
      {
          for ( var i = 0; i < length; i ++)
          {
              if(!equal(values[i],type.extractLane(simdValue, i)))
              {
                  ok = false;
              }
          }
          if (ok)
              return;
          else
          {
              
              WScript.Echo(">> Fail!");
              if (msg !== undefined)
              {
                  WScript.Echo(msg);
                  
              }
              printSimd(simdValue, type);
          }
      }
      else
      {
          type.check(values);
          
          for ( var i = 0; i < length; i ++)
          {
              if(!equal(type.extractLane(values, i),type.extractLane(simdValue, i)))
              {
                  ok = false;
              }
          }
          if (ok)
              return;
          else
          {
              WScript.Echo(">> Fail!");
              if (msg !== undefined)
              {
                  WScript.Echo(msg);
              }
              printSimd(simdValue, type);
          }
      }
  }
  
  function printSimd(simdValue, type)
  {
      var length;
      var vals = "";
      
      if (type === SIMD.Float32x4 || type === SIMD.Int32x4)
      {
          length = 4;
      }
      for (var i = 0; i < length; i ++)
      {
          vals += type.extractLane(simdValue,i);
          if (i < 3)
              vals += ", "
      }
      WScript.Echo(type.toString() + "(" + vals + ")");
  }
  