/*
 * Copyright (c) 2019 The Regents of the University of California
 * All rights reserved
 *
 * Redistribution and use in source and binary forms,  with or without
 * modification,  are permitted provided that the following conditions are
 * met: redistributions of source code must retain the above copyright
 * notice,  this list of conditions and the following disclaimer;
 * redistributions in binary form must reproduce the above copyright
 * notice,  this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT
 * LIMITED TO,  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,  INDIRECT,  INCIDENTAL,
 * SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT NOT
 * LIMITED TO,  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA,  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY,  WHETHER IN CONTRACT,  STRICT LIABILITY,  OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE,  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Authors: Bobby R. Bruce
 *          Jared J. Barocsi
 */

#include <gtest/gtest.h>

#include "base/condcodes.hh"

/*
 * Add 0x80 + 0x80 to get 0x100. findCarry should report a carry flag after
 * this operation.
 */
TEST(CondCodes, FindCarryWithNoCarryIn8Bit)
{
    EXPECT_TRUE(findCarry(8, 0x100, 0x80, 0x80));
}

/*
 * Add 0xf0 + 0x0f to get 0xff. findCarry should not report a carry flag after
 * this operation.
 */
TEST(CondCodes, FindNoCarryWithNoCarryIn8Bit)
{
    EXPECT_FALSE(findCarry(8, 0xff, 0xf0, 0x0f));
}

/*
 * Add 0x7f + 0x80 + 0x01 to get 0x100. findCarry should report a carry flag
 * after this operation.
 */
TEST(CondCodes, FindCarryWithCarryIn8Bit)
{
    EXPECT_TRUE(findCarry(8, 0x100, 0x80, 0x7f));
}

/*
 * Add 0x80 + 0x7e + 0x01 to get 0xff. findCarry should not report a carry
 * flag after this operation.
 */
TEST(CondCodes, FindNoCarryWithCarryIn8Bit)
{
    EXPECT_FALSE(findCarry(8, 0xff, 0x80, 0x7e));
}

/*
 * Add 0x80000000 + 0x80000000 to get 0x100000000. findCarry should report a
 * carry flag after this operation.
 */
TEST(CondCodes, FindCarryWithNoCarryIn32Bit)
{
    EXPECT_TRUE(findCarry(32, 0x100000000, 0x80000000, 0x80000000));
}

/*
 * Add 0xffff0000 + 0x0000ffff to get 0xffffffff. findCarry should not report a
 * carry flag after this operation.
 */
TEST(CondCodes, FindNoCarryWithNoCarryIn32Bit)
{
    EXPECT_FALSE(findCarry(32, 0xffffffff, 0xffff0000, 0x0000ffff));
}

TEST(CondCodes, FindCarryWithCarryIn32Bit)
{
    /*
     * Add 0x80000000 + 0x7fffffff + 0x00000001 to get 0x100000000,
     * resulting in a carry
     */
    EXPECT_TRUE(findCarry(32, 0x100000000, 0x80000000, 0x7fffffff));
    // Add 0x80000000 + 0x7ffffffe + 0x00000001 to get 0xffffffff,
    // resulting in no carry
    EXPECT_FALSE(findCarry(32, 0xffffffff, 0x80000000, 0x7ffffffe));
    // Add 0xffffffff + 0x00000000 + 0x00000001 to get 0x100000000,
    // resulting in a carry
    EXPECT_TRUE(findCarry(32, 0x100000000, 0xffffffff, 0x00000000));
}

TEST(CondCodes, FindCarryWithNoCarryIn64Bit)
{
    // Add 0x8000000000000000 + 0x8000000000000000 to get 0x10000000000000000,
    // (unrepresentable with uint64_t),  resulting in a carry
    EXPECT_TRUE(findCarry(64, 0x0000000000000000,
                              0x8000000000000000,
                              0x8000000000000000));
    /*
     * Add 0x0000000000000000 + 0x0000000000000000 to get 0x0000000000000000
     * resulting in no carry
     * We get the same sum as above case due to unrepresentability,  but we
     * should still expect no carry
     */
    EXPECT_FALSE(findCarry(64, 0x0000000000000000,
                               0x0000000000000000,
                               0x0000000000000000));
    /*
     * Add 0x8000000000000000 + 0x7fffffffffffffff to get 0xffffffffffffffff,
     * resulting in no carry
     */
    EXPECT_FALSE(findCarry(64, 0xffffffffffffffff,
                               0x8000000000000000,
                               0x7fffffffffffffff));
    /*
     * Add 0xffffffff00000000 + 0x00000000ffffffff to get 0xffffffffffffffff,
     * resulting in no carry
     */
    EXPECT_FALSE(findCarry(64, 0xffffffffffffffff,
                               0xffffffff00000000,
                               0x00000000ffffffff));
}

