/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * vim: set ts=8 sts=4 et sw=4 tw=99:
 */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#include "tests.h"

#include <math.h>

#include "vm/NumericConversions.h"

using js::detail::ToIntWidth;
using js::detail::ToUintWidth;

BEGIN_TEST(testToUint8TwiceUint8Range)
{
    double d = -256;
    uint8_t expected = 0;
    do {
        CHECK(ToUintWidth<uint8_t>(d) == expected);

        d++;
        expected++;
    } while (d <= 256);
    return true;
}
END_TEST(testToUint8TwiceUint8Range)

BEGIN_TEST(testToInt8)
{
    double d = -128;
    int8_t expected = -128;
    do {
        CHECK(ToIntWidth<int8_t>(d) == expected);

        d++;
        expected++;
    } while (expected < 127);
    return true;
}
END_TEST(testToInt8)

BEGIN_TEST(testToUint32Large)
{
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 83)) == 0);
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 83) + pow(2.0, 31)) == (1U << 31));
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 83) + 2 * pow(2.0, 31)) == 0);
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 83) + 3 * pow(2.0, 31)) == (1U << 31));
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 84)) == 0);
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 84) + pow(2.0, 31)) == 0);
    CHECK(ToUintWidth<uint32_t>(pow(2.0, 84) + pow(2.0, 32)) == 0);
    return true;
}
END_TEST(testToUint32Large)

BEGIN_TEST(testToUint64Large)
{
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 115)) == 0);
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 115) + pow(2.0, 63)) == (1ULL << 63));
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 115) + 2 * pow(2.0, 63)) == 0);
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 115) + 3 * pow(2.0, 63)) == (1ULL << 63));
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 116)) == 0);
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 116) + pow(2.0, 63)) == 0);
    CHECK(ToUintWidth<uint64_t>(pow(2.0, 116) + pow(2.0, 64)) == 0);
    return true;
}
END_TEST(testToUint64Large)
