Package org.drools.analytics

Source Code of org.drools.analytics.RangeCheckCleanTest

package org.drools.analytics;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.drools.StatelessSession;
import org.drools.StatelessSessionResult;
import org.drools.analytics.components.AnalyticsComponent;
import org.drools.analytics.components.Field;
import org.drools.analytics.components.LiteralRestriction;
import org.drools.analytics.dao.AnalyticsData;
import org.drools.analytics.dao.AnalyticsDataFactory;
import org.drools.analytics.result.Gap;
import org.drools.base.RuleNameMatchesAgendaFilter;

/**
*
* @author Toni Rikkola
*
*/
public class RangeCheckCleanTest extends TestBase {

  public void testUselessIntegerGapsLesser() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));

    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
        "Remove useless integer gaps lesser or lesser and equal"));

    Collection<Object> testData = new ArrayList<Object>();

    Field f = new Field();
    testData.add(f);

    // > 10 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10");
    testData.add(lower);

    // == 50 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50");
    testData.add(r1);

    // > 50 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);

    // < 50 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // > 70 covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("> 70 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator(">");
    r2.setValue("70");
    testData.add(r2);

    // <= 70 gap
    Gap g3 = new Gap(f, "<=", r2);
    g3.setFiredRuleName("70gap");
    testData.add(g3);
   
    // < 100 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100");
    testData.add(higher);

    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);

    StatelessSessionResult sessionResult = session
        .executeWithResults(testData);

    Iterator iter = sessionResult.iterateObjects();

    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }

    assertTrue(rulesThatHadErrors.remove("> 10 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50 covered"));
    assertTrue(rulesThatHadErrors.remove("> 70 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("70gap"));

    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
 
  public void testUselessIntegerGapsGreater() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));
   
    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
    "Remove useless integer gaps greater or greater and equal"));
   
    Collection<Object> testData = new ArrayList<Object>();
   
    Field f = new Field();
    testData.add(f);
   
    // > 10 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10");
    testData.add(lower);
   
    // == 50 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50");
    testData.add(r1);
   
    // > 50 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);
   
    // < 50 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // < 70 covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("< 70 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator("<");
    r2.setValue("70");
    testData.add(r2);
   
    // >= 70 gap
    Gap g3 = new Gap(f, ">=", r2);
    g3.setFiredRuleName("70gap");
    testData.add(g3);
   
    // < 100 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100");
    testData.add(higher);
   
    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);
   
    StatelessSessionResult sessionResult = session
    .executeWithResults(testData);
   
    Iterator iter = sessionResult.iterateObjects();
   
    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }
   
    assertTrue(rulesThatHadErrors.remove("> 10 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50 covered"));
    assertTrue(rulesThatHadErrors.remove("< 70 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("70gap"));
   
    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
 
  public void testUselessDoubleGapsLesser() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));
   
    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
    "Remove useless double gaps lesser or lesser and equal"));
   
    Collection<Object> testData = new ArrayList<Object>();
   
    Field f = new Field();
    testData.add(f);
   
    // > 10.0 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10.0 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10.0");
    testData.add(lower);
   
    // == 50.0 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50.0 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50.0");
    testData.add(r1);
   
    // > 50.0 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);
   
    // < 50.0 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // > 70.0 covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("> 70.0 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator(">");
    r2.setValue("70.0");
    testData.add(r2);
   
    // <= 70.0 gap
    Gap g3 = new Gap(f, "<=", r2);
    g3.setFiredRuleName("70gap");
    testData.add(g3);
   
    // < 100.0 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100.0 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100.0");
    testData.add(higher);
   
    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);
   
    StatelessSessionResult sessionResult = session
    .executeWithResults(testData);
   
    Iterator iter = sessionResult.iterateObjects();
   
    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }
   
    assertTrue(rulesThatHadErrors.remove("> 10.0 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50.0 covered"));
    assertTrue(rulesThatHadErrors.remove("> 70.0 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100.0 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("70gap"));
   
    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
 
  public void testUselessDoubleGapsGreater() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));
   
    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
    "Remove useless double gaps greater or greater and equal"));
   
    Collection<Object> testData = new ArrayList<Object>();
   
    Field f = new Field();
    testData.add(f);
   
    // > 10.0 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10.0 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10.0");
    testData.add(lower);
   
    // == 50.0 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50.0 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50.0");
    testData.add(r1);
   
    // > 50.0 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);
   
    // < 50.0 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // < 70.0 covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("< 70.0 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator("<");
    r2.setValue("70.0");
    testData.add(r2);
   
    // >= 70.0 gap
    Gap g3 = new Gap(f, ">=", r2);
    g3.setFiredRuleName("70gap");
    testData.add(g3);
   
    // < 100.0 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100.0 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100.0");
    testData.add(higher);
   
    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);
   
    StatelessSessionResult sessionResult = session
    .executeWithResults(testData);
   
    Iterator iter = sessionResult.iterateObjects();
   
    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }
   
    assertTrue(rulesThatHadErrors.remove("> 10.0 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50.0 covered"));
    assertTrue(rulesThatHadErrors.remove("< 70.0 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100.0 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("70gap"));
   
    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
 
  public void testUselessDateGapsLesser() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));
   
    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
    "Remove useless date gaps lesser or lesser and equal"));
   
    Collection<Object> testData = new ArrayList<Object>();
   
    Field f = new Field();
    testData.add(f);
   
    // > "01-Oct-2007" covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 01-Oct-2007 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("01-Oct-2007");
    testData.add(lower);
   
    // == "10-Oct-2007" covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 10-Oct-2007 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("10-Oct-2007");
    testData.add(r1);
   
    // > "10-Oct-2007" gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);
   
    // < "10-Oct-2007" gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // > "15-Oct-2007" covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("> 15-Oct-2007 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator(">");
    r2.setValue("15-Oct-2007");
    testData.add(r2);
   
    // <= "15-Oct-2007" gap
    Gap g3 = new Gap(f, "<=", r2);
    g3.setFiredRuleName("15-Oct-2007gap");
    testData.add(g3);
   
    // < "20-Oct-2007" covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 20-Oct-2007 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("20-Oct-2007");
    testData.add(higher);
   
    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);
   
    StatelessSessionResult sessionResult = session
    .executeWithResults(testData);
   
    Iterator iter = sessionResult.iterateObjects();
   
    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }
   
    assertTrue(rulesThatHadErrors.remove("> 01-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("== 10-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("> 15-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("< 20-Oct-2007 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("15-Oct-2007gap"));
   
    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
 
  public void testUselessDateGapsGreater() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));
   
    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
    "Remove useless date gaps greater or greater and equal"));
   
    Collection<Object> testData = new ArrayList<Object>();
   
    Field f = new Field();
    testData.add(f);
   
    // > "01-Oct-2007" covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 01-Oct-2007 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("01-Oct-2007");
    testData.add(lower);
   
    // == "10-Oct-2007" covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 10-Oct-2007 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("10-Oct-2007");
    testData.add(r1);
   
    // > "10-Oct-2007" gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);
   
    // < "10-Oct-2007" gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);
   
    // < "15-Oct-2007" covered
    LiteralRestriction r2 = new LiteralRestriction();
    r2.setRuleName("< 15-Oct-2007 covered");
    r2.setFieldId(f.getId());
    r2.setEvaluator("<");
    r2.setValue("15-Oct-2007");
    testData.add(r2);
   
    // >= "15-Oct-2007" gap
    Gap g3 = new Gap(f, ">=", r2);
    g3.setFiredRuleName("15-Oct-2007gap");
    testData.add(g3);
   
    // < "20-Oct-2007" covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 20-Oct-2007 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("20-Oct-2007");
    testData.add(higher);
   
    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);
   
    StatelessSessionResult sessionResult = session
    .executeWithResults(testData);
   
    Iterator iter = sessionResult.iterateObjects();
   
    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }
   
    assertTrue(rulesThatHadErrors.remove("> 01-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("== 10-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("< 15-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("< 20-Oct-2007 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("15-Oct-2007gap"));
   
    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
/*
  public void testUselessIntegerGapAboveRestriction1() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));

    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
        "Remove useless integer gaps"));

    Collection<Object> testData = new ArrayList<Object>();

    Field f = new Field();
    testData.add(f);

    // > 10 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10");
    testData.add(lower);

    // == 50 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50");
    testData.add(r1);

    // > 50 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);

    // < 50 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);

    // < 100 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100");
    testData.add(higher);

    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);

    StatelessSessionResult sessionResult = session
        .executeWithResults(testData);

    Iterator iter = sessionResult.iterateObjects();

    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }

    assertTrue(rulesThatHadErrors.remove("> 10 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));

    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }

  public void testUselessDoubleGapAboveRestriction() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));

    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
        "Remove useless double gaps"));

    Collection<Object> testData = new ArrayList<Object>();

    Field f = new Field();
    testData.add(f);

    // > 10 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 10.0 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("10.0");
    testData.add(lower);

    // == 50 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 50.0 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("50.0");
    testData.add(r1);

    // > 50 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);

    // < 50 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);

    // < 100 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 100.0 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("100.0");
    testData.add(higher);

    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);

    StatelessSessionResult sessionResult = session
        .executeWithResults(testData);

    Iterator iter = sessionResult.iterateObjects();

    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      }
      // System.out.println(o);
    }

    assertTrue(rulesThatHadErrors.remove("> 10.0 covered"));
    assertTrue(rulesThatHadErrors.remove("== 50.0 covered"));
    assertTrue(rulesThatHadErrors.remove("< 100.0 covered"));
    assertFalse(rulesThatHadErrors.contains("below"));
    assertFalse(rulesThatHadErrors.contains("above"));

    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }

  public void testUselessDateGapBelowRestriction() throws Exception {
    StatelessSession session = getStatelessSession(this.getClass()
        .getResourceAsStream("rangeChecks/Clean.drl"));

    session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
        "Remove useless date gaps"));

    Collection<Object> testData = new ArrayList<Object>();

    Field f = new Field();
    testData.add(f);

    // > 01-Oct-2007 covered
    LiteralRestriction lower = new LiteralRestriction();
    lower.setRuleName("> 01-Oct-2007 covered");
    lower.setFieldId(f.getId());
    lower.setEvaluator(">");
    lower.setValue("01-Oct-2007");
    testData.add(lower);

    // == 10-Oct-2007 covered
    LiteralRestriction r1 = new LiteralRestriction();
    r1.setRuleName("== 10-Oct-2007 covered");
    r1.setFieldId(f.getId());
    r1.setEvaluator("==");
    r1.setValue("10-Oct-2007");
    testData.add(r1);

    // > 10-Oct-2007 gap
    Gap g1 = new Gap(f, ">", r1);
    g1.setFiredRuleName("above");
    testData.add(g1);

    // < 10-Oct-2007 gap
    Gap g2 = new Gap(f, "<", r1);
    g2.setFiredRuleName("below");
    testData.add(g2);

    // < 20-Oct-2007 covered
    LiteralRestriction higher = new LiteralRestriction();
    higher.setRuleName("< 20-Oct-2007 covered");
    higher.setFieldId(f.getId());
    higher.setEvaluator("<");
    higher.setValue("20-Oct-2007");
    testData.add(higher);

    AnalyticsData data = AnalyticsDataFactory.getAnalyticsData();
    session.setGlobal("data", data);

    StatelessSessionResult sessionResult = session
        .executeWithResults(testData);

    Iterator iter = sessionResult.iterateObjects();

    Set<String> rulesThatHadErrors = new HashSet<String>();
    while (iter.hasNext()) {
      Object o = (Object) iter.next();
      if (o instanceof Field) {
        // Do nothing
      } else if (o instanceof Gap) {
        rulesThatHadErrors.add(((Gap) o).getFiredRuleName());
      } else if (o instanceof AnalyticsComponent) {
        rulesThatHadErrors.add(((AnalyticsComponent) o).getRuleName());
      } //
      // System.out.println(o);
    }

    assertTrue(rulesThatHadErrors.remove("> 01-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("== 10-Oct-2007 covered"));
    assertTrue(rulesThatHadErrors.remove("< 20-Oct-2007 covered"));
    assertFalse(rulesThatHadErrors.contains("above"));
    assertFalse(rulesThatHadErrors.contains("below"));

    if (!rulesThatHadErrors.isEmpty()) {
      for (String string : rulesThatHadErrors) {
        fail("Rule " + string + " caused an error.");
      }
    }
  }
  */
}
 
TOP

Related Classes of org.drools.analytics.RangeCheckCleanTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.