package com.esri.hadoop.hive; import static org.junit.Assert.*; import org.junit.Test; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.hive.serde2.io.DoubleWritable; // select ST_AsText(ST_MultiPolygon(array(0.0,1.0, 1.0,1.0, 1.0,0.0))); // select ST_Area(ST_MultiPolygon(array(0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0))); public class TestStMultiPolygon { DoubleWritable dw0 = new DoubleWritable(0); DoubleWritable dw1 = new DoubleWritable(1); ST_Area stArea = new ST_Area(); ST_Equals stEquals = new ST_Equals(); ST_ExteriorRing stExteriorRing = new ST_ExteriorRing(); // ST_GeometryN stGeomN = new ST_GeometryN(); ST_GeometryType typer = new ST_GeometryType(); ST_SetSRID stSrid = new ST_SetSRID(); String expty = "ST_MULTIPOLYGON"; @Test public void TestBasic() throws Exception { ST_MultiPolygon stMultiPolygon = new ST_MultiPolygon(); //DoubleWritable[] args = {dw0,dw0, dw0,dw1, dw1,dw0}; List<DoubleWritable> args = new ArrayList<DoubleWritable>(7); args.add(dw0); args.add(dw0); args.add(dw0); args.add(dw1); args.add(dw1); args.add(dw0); BytesWritable rslt = stMultiPolygon.evaluate(args); Text gty = typer.evaluate(rslt); assertEquals(expty, gty.toString()); } @Test public void TestStart() throws Exception { // #110 ST_MultiPolygon stMultiPolygon = new ST_MultiPolygon(); List<DoubleWritable> args = new ArrayList<DoubleWritable>(7); args.add(dw0); args.add(dw1); args.add(dw1); args.add(dw0); args.add(dw0); args.add(dw0); BytesWritable rslt = stMultiPolygon.evaluate(args); // Text gty = typer.evaluate(rslt); // assertEquals(expty, gty.toString()); // BytesWritable bwpg = stGeomN.evaluate(rslt, 0); BytesWritable cmp = stMultiPolygon.evaluate(new Text("multipolygon(((0 1, 1 0, 0 0)))")); //DeferredObject[] args = {rslt, cmp}; //assertTrue(stEquals.evaluate(args)); assertEquals(0.5, stArea.evaluate(rslt).get(), 0); } @Test public void TestWinding() throws Exception { // #110 ST_MultiPolygon stMultiPolygon = new ST_MultiPolygon(); List<DoubleWritable> args = new ArrayList<DoubleWritable>(7); args.add(dw0); args.add(dw0); args.add(dw1); args.add(dw0); args.add(dw0); args.add(dw1); BytesWritable rslt = stMultiPolygon.evaluate(args); Text gty = typer.evaluate(rslt); assertEquals(expty, gty.toString()); //assertTrue(stArea.evaluate(rslt) > 0); assertEquals(0.5, stArea.evaluate(rslt).get(), 0); } @Test public void TestSrid() throws Exception { // #109 ST_MultiPolygon stMultiPolygon = new ST_MultiPolygon(); List<DoubleWritable> args = new ArrayList<DoubleWritable>(7); args.add(dw0); args.add(dw0); args.add(dw1); args.add(dw0); args.add(dw0); args.add(dw1); BytesWritable made = stMultiPolygon.evaluate(args); Text gty = typer.evaluate(made); assertEquals(expty, gty.toString()); BytesWritable rslt = stSrid.evaluate(made, new IntWritable(4326)); gty = typer.evaluate(rslt); assertEquals(expty, gty.toString()); } }