/*
 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package org.graalvm.compiler.jtt.optimize;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;

import org.junit.Test;

import org.graalvm.compiler.jtt.JTTTest;

/*
 * Tests optimization of switches.
 */
public class Switch02 extends JTTTest {
    private static char staticCharVal = 0;
    private static short staticShortVal = 0;
    private static byte staticByteVal = 0;

    public static int test(int arg) {
        switch (arg) {
            case 1:
                return 2;
            default:
                return 1;
        }
    }

    public static int test2char(char arg) {
        int result = 392123;
        Object x = null;
        char val = staticCharVal != 0 ? staticCharVal : arg;
        switch (val) {
            case (char) 0xFFFF:
                result = 23212 / val;
                break;
            case (char) 0xFFFF - 3:
                result = 932991439 / val;
                break;
            case (char) 0xFFFF - 6:
                result = 47329561 / val;
                break;
            case (char) 0xFFFF - 9:
                result = 1950976984 / val;
                break;
            case (char) 0xFFFF - 10:
                result = 97105581 / val;
                switch (result) {
                    case 1:
                        result = 321;
                        break;
                    default:
                        result = 2391;
                        break;
                }
                break;
            case (char) 0xFFFF - 12:
                result = 99757362 / val;
                break;
            case (char) 0xFFFF - 15:
                result = 912573 / val;
                x = new LinkedList<>();
                break;
            case (char) 0xFFFF - 18:
                x = new HashSet<>();
                result = 876765 / val;
                break;
            case (char) 0xFFFF - 19:
                result = 75442917 / val;
                break;
            case (char) 0xFFFF - 21:
                result = 858112498 / val;
                x = new HashMap<>();
                break;
            default:
                result = 34324341 / val;
        }
        result = result + (x == null ? 0 : x.hashCode());
        return result;
    }

    public static int test2short(short arg) {
        int result = 392123;
        Object x = null;
        short val = staticShortVal != 0 ? staticShortVal : arg;
        switch (val) {
            case (short) -0x7FFF:
                result = 23212 / val;
                break;
            case (short) -0x7FFF + 3:
                result = 932991439 / val;
                break;
            case (short) -0x7FFF + 6:
                result = 47329561 / val;
                break;
            case (short) -0x7FFF + 9:
                result = 1950976984 / val;
                break;
            case (short) -0x7FFF + 10:
                result = 97105581 / val;
                switch (result) {
                    case 1:
                        result = 321;
                        break;
                    default:
                        result = 2391;
                        break;
                }
                break;
            case (short) -0x7FFF + 12:
                result = 99757362 / val;
                break;
            case (short) -0x7FFF + 15:
                result = 912573 / val;
                x = new LinkedList<>();
                break;
            case (short) -0x7FFF + 18:
                x = new HashSet<>();
                result = 876765 / val;
                break;
            case (short) -0x7FFF + 19:
                result = 75442917 / val;
                break;
            case (short) -0x7FFF + 21:
                result = 858112498 / val;
                x = new HashMap<>();
                break;
            default:
                result = 34324341 / val;
        }
        result = result + (x == null ? 0 : x.hashCode());
        return result;
    }

    public static int test2byte(byte arg) {
        int result = 392123;
        Object x = null;
        byte val = staticByteVal != 0 ? staticByteVal : arg;
        switch (val) {
            case (byte) -0x7F:
                result = 23212 / val;
                break;
            case (byte) -0x7F + 3:
                result = 932991439 / val;
                break;
            case (byte) -0x7F + 6:
                result = 47329561 / val;
                break;
            case (byte) -0x7F + 9:
                result = 1950976984 / val;
                break;
            case (byte) -0x7F + 10:
                result = 97105581 / val;
                switch (result) {
                    case 1:
                        result = 321;
                        break;
                    default:
                        result = 2391;
                        break;
                }
                break;
            case (byte) -0x7F + 12:
                result = 99757362 / val;
                break;
            case (byte) -0x7F + 15:
                result = 912573 / val;
                x = new LinkedList<>();
                break;
            case (byte) -0x7F + 18:
                x = new HashSet<>();
                result = 876765 / val;
                break;
            case (byte) -0x7F + 19:
                result = 75442917 / val;
                break;
            case (byte) -0x7F + 20:
                result = 856261268 / val;
                break;
            case (byte) -0x7F + 21:
                result = 858112498 / val;
                x = new HashMap<>();
                break;
            default:
                result = 34324341 / val;
        }
        result = result + (x == null ? 0 : x.hashCode());
        return result;
    }

    @Test
    public void run0() throws Throwable {
        runTest("test", 0);
    }

    @Test
    public void run1() throws Throwable {
        runTest("test", 1);
    }

    @Test
    public void run2() throws Throwable {
        runTest("test2char", (char) (0x0));
        runTest("test2char", (char) (0xFFFF));
        runTest("test2char", (char) (0xFFFF - 21)); // miss
        runTest("test2char", (char) (0xFFFF - 22)); // hit
        runTest("test2char", (char) (0xFFFF - 23)); // miss (out of bound)

        staticCharVal = (char) 0xFFFF;
        runTest("test2char", (char) 0);
        staticCharVal = (char) (0xFFFF - 21);
        runTest("test2char", (char) 0xFFFF);
        staticCharVal = (char) (0xFFFF - 22);
        runTest("test2char", (char) 0xFFFF);
        staticCharVal = (char) (0xFFFF - 23);
        runTest("test2char", (char) 0xFFFF);
    }

    @Test
    public void run3() throws Throwable {
        runTest("test2short", (short) 0x0);
        runTest("test2short", (short) -0x7FFF);
        runTest("test2short", (short) (-0x7FFF + 21)); // Miss
        runTest("test2short", (short) (-0x7FFF + 22)); // hit
        runTest("test2short", (short) (-0x7FFF + 23)); // miss (out of bound)
        runTest("test2short", (short) 0x7FFF);         // miss (out of bound)

        staticShortVal = (short) -0x7FFF;
        runTest("test2short", (short) 0);
        staticShortVal = (short) (-0x7FFF + 21);
        runTest("test2short", (short) 0);
        staticShortVal = (short) (-0x7FFF + 22);
        runTest("test2short", (short) 0);
        staticShortVal = (short) (-0x7FFF + 23);
        runTest("test2short", (short) 0);
        staticShortVal = (short) 0x7FFF;
        runTest("test2short", (short) 0);
    }

    @Test
    public void run4() throws Throwable {
        runTest("test2byte", (byte) 0);
        runTest("test2byte", (byte) -0x7F);
        runTest("test2byte", (byte) (-0x7F + 21)); // Miss
        runTest("test2byte", (byte) (-0x7F + 22)); // hit
        runTest("test2byte", (byte) (-0x7F + 23)); // miss (out of bound)
        runTest("test2byte", (byte) 0x7F);         // miss (out of bound)

        staticByteVal = (byte) -0x7F;
        runTest("test2short", (short) 0);
        staticByteVal = (byte) (-0x7F + 21);
        runTest("test2short", (short) 0);
        staticByteVal = (byte) (-0x7F + 22);
        runTest("test2short", (short) 0);
        staticByteVal = (byte) (-0x7F + 23);
        runTest("test2short", (short) 0);
        staticByteVal = (byte) 0x7F;
        runTest("test2short", (short) 0);
    }
}
