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

/*---
info: If any value is NaN, the result of Math.min is NaN
es5id: 15.8.2.12_A2
description: >
    The script tests Math.min giving 1, 2 and 3 arguments to the
    function where at least one of the arguments is NaN
---*/

// CHECK#1
assert.sameValue(Math.min(NaN), NaN, "NaN");

// CHECK#2
var vals = new Array();
vals[0] = -Infinity;
vals[1] = -0.000000000000001;
vals[2] = -0;
vals[3] = +0
vals[4] = 0.000000000000001;
vals[5] = +Infinity;
vals[6] = NaN;
var valnum = 7;

var args = new Array();
for (var i = 0; i <= 1; i++)
{
	args[i] = NaN;
	for (var j = 0; j < valnum; j++)
	{
		args[1-i] = vals[j];
		assert.sameValue(
			Math.min(args[0], args[1]),
			NaN,
			"min(" + args[0] + ", " + args[1] + ")"
		);
	}
}

// CHECK #3
var k = 1;
var l = 2;
for (var i = 0; i <= 2; i++)
{
	args[i] = NaN;
	if (i === 1)
	{
		k = 0;
	} else if (i === 2)
	{
	 	l = 1;	
	}
	for (var j = 0; j < valnum; j++)
	{
		for (var jj = 0; jj < valnum; jj++)
		{
			args[k] = vals[j];
			args[l] = vals[jj];
			assert.sameValue(
				Math.min(args[0], args[1], args[2]),
				NaN,
				"min(" + args[0] + ", " + args[1] + ", " + args[2] + ")"
			);
		}
	}
}