TEST(CondCodes, FindCarryWithCarryIn64Bit)
{
    /* Add 0x8000000000000000 + 0x8000000000000000 + 0x0000000000000001
     * to get 0x1 000000000000001 (unrepresentable with uint64_t),
     * resulting in a carry
     */
    EXPECT_TRUE(findCarry(64, 0x0000000000000000,
                              0x8000000000000000,
                              0x7fffffffffffffff));
    /*
     * Add 0x0000000000000000 + 0x0000000000000000 + 0x0000000000000001
     * resulting in no carry
     * We get the same sum as the above case due to unrepresentability, but we
     * should still expect no carry
     */
    EXPECT_FALSE(findCarry(64, 0x0000000000000001,
                               0x0000000000000000,
                               0x0000000000000000));
    /*
     * Add 0x8000000000000000 + 0x7fffffffffffffff + 0x0000000000000001
     * to get 0x1 0000000000000000 (unrepresentable with uint64_t),
     * resulting in a carry
     */
    EXPECT_TRUE(findCarry(64, 0x0000000000000000,
                              0x8000000000000000,
                              0x7fffffffffffffff));
    /*
     * Add 0xffffffff00000000 + 0x000000000000000 + 0x0000000000000001
     * to get 0x1 0000000000000000 (unrepresentable with uint64_t),
     * resulting in a carry
     */
    EXPECT_TRUE(findCarry(64, 0x0000000000000000,
                              0xffffffffffffffff,
                              0x0000000000000001));
}

TEST(CondCodes, FindOverflow8Bit)
{
    /*
     * Addition of 127 + 1 = 128 or -128 as signed two's complement.
     * Overflow occurs in this case
     */
    EXPECT_TRUE(findOverflow(8, 0x80, 0x7f, 0x01));
    /*
     * Addition of 64 + 63 = 127,  or 127 as signed two's complement.
     * No overflow occurs
     */
    EXPECT_FALSE(findOverflow(8, 0x7f, 0x40, 0x3f));
}

TEST(CondCodes, FindOverflow32Bit)
{
    /*
     * Addition of 2,147,483,647 + 1 = 2,147,483,648, or -2,147,483,648 as
     * signed two's complement. Overflow occurs in this case
     */
    EXPECT_TRUE(findOverflow(32, 0x80000000, 0x7fffffff, 0x00000001));
    /*
     * Addition of 1,073,741,824 + 1,073,741,823 = 2,147,483,647, or
     * 2,147,483,647 as signed two's complement. No overflow occurs
     */
    EXPECT_FALSE(findOverflow(32, 0x7fffffff, 0x40000000, 0x3fffffff));
}

TEST(CondCodes, FindOverflow64Bit)
{
    /*
     * Addition of 0x7fffffffffffffff + 0x0000000000000001 =
     * 0x8000000000000000, or -9,223,372,036,854,775,808 as signed two's
     * complement. Overflow occurs in this case
     */
    EXPECT_TRUE(findOverflow(64, 0x8000000000000000,
                                 0x7fffffffffffffff,
                                 0x0000000000000001));
    /* Addition of 0x4000000000000000 + 0x3fffffffffffffff =
     * 0x7fffffffffffffff, or 9,223,372,036,854,775,807 as signed two's
     * complement. No overflow occurs
     */
    EXPECT_FALSE(findOverflow(64, 0x7fffffffffffffff,
                                  0x4000000000000000,
                                  0x3fffffffffffffff));
}

TEST(CondCodes, OddParity)
{
    EXPECT_EQ(1, findParity(8, 1));
}

TEST(CondCodes, EvenParity)
{
    EXPECT_EQ(0, findParity(8, 3));
}

TEST(CondCodes, OddParityOverflow)
{
    EXPECT_EQ(1, findParity(8, 0x102));
}

TEST(CondCodes, EvenParityOverflow)
{
    EXPECT_EQ(0, findParity(4,0x43));
}

TEST(CondCodes, IsNegative)
{
    EXPECT_EQ(1, findNegative(8, 128));
}

TEST(CondCodes, IsNotNegative)
{
    EXPECT_EQ(0, findNegative(8, 127));
}

TEST(CondCodes, IsZero)
{
    EXPECT_EQ(1, findZero(8, 0));
}

TEST(CondCodes, IsNotZero)
{
    EXPECT_EQ(0, findZero(8, 1));
}

TEST(CondCodes, IsZeroOverflow)
{
    EXPECT_EQ(1, findZero(8,0x100));
}
