146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil/*
246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* Copyright (C) 2015 The Android Open Source Project
346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil*
446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* Licensed under the Apache License, Version 2.0 (the "License");
546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* you may not use this file except in compliance with the License.
646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* You may obtain a copy of the License at
746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil*
846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil*      http://www.apache.org/licenses/LICENSE-2.0
946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil*
1046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* Unless required by applicable law or agreed to in writing, software
1146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* distributed under the License is distributed on an "AS IS" BASIS,
1246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* See the License for the specific language governing permissions and
1446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil* limitations under the License.
1546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil*/
1646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
1746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdilpublic class Main {
1846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
1946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // Note #1: `javac` flips the conditions of If statements.
2046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // Note #2: In the optimizing compiler, the first input of Phi is always
2146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  //          the fall-through path, i.e. the false branch.
2246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
2346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static void assertBoolEquals(boolean expected, boolean result) {
2446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    if (expected != result) {
2546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil      throw new Error("Expected: " + expected + ", found: " + result);
2646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    }
2746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
2846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
29769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  public static void assertIntEquals(int expected, int result) {
30769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    if (expected != result) {
31769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil      throw new Error("Expected: " + expected + ", found: " + result);
32769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    }
33769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  }
34769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
3546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  /*
360d13fee6f4330cc9cb100c43135490a34c11d7a5David Brazdil   * Elementary test negating a boolean. Verifies that blocks are merged and
370d13fee6f4330cc9cb100c43135490a34c11d7a5David Brazdil   * empty branches removed.
3846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   */
3946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
4046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.BooleanNot(boolean) boolean_simplifier (before)
4146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Param:z\d+]]    ParameterValue
4246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
4346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
440d13fee6f4330cc9cb100c43135490a34c11d7a5David Brazdil  // CHECK-DAG:                       If [ [[Param]] ]
4546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Phi:i\d+]]      Phi [ [[Const1]] [[Const0]] ]
4646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[Phi]] ]
4746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
4846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.BooleanNot(boolean) boolean_simplifier (before)
4946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK:                           Goto
5046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK:                           Goto
5146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK:                           Goto
5246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-NOT:                       Goto
5346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
5446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.BooleanNot(boolean) boolean_simplifier (after)
5546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Param:z\d+]]    ParameterValue
5646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
570d13fee6f4330cc9cb100c43135490a34c11d7a5David Brazdil  // CHECK-DAG:     [[NotParam:z\d+]] BooleanNot [ [[Param]] ]
580d13fee6f4330cc9cb100c43135490a34c11d7a5David Brazdil  // CHECK-DAG:                       Return [ [[NotParam]] ]
5946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
6046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.BooleanNot(boolean) boolean_simplifier (after)
6146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-NOT:                       If
6246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-NOT:                       Phi
6346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
6446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.BooleanNot(boolean) boolean_simplifier (after)
6546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK:                           Goto
6646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-NOT:                       Goto
6746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
6846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static boolean BooleanNot(boolean x) {
6946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    return !x;
7046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
7146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
7246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  /*
7346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * Program which only delegates the condition, i.e. returns 1 when True
7446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * and 0 when False.
7546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   */
7646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
7746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.GreaterThan(int, int) boolean_simplifier (before)
7846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
7946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
8046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
8146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
8246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Cond:z\d+]]     GreaterThan [ [[ParamX]] [[ParamY]] ]
8346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       If [ [[Cond]] ]
8446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Phi:i\d+]]      Phi [ [[Const0]] [[Const1]] ]
8546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[Phi]] ]
8646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
8746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.GreaterThan(int, int) boolean_simplifier (after)
8846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
8946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
9046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
9146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
9246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Cond:z\d+]]     GreaterThan [ [[ParamX]] [[ParamY]] ]
9346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[Cond]] ]
9446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
9546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static boolean GreaterThan(int x, int y) {
9646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    return (x <= y) ? false : true;
9746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
9846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
9946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  /*
10046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * Program which negates a condition, i.e. returns 0 when True
10146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * and 1 when False.
10246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   */
10346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
10446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.LessThan(int, int) boolean_simplifier (before)
10546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
10646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
10746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
10846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
10946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Cond:z\d+]]     GreaterThanOrEqual [ [[ParamX]] [[ParamY]] ]
11046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       If [ [[Cond]] ]
11146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Phi:i\d+]]      Phi [ [[Const1]] [[Const0]] ]
11246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[Phi]] ]
11346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
11446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.LessThan(int, int) boolean_simplifier (after)
11546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
11646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
11746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
11846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
11946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Cond:z\d+]]     LessThan [ [[ParamX]] [[ParamY]] ]
12046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[Cond]] ]
12146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
12246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static boolean LessThan(int x, int y) {
123b2bd1c5f9171f35fa5b71ada42d1a9e11189428dDavid Brazdil    return (x < y) ? true : false;
12446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
12546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
12646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  /*
12746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * Program which further uses negated conditions.
12846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   * Note that Phis are discovered retrospectively.
12946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil   */
13046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
13146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.ValuesOrdered(int, int, int) boolean_simplifier (before)
13246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
13346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
13446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamZ:i\d+]]   ParameterValue
13546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const0:i\d+]]   IntConstant 0
13646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[Const1:i\d+]]   IntConstant 1
13746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CondXY:z\d+]]   GreaterThan [ [[ParamX]] [[ParamY]] ]
13846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       If [ [[CondXY]] ]
13946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CondYZ:z\d+]]   GreaterThan [ [[ParamY]] [[ParamZ]] ]
14046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       If [ [[CondYZ]] ]
14146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CondXYZ:z\d+]]  NotEqual [ [[PhiXY:i\d+]] [[PhiYZ:i\d+]] ]
14246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       If [ [[CondXYZ]] ]
14346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[PhiXYZ:i\d+]] ]
14446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[PhiXY]]         Phi [ [[Const1]] [[Const0]] ]
14546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[PhiYZ]]         Phi [ [[Const1]] [[Const0]] ]
14646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[PhiXYZ]]        Phi [ [[Const1]] [[Const0]] ]
14746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
14846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-START: boolean Main.ValuesOrdered(int, int, int) boolean_simplifier (after)
14946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamX:i\d+]]   ParameterValue
15046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamY:i\d+]]   ParameterValue
15146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[ParamZ:i\d+]]   ParameterValue
15246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CmpXY:z\d+]]    LessThanOrEqual [ [[ParamX]] [[ParamY]] ]
15346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CmpYZ:z\d+]]    LessThanOrEqual [ [[ParamY]] [[ParamZ]] ]
15446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:     [[CmpXYZ:z\d+]]   Equal [ [[CmpXY]] [[CmpYZ]] ]
15546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  // CHECK-DAG:                       Return [ [[CmpXYZ]] ]
15646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
15746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static boolean ValuesOrdered(int x, int y, int z) {
15846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    return (x <= y) == (y <= z);
15946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
16046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil
161769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-START: int Main.NegatedCondition(boolean) boolean_simplifier (before)
162769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Param:z\d+]]    ParameterValue
163769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Const42:i\d+]]  IntConstant 42
164769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Const43:i\d+]]  IntConstant 43
165769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[NotParam:z\d+]] BooleanNot [ [[Param]] ]
166769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:                       If [ [[NotParam]] ]
167769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Phi:i\d+]]      Phi [ [[Const42]] [[Const43]] ]
168769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:                       Return [ [[Phi]] ]
169769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
170769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-START: int Main.NegatedCondition(boolean) boolean_simplifier (after)
171769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Param:z\d+]]    ParameterValue
172769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Const42:i\d+]]  IntConstant 42
173769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Const43:i\d+]]  IntConstant 43
174769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:                       If [ [[Param]] ]
175769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:     [[Phi:i\d+]]      Phi [ [[Const42]] [[Const43]] ]
176769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-DAG:                       Return [ [[Phi]] ]
177769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
178769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // Note: The fact that branches are swapped is verified by running the test.
179769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
180769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-START: int Main.NegatedCondition(boolean) boolean_simplifier (after)
181769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  // CHECK-NOT:                       BooleanNot
182769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
183769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  public static int NegatedCondition(boolean x) {
184769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    if (x != false) {
185769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil      return 42;
186769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    } else {
187769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil      return 43;
188769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    }
189769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil  }
190769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil
19146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  public static void main(String[] args) {
19246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, BooleanNot(true));
19346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, BooleanNot(false));
19446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, GreaterThan(10, 5));
19546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, GreaterThan(10, 10));
19646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, GreaterThan(5, 10));
19746e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, LessThan(5, 10));
19846e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, LessThan(10, 10));
19946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, LessThan(10, 5));
20046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, ValuesOrdered(1, 3, 5));
20146e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, ValuesOrdered(5, 3, 1));
20246e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, ValuesOrdered(1, 3, 2));
20346e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, ValuesOrdered(2, 3, 1));
20446e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, ValuesOrdered(3, 3, 3));
20546e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(true, ValuesOrdered(3, 3, 5));
20646e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil    assertBoolEquals(false, ValuesOrdered(5, 5, 3));
207769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    assertIntEquals(42, NegatedCondition(true));
208769c9e539da8ca80aa914cd12276aa5bd79148eeDavid Brazdil    assertIntEquals(43, NegatedCondition(false));
20946e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil  }
21046e2a3915aa68c77426b71e95b9f3658250646b7David Brazdil}
211