/******************************************************************************* * Copyright (c) 2009-2011 CWI * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI * * Arnold Lankamp - Arnold.Lankamp@cwi.nl *******************************************************************************/ package org.rascalmpl.test.functionality; import static org.junit.Assert.assertTrue; import org.junit.Ignore; import org.junit.Test; import org.rascalmpl.test.infrastructure.TestFramework; // TODO This test needs refactoring. public class StrategyTests extends TestFramework{ @Test @Ignore public void testStrategy(){ prepare("import StrategyTests;"); prepareMore("import Strategy;"); prepareMore("A t = f(g(g(b())),g(g(b())));"); assertTrue(runTestInSameEvaluator("top_down(rules)(t) == f(g(b()),g(b()))")); assertTrue(runTestInSameEvaluator("bottom_up(rules)(t) == f(b(),b())")); prepareMore("B t2 = g(c());"); assertTrue(runTestInSameEvaluator("once_top_down(rules2)(t2) == c()")); assertTrue(runTestInSameEvaluator("once_bottom_up(rules2)(t2) == g(b())")); prepareMore("list[B] l = [g(c()),c()];"); assertTrue(runTestInSameEvaluator("makeAll(rules2)(l) == [c(),b()]")); prepareMore("tuple[A,B] t3 = <a(),c()>;"); assertTrue(runTestInSameEvaluator("top_down(rules2)(t3) == <a(),b()>")); prepareMore("rel[A, B] r = {<a(), b()>, <f(b(),b()), c()>};"); assertTrue(runTestInSameEvaluator("top_down(rules3)(r) == {<a(), c()>, <f(c(),c()), c()>}")); prepareMore("A t4 = f(g(b()),g(b()));"); assertTrue(runTestInSameEvaluator("top_down(functionToStrategy(rules4))(t4) == f(g(c()),g(c()))")); assertTrue(runTestInSameEvaluator("innermost(rules)(t) == f(b(),b())")); assertTrue(runTestInSameEvaluator("outermost(rules)(t) == f(b(),b())")); } @Test @Ignore public void testStrategySeperately(){ TestFramework tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("A t = f(g(g(b())),g(g(b())));"); assertTrue(tf.runTestInSameEvaluator("top_down(rules)(t) == f(g(b()),g(b()))")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("A t = f(g(g(b())),g(g(b())));"); assertTrue(tf.runTestInSameEvaluator("bottom_up(rules)(t) == f(b(),b())")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("B t2 = g(c());"); assertTrue(tf.runTestInSameEvaluator("once_top_down(rules2)(t2) == c()")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("B t2 = g(c());"); assertTrue(tf.runTestInSameEvaluator("once_bottom_up(rules2)(t2) == g(b())")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("list[B] l = [g(c()),c()];"); assertTrue(tf.runTestInSameEvaluator("makeAll(rules2)(l) == [c(),b()]")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("tuple[A,B] t3 = <a(),c()>;"); assertTrue(tf.runTestInSameEvaluator("top_down(rules2)(t3) == <a(),b()>")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("rel[A, B] r = {<a(), b()>, <f(b(),b()), c()>};"); assertTrue(tf.runTestInSameEvaluator("top_down(rules3)(r) == {<a(), c()>, <f(c(),c()), c()>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("A t4 = f(g(b()),g(b()));"); assertTrue(tf.runTestInSameEvaluator("top_down(functionToStrategy(rules4))(t4) == f(g(c()),g(c()))")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("A t = f(g(g(b())),g(g(b())));"); assertTrue(tf.runTestInSameEvaluator("innermost(rules)(t) == f(b(),b())")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import Strategy;"); tf.prepareMore("A t = f(g(g(b())),g(g(b())));"); assertTrue(tf.runTestInSameEvaluator("outermost(rules)(t) == f(b(),b())")); } @Test @Ignore public void testTopologicalStrategy(){ prepare("import StrategyTests;"); prepareMore("import TopologicalStrategy;"); prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(runTestInSameEvaluator("topological_once_bottom_up(rules5)(r2) == {<a(),ee()>,<a(),d()>,<d(),ee()>}")); assertTrue(runTestInSameEvaluator("topological_once_top_down(rules5)(r2) == {<aa(),e()>,<aa(),d()>,<d(),e()>}")); assertTrue(runTestInSameEvaluator("topological_top_down(rules5)(r2) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>}")); assertTrue(runTestInSameEvaluator("topological_bottom_up(rules5)(r2) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>}")); assertTrue(runTestInSameEvaluator("topological_innermost(rules6)(r2) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>}")); assertTrue(runTestInSameEvaluator("topological_outermost(rules6)(r2) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>}")); } @Test @Ignore public void testTopologicalStrategySeperately(){ TestFramework tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_once_bottom_up(rules5)(r2) == {<a(),ee()>,<a(),d()>,<d(),ee()>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_once_top_down(rules5)(r2) == {<aa(),e()>,<aa(),d()>,<d(),e()>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_top_down(rules5)(r2) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_bottom_up(rules5)(r2) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_innermost(rules6)(r2) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[A, A] r2 = {<a(), d()>, <a(), e()>, <d(), e()>};"); assertTrue(tf.runTestInSameEvaluator("topological_outermost(rules6)(r2) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>}")); } @Test @Ignore public void testNestedTopologicalStrategy(){ prepare("import StrategyTests;"); prepareMore("import TopologicalStrategy;"); prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(runTestInSameEvaluator("topological_once_bottom_up(rules5)(r3) == {<a(),ee()>,<a(),d()>,<d(),ee()>, <a(), {<a(), e()>}>}")); assertTrue(runTestInSameEvaluator("topological_once_top_down(rules5)(r3) == {<aa(),e()>,<aa(),d()>,<d(),e()>, <aa(), {<a(), e()>}>}")); assertTrue(runTestInSameEvaluator("topological_top_down(rules5)(r3) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>, <aa(), {<aa(), ee()>}>}")); assertTrue(runTestInSameEvaluator("topological_bottom_up(rules5)(r3) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>, <aa(), {<aa(), ee()>}>}")); assertTrue(runTestInSameEvaluator("topological_innermost(rules6)(r3) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>, <h(aa()), {<h(aa()), h(ee())>}>}")); assertTrue(runTestInSameEvaluator("topological_outermost(rules6)(r3) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>, <h(aa()), {<h(aa()), h(ee())>}>}")); } @Test @Ignore public void testNestedTopologicalStrategySeperately(){ TestFramework tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_once_bottom_up(rules5)(r3) == {<a(),ee()>,<a(),d()>,<d(),ee()>, <a(), {<a(), e()>}>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_once_top_down(rules5)(r3) == {<aa(),e()>,<aa(),d()>,<d(),e()>, <aa(), {<a(), e()>}>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_top_down(rules5)(r3) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>, <aa(), {<aa(), ee()>}>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_bottom_up(rules5)(r3) == {<aa(), dd()>, <aa(), ee()>, <dd(),ee()>, <aa(), {<aa(), ee()>}>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_innermost(rules6)(r3) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>, <h(aa()), {<h(aa()), h(ee())>}>}")); tf = new TestFramework(); tf.prepare("import StrategyTests;"); tf.prepareMore("import TopologicalStrategy;"); tf.prepareMore("rel[value, value] r3 = {<a(), d()>, <a(), e()>, <d(), e()>, <a(), {<a(), e()>}>};"); assertTrue(tf.runTestInSameEvaluator("topological_outermost(rules6)(r3) == {<h(aa()), h(dd())>, <h(aa()), h(ee())>, <h(dd()),h(ee())>, <h(aa()), {<h(aa()), h(ee())>}>}")); } @Test @Ignore public void testCyclicStrategy(){ prepare("import StrategyTests;"); prepareMore("import TopologicalStrategy;"); // test Top-Down in a cyclic relation prepareMore("rel[A, A] r3 = {<a(), d()>, <d(), e()>, <e(), d()>};"); prepareMore("list[value] elts = [];"); prepareMore("&T(&T) collect = &T(&T t) { elts += [t]; return t; };"); prepareMore("topological_top_down(collect)(r3);"); assertTrue(runTestInSameEvaluator("elts == [{<e(),d()>,<d(),e()>,<a(),d()>},a(),d(),e(),d()]")); } }