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.
*/
import java.util.HashMap;
import java.util.Map;
public class BasicStatementTests extends ScriptTestCase {
public void testIfStatement() {
assertEquals(1, exec("int x = 5; if (x == 5) return 1; return 0;"));
assertEquals(0, exec("int x = 4; if (x == 5) return 1; else return 0;"));
assertEquals(2, exec("int x = 4; if (x == 5) return 1; else if (x == 4) return 2; else return 0;"));
assertEquals(1, exec("int x = 4; if (x == 5) return 1; else if (x == 4) return 1; else return 0;"));
assertEquals(3, exec(
"int x = 5;\n" +
"if (x == 5) {\n" +
" int y = 2;\n" +
" \n" +
" if (y == 2) {\n" +
" x = 3;\n" +
" }\n" +
" \n" +
"}\n" +
"\n" +
"return x;\n"));
}
public void testWhileStatement() {
assertEquals("aaaaaa", exec("string c = \"a\"; int x; while (x < 5) { c ..= \"a\"; ++x; } return c;"));
Object value = exec(
" byte[][] b = byte.makearray(5, 5); \n" +
" byte x = 0, y; \n" +
" \n" +
" while (x < 5) { \n" +
" y = 0; \n" +
" \n" +
" while (y < 5) { \n" +
" b[x][y] = (byte)(x*y); \n" +
" ++y; \n" +
" } \n" +
" \n" +
" ++x; \n" +
" } \n" +
" \n" +
" return b; \n");
byte[][] b = (byte[][])value;
for (byte x = 0; x < 5; ++x) {
for (byte y = 0; y < 5; ++y) {
assertEquals(x*y, b[x][y]);
}
}
}
public void testDoWhileStatement() {
assertEquals("aaaaaa", exec("string c = \"a\"; int x; do { c ..= \"a\"; ++x; } while (x < 5); return c;"));
Object value = exec(
" int[][] b = int.makearray(5, 5); \n" +
" int x = 0, y; \n" +
" \n" +
" do { \n" +
" y = 0; \n" +
" \n" +
" do { \n" +
" b[x][y] = x*y; \n" +
" ++y; \n" +
" } while (y < 5); \n" +
" \n" +
" ++x; \n" +
" } while (x < 5); \n" +
" \n" +
" return b; \n");
int[][] b = (int[][])value;
for (byte x = 0; x < 5; ++x) {
for (byte y = 0; y < 5; ++y) {
assertEquals(x*y, b[x][y]);
}
}
}
public void testForStatement() {
assertEquals("aaaaaa", exec("string c = \"a\"; for (int x = 0; x < 5; ++x) c ..= \"a\"; return c;"));
Object value = exec(
" int[][] b = int.makearray(5, 5); \n" +
" for (int x = 0; x < 5; ++x) { \n" +
" for (int y = 0; y < 5; ++y) { \n" +
" b[x][y] = x*y; \n" +
" } \n" +
" } \n" +
" \n" +
" return b; \n");
int[][] b = (int[][])value;
for (byte x = 0; x < 5; ++x) {
for (byte y = 0; y < 5; ++y) {
assertEquals(x*y, b[x][y]);
}
}
}
public void testDeclarationStatement() {
assertEquals((byte)2, exec("byte a = 2; return a;"));
assertEquals((short)2, exec("short a = 2; return a;"));
assertEquals((char)2, exec("char a = 2; return a;"));
assertEquals(2, exec("int a = 2; return a;"));
assertEquals(2L, exec("long a = 2; return a;"));
assertEquals(2F, exec("float a = 2; return a;"));
assertEquals(2.0, exec("double a = 2; return a;"));
assertEquals(false, exec("bool a = false; return a;"));
assertEquals("string", exec("string a = \"string\"; return a;"));
assertEquals(HashMap.class, exec("smap a = shashmap.new(); return a;").getClass());
assertEquals(byte[].class, exec("byte[] a = byte.makearray(1); return a;").getClass());
assertEquals(short[].class, exec("short[] a = short.makearray(1); return a;").getClass());
assertEquals(char[].class, exec("char[] a = char.makearray(1); return a;").getClass());
assertEquals(int[].class, exec("int[] a = int.makearray(1); return a;").getClass());
assertEquals(long[].class, exec("long[] a = long.makearray(1); return a;").getClass());
assertEquals(float[].class, exec("float[] a = float.makearray(1); return a;").getClass());
assertEquals(double[].class, exec("double[] a = double.makearray(1); return a;").getClass());
assertEquals(boolean[].class, exec("bool[] a = bool.makearray(1); return a;").getClass());
assertEquals(String[].class, exec("string[] a = string.makearray(1); return a;").getClass());
assertEquals(Map[].class, exec("smap[] a = smap.makearray(1); return a;").getClass());
assertEquals(byte[][].class, exec("byte[][] a = byte.makearray(1, 2); return a;").getClass());
assertEquals(short[][][].class, exec("short[][][] a = short.makearray(1, 2, 3); return a;").getClass());
assertEquals(char[][][][].class, exec("char[][][][] a = char.makearray(1, 2, 3, 4); return a;").getClass());
assertEquals(int[][][][][].class, exec("int[][][][][] a = int.makearray(1, 2, 3, 4, 5); return a;").getClass());
assertEquals(long[][].class, exec("long[][] a = long.makearray(1, 2); return a;").getClass());
assertEquals(float[][][].class, exec("float[][][] a = float.makearray(1, 2, 3); return a;").getClass());
assertEquals(double[][][][].class, exec("double[][][][] a = double.makearray(1, 2, 3, 4); return a;").getClass());
assertEquals(boolean[][][][][].class, exec("bool[][][][][] a = bool.makearray(1, 2, 3, 4, 5); return a;").getClass());
assertEquals(String[][].class, exec("string[][] a = string.makearray(1, 2); return a;").getClass());
assertEquals(Map[][][].class, exec("smap[][][] a = smap.makearray(1, 2, 3); return a;").getClass());
}
public void testContinueStatement() {
assertEquals(9, exec("int x = 0, y = 0; while (x < 10) { ++x; if (x == 1) continue; ++y; } return y;"));
}
public void testBreakStatement() {
assertEquals(4, exec("int x = 0, y = 0; while (x < 10) { ++x; if (x == 5) break; ++y; } return y;"));
}
public void testReturnStatement() {
assertEquals(10, exec("return 10;"));
assertEquals(5, exec("int x = 5; return x;"));
assertEquals(4, exec("int[] x = int.makearray(2); x[1] = 4; return x[1];"));
assertEquals(5, ((short[])exec("short[] s = short.makearray(3); s[1] = 5; return s;"))[1]);
assertEquals(10, ((Map)exec("smap s = shashmap.new(); s.put(\"x\", 10); return s;")).get("x"));
}
}