// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    Returns a boolean value (not a Boolean object) computed by
    ToBoolean(value)
esid: sec-terms-and-definitions-boolean-value
es5id: 15.6.1.1_A1_T5
description: Used various assigning values to any variable as argument
---*/

var x;

//CHECK#1
if( typeof Boolean(x=0) !== "boolean" ) {
  $ERROR('#1.1: typeof Boolean(x=0) should be "boolean", actual is "'+typeof Boolean(x=0)+'"');
}
if( Boolean(x=0) !== false ) {
  $ERROR('#1.2: Boolean(x=0) should be false');
}

//CHECK#2
if( typeof Boolean(x=1) !== "boolean" ) {
  $ERROR('#2.1: typeof Boolean(x=1) should be "boolean", actual is "'+typeof Boolean(x=1)+'"');
}
if( Boolean(x=1) !== true ) {
  $ERROR('#2.2: Boolean(x=1) should be true');
}

//CHECK#3
if( typeof Boolean(x=false) !== "boolean" ) {
  $ERROR('#3.1: typeof Boolean(x=false) should be "boolean", actual is "'+typeof Boolean(x=false)+'"');
}
if( Boolean(x=false) !== false ) {
  $ERROR('#3.2: Boolean(x=false) should be false');
}

//CHECK#4
if( typeof Boolean(x=true) !== "boolean" ) {
  $ERROR('#4.1: typeof Boolean(x=true) should be "boolean", actual is "'+typeof Boolean(x=true)+'"');
}
if( Boolean(x=true) !== true ) {
  $ERROR('#4.2: Boolean(x=true) should be true');
}

//CHECK#5
if( typeof Boolean(x=null) !== "boolean" ) {
  $ERROR('#5.1: typeof Boolean(x=null) should be "boolean", actual is "'+typeof Boolean(x=null)+'"');
}
if( Boolean(x=null) !== false ) {
  $ERROR('#5.2: Boolean(x=null) should be false');
}
