/** Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved. Contact: SYSTAP, LLC DBA Blazegraph 2501 Calvert ST NW #106 Washington, DC 20008 licenses@blazegraph.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program 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 for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Created on Aug 18, 2010 */ package com.bigdata.bop.joinGraph.rto; import junit.framework.TestCase2; import com.bigdata.bop.BOp; import com.bigdata.bop.BOpEvaluationContext; import com.bigdata.bop.Constant; import com.bigdata.bop.IConstraint; import com.bigdata.bop.IPredicate; import com.bigdata.bop.IVariable; import com.bigdata.bop.NV; import com.bigdata.bop.Var; import com.bigdata.bop.ap.Predicate; import com.bigdata.bop.constraint.Constraint; import com.bigdata.bop.constraint.NEConstant; /** * Unit tests for the {@link JoinGraph} operator. * <p> * Note: A lot of the guts the {@link JoinGraph} operator evaluation are tested * by {@link TestJGraph}. There is also an RDF specific test suite which runs * against various RDF data sets. * * @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a> * @version $Id$ */ public class TestJoinGraph extends TestCase2 { /** * */ public TestJoinGraph() { } /** * @param name */ public TestJoinGraph(String name) { super(name); } public void test_ctor() { // correct acceptance. { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[]{Var.var("x"),Var.var("y")}),// new Predicate(new BOp[]{Var.var("y"),Var.var("z")}),// }; final IConstraint[] constraints = null; final JoinGraph joinGraph = new JoinGraph(new BOp[0],// // new NV(JoinGraph.Annotations.SELECTED, new IVariable[]{}),// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); assertEquals("vertices", vertices, joinGraph.getVertices()); assertEquals("constraints", constraints, joinGraph.getConstraints()); assertEquals("limit", JoinGraph.Annotations.DEFAULT_LIMIT, joinGraph.getLimit()); assertEquals("nedges", JoinGraph.Annotations.DEFAULT_NEDGES, joinGraph.getNEdges()); } // correct acceptance, different arguments. { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[]{Var.var("x"),Var.var("y")}),// new Predicate(new BOp[]{Var.var("y"),Var.var("z")}),// }; final IConstraint[] constraints = new IConstraint[] { // Constraint.wrap(new NEConstant(Var.var("x"), new Constant<Long>(12L))) // }; final JoinGraph joinGraph = new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONSTRAINTS, constraints),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); assertEquals("vertices", vertices, joinGraph.getVertices()); assertEquals("constraints", constraints, joinGraph.getConstraints()); assertEquals("limit", JoinGraph.Annotations.DEFAULT_LIMIT, joinGraph.getLimit()); assertEquals("nedges", JoinGraph.Annotations.DEFAULT_NEDGES, joinGraph.getNEdges()); } // correct acceptance, different arguments. { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[]{Var.var("x"),Var.var("y")}),// new Predicate(new BOp[]{Var.var("y"),Var.var("z")}),// }; final IConstraint[] constraints = new IConstraint[] { // Constraint.wrap(new NEConstant(Var.var("x"), new Constant<Long>(12L))) // }; final int limit = 50; final int nedges = 1; final JoinGraph joinGraph = new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONSTRAINTS, constraints),// new NV(JoinGraph.Annotations.LIMIT, limit),// new NV(JoinGraph.Annotations.NEDGES, nedges),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); assertEquals("vertices", vertices, joinGraph.getVertices()); assertEquals("constraints", constraints, joinGraph.getConstraints()); assertEquals("limit", limit, joinGraph.getLimit()); assertEquals("nedges", nedges, joinGraph.getNEdges()); } } public void test_ctor_correct_rejection() { /* * Correct rejection when required argument is not given (the VERTICES * annotation is required). */ try { new JoinGraph(new BOp[0], // new NV("foo", "bar"), // new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } // correct rejection when vertices array is null. try { final IPredicate[] vertices = null; new JoinGraph(new BOp[0], // new NV(JoinGraph.Annotations.VERTICES, vertices), // new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } // correct rejection when vertices array is empty. try { final IPredicate[] vertices = new IPredicate[] { }; new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } // correct rejection when CONTROLLER is not specified. try { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[]{Var.var("x"),Var.var("y")}),// new Predicate(new BOp[]{Var.var("y"),Var.var("z")}),// }; new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// //new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } // correct rejection when EVALUATION_CONTEXT is not specified/wrong. try { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[]{Var.var("x"),Var.var("y")}),// new Predicate(new BOp[]{Var.var("y"),Var.var("z")}),// }; new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.ANY)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } // Correct rejection [limit]. { try { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[] { Var.var("x"), Var.var("y") }),// new Predicate(new BOp[] { Var.var("y"), Var.var("z") }),// }; final IConstraint[] constraints = new IConstraint[] { // Constraint.wrap(new NEConstant(Var.var("x"), new Constant<Long>(12L))) // }; final int limit = 0; final int nedges = 1; new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONSTRAINTS, constraints),// new NV(JoinGraph.Annotations.LIMIT, limit),// new NV(JoinGraph.Annotations.NEDGES, nedges),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } } // Correct rejection [nedges]. { try { final IPredicate[] vertices = new IPredicate[] { new Predicate(new BOp[] { Var.var("x"), Var.var("y") }),// new Predicate(new BOp[] { Var.var("y"), Var.var("z") }),// }; final IConstraint[] constraints = new IConstraint[] { // Constraint.wrap(new NEConstant(Var.var("x"), new Constant<Long>(12L))) // }; final int limit = 10; final int nedges = 0; new JoinGraph(new BOp[0],// new NV(JoinGraph.Annotations.VERTICES, vertices),// new NV(JoinGraph.Annotations.CONSTRAINTS, constraints),// new NV(JoinGraph.Annotations.LIMIT, limit),// new NV(JoinGraph.Annotations.NEDGES, nedges),// new NV(JoinGraph.Annotations.CONTROLLER, true), // new NV(JoinGraph.Annotations.EVALUATION_CONTEXT, BOpEvaluationContext.CONTROLLER)// ); fail("Expecting: " + IllegalArgumentException.class); } catch (IllegalArgumentException ex) { if (log.isInfoEnabled()) log.info("Ignoring expected exception: " + ex); } } } }