package org.elasticsearch.plan.a; /* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ // TODO: Figure out a way to test autobox caching properly from methods such as Integer.valueOf(int); public class EqualsTests extends ScriptTestCase { public void testTypesEquals() { assertEquals(true, exec("return (bool)3 === (bool)4;")); assertEquals(true, exec("bool x = false; bool y = false; return x === y;")); assertEquals(false, exec("return (byte)3 === (byte)4;")); assertEquals(true, exec("byte x = 3; byte y = 3; return x === y;")); assertEquals(false, exec("return (char)3 === (char)4;")); assertEquals(true, exec("char x = 3; char y = 3; return x === y;")); assertEquals(false, exec("return (short)3 === (short)4;")); assertEquals(true, exec("short x = 3; short y = 3; return x === y;")); assertEquals(false, exec("return (int)3 === (int)4;")); assertEquals(true, exec("int x = 3; int y = 3; return x === y;")); assertEquals(false, exec("return (long)3 === (long)4;")); assertEquals(true, exec("long x = 3; long y = 3; return x === y;")); assertEquals(false, exec("return (float)3 === (float)4;")); assertEquals(true, exec("float x = 3; float y = 3; return x === y;")); assertEquals(false, exec("return (double)3 === (double)4;")); assertEquals(true, exec("double x = 3; double y = 3; return x === y;")); assertEquals(true, exec("return (bool)3 == (bool)4;")); assertEquals(true, exec("bool x = false; bool y = false; return x == y;")); assertEquals(false, exec("return (byte)3 == (byte)4;")); assertEquals(true, exec("byte x = 3; byte y = 3; return x == y;")); assertEquals(false, exec("return (char)3 == (char)4;")); assertEquals(true, exec("char x = 3; char y = 3; return x == y;")); assertEquals(false, exec("return (short)3 == (short)4;")); assertEquals(true, exec("short x = 3; short y = 3; return x == y;")); assertEquals(false, exec("return (int)3 == (int)4;")); assertEquals(true, exec("int x = 3; int y = 3; return x == y;")); assertEquals(false, exec("return (long)3 == (long)4;")); assertEquals(true, exec("long x = 3; long y = 3; return x == y;")); assertEquals(false, exec("return (float)3 == (float)4;")); assertEquals(true, exec("float x = 3; float y = 3; return x == y;")); assertEquals(false, exec("return (double)3 == (double)4;")); assertEquals(true, exec("double x = 3; double y = 3; return x == y;")); } public void testTypesNotEquals() { assertEquals(false, exec("return (bool)3 !== (bool)4;")); assertEquals(false, exec("bool x = false; bool y = false; return x !== y;")); assertEquals(true, exec("return (byte)3 !== (byte)4;")); assertEquals(false, exec("byte x = 3; byte y = 3; return x !== y;")); assertEquals(true, exec("return (char)3 !== (char)4;")); assertEquals(false, exec("char x = 3; char y = 3; return x !== y;")); assertEquals(true, exec("return (short)3 !== (short)4;")); assertEquals(false, exec("short x = 3; short y = 3; return x !== y;")); assertEquals(true, exec("return (int)3 !== (int)4;")); assertEquals(false, exec("int x = 3; int y = 3; return x !== y;")); assertEquals(true, exec("return (long)3 !== (long)4;")); assertEquals(false, exec("long x = 3; long y = 3; return x !== y;")); assertEquals(true, exec("return (float)3 !== (float)4;")); assertEquals(false, exec("float x = 3; float y = 3; return x !== y;")); assertEquals(true, exec("return (double)3 !== (double)4;")); assertEquals(false, exec("double x = 3; double y = 3; return x !== y;")); assertEquals(false, exec("return (bool)3 != (bool)4;")); assertEquals(false, exec("bool x = false; bool y = false; return x != y;")); assertEquals(true, exec("return (byte)3 != (byte)4;")); assertEquals(false, exec("byte x = 3; byte y = 3; return x != y;")); assertEquals(true, exec("return (char)3 != (char)4;")); assertEquals(false, exec("char x = 3; char y = 3; return x != y;")); assertEquals(true, exec("return (short)3 != (short)4;")); assertEquals(false, exec("short x = 3; short y = 3; return x != y;")); assertEquals(true, exec("return (int)3 != (int)4;")); assertEquals(false, exec("int x = 3; int y = 3; return x != y;")); assertEquals(true, exec("return (long)3 != (long)4;")); assertEquals(false, exec("long x = 3; long y = 3; return x != y;")); assertEquals(true, exec("return (float)3 != (float)4;")); assertEquals(false, exec("float x = 3; float y = 3; return x != y;")); assertEquals(true, exec("return (double)3 != (double)4;")); assertEquals(false, exec("double x = 3; double y = 3; return x != y;")); } public void testEquals() { assertEquals(true, exec("return longobj.new(3) == longobj.new(3);")); assertEquals(false, exec("return longobj.new(3) === longobj.new(3);")); assertEquals(true, exec("intobj x = intobj.new(3); object y = x; return x == y;")); assertEquals(true, exec("intobj x = intobj.new(3); object y = x; return x === y;")); assertEquals(true, exec("intobj x = intobj.new(3); object y = intobj.new(3); return x == y;")); assertEquals(false, exec("intobj x = intobj.new(3); object y = intobj.new(3); return x === y;")); assertEquals(true, exec("intobj x = intobj.new(3); int y = 3; return x == y;")); assertEquals(true, exec("intobj x = intobj.new(3); int y = 3; return x === y;")); assertEquals(true, exec("intobj x = intobj.new(3); double y = 3; return x === y;")); assertEquals(true, exec("int[] x = int.makearray(1); object y = x; return x == y;")); assertEquals(true, exec("int[] x = int.makearray(1); object y = x; return x === y;")); assertEquals(false, exec("int[] x = int.makearray(1); object y = int.makearray(1); return x == y;")); assertEquals(false, exec("int[] x = int.makearray(1); object y = int.makearray(1); return x === y;")); assertEquals(false, exec("map x = hashmap.new(); list y = arraylist.new(); return x == y;")); assertEquals(false, exec("map x = hashmap.new(); list y = arraylist.new(); return x === y;")); } public void testNotEquals() { assertEquals(false, exec("return longobj.new(3) != longobj.new(3);")); assertEquals(true, exec("return longobj.new(3) !== longobj.new(3);")); assertEquals(false, exec("intobj x = intobj.new(3); object y = x; return x != y;")); assertEquals(false, exec("intobj x = intobj.new(3); object y = x; return x !== y;")); assertEquals(false, exec("intobj x = intobj.new(3); object y = intobj.new(3); return x != y;")); assertEquals(true, exec("intobj x = intobj.new(3); object y = intobj.new(3); return x !== y;")); assertEquals(false, exec("intobj x = intobj.new(3); int y = 3; return x !== y;")); assertEquals(false, exec("intobj x = intobj.new(3); double y = 3; return x !== y;")); assertEquals(false, exec("int[] x = int.makearray(1); object y = x; return x != y;")); assertEquals(false, exec("int[] x = int.makearray(1); object y = x; return x !== y;")); assertEquals(true, exec("int[] x = int.makearray(1); object y = int.makearray(1); return x != y;")); assertEquals(true, exec("int[] x = int.makearray(1); object y = int.makearray(1); return x !== y;")); assertEquals(true, exec("map x = hashmap.new(); list y = arraylist.new(); return x != y;")); assertEquals(true, exec("map x = hashmap.new(); list y = arraylist.new(); return x !== y;")); } public void testBranchEquals() { assertEquals(0, exec("charobj a = 'a'; charobj b = 'b'; if (a == b) return 1; else return 0;")); assertEquals(1, exec("charobj a = 'a'; charobj b = 'a'; if (a == b) return 1; else return 0;")); assertEquals(0, exec("intobj a = intobj.new(1); intobj b = 1; if (a === b) return 1; else return 0;")); assertEquals(0, exec("charobj a = 'a'; charobj b = charobj.new('a'); if (a === b) return 1; else return 0;")); assertEquals(1, exec("charobj a = 'a'; object b = a; if (a === b) return 1; else return 0;")); assertEquals(1, exec("intobj a = 1; number b = a; number c = a; if (c === b) return 1; else return 0;")); assertEquals(0, exec("intobj a = 1; charobj b = 'a'; if (a === (object)b) return 1; else return 0;")); } public void testBranchNotEquals() { assertEquals(1, exec("charobj a = 'a'; charobj b = 'b'; if (a != b) return 1; else return 0;")); assertEquals(0, exec("charobj a = 'a'; charobj b = 'a'; if (a != b) return 1; else return 0;")); assertEquals(1, exec("intobj a = intobj.new(1); intobj b = 1; if (a !== b) return 1; else return 0;")); assertEquals(1, exec("charobj a = 'a'; charobj b = charobj.new('a'); if (a !== b) return 1; else return 0;")); assertEquals(0, exec("charobj a = 'a'; object b = a; if (a !== b) return 1; else return 0;")); assertEquals(0, exec("intobj a = 1; number b = a; number c = a; if (c !== b) return 1; else return 0;")); assertEquals(1, exec("intobj a = 1; charobj b = 'a'; if (a !== (object)b) return 1; else return 0;")); } public void testRightHandNull() { assertEquals(false, exec("charobj a = 'a'; return a == null;")); assertEquals(false, exec("charobj a = 'a'; return a === null;")); assertEquals(true, exec("charobj a = 'a'; return a != null;")); assertEquals(true, exec("charobj a = 'a'; return a !== null;")); assertEquals(true, exec("charobj a = null; return a == null;")); assertEquals(false, exec("charobj a = null; return a != null;")); assertEquals(false, exec("charobj a = 'a'; charobj b = null; return a == b;")); assertEquals(true, exec("charobj a = null; charobj b = null; return a === b;")); assertEquals(true, exec("charobj a = 'a'; charobj b = null; return a != b;")); assertEquals(false, exec("charobj a = null; charobj b = null; return a !== b;")); } public void testLeftHandNull() { assertEquals(false, exec("charobj a = 'a'; return null == a;")); assertEquals(false, exec("charobj a = 'a'; return null === a;")); assertEquals(true, exec("charobj a = 'a'; return null != a;")); assertEquals(true, exec("charobj a = 'a'; return null !== a;")); assertEquals(true, exec("charobj a = null; return null == a;")); assertEquals(false, exec("charobj a = null; return null != a;")); assertEquals(true, exec("charobj a = null; charobj b = null; return b === a;")); assertEquals(false, exec("charobj a = null; charobj b = null; return b !== a;")); } }