/*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#checkState()}. Check whether a disabled transition which is disabled because of to few space in one of its output places is disabled.
   */
  @Test
  public void testCheckStateNotEnoughOutputSpace() throws ParameterException {

    // Get a simple standard SNet ...
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("tIn");

    // check the state is enabled initially
    trans.checkState();
    assertTrue("An enabled transition is reported to be disabled", trans.isEnabled());

    // ... add a green token to place p0
    IFNetPlace p0 = sNet.getPlace("p0");
    p0.setState(new Multiset<String>("green"));

    // check the state of a now disabled transition
    trans.checkState();
    assertFalse("A disabled transition is reported to be enabled", trans.isEnabled());

    // removing of green enables the transition again
    // p0.getState().clear(); cleaning a clone dosn't make sense
    p0.setState(new Multiset<String>());
    trans.checkState();
    assertTrue("An enabled transition is reported to be disabled", trans.isEnabled());
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#checkState()}. Check whether an enabled transition is reported to be enabled and a disable transition to be disabled based on guards
   */
  @Test
  public void testCheckStateGuard() throws ParameterException {

    // Get a simple standard SNet and two of its transitions
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition trans = (RegularIFNetTransition) sNet.getTransition("tIn");

    // create aGuardDataContainer
    TestGuardDataContainer tgdc = new TestGuardDataContainer(sNet.getTokenColors());

    // create two guards
    NumberConstraint trueConstraint =
        new NumberConstraint("green", NumberOperator.IN_INTERVAL, -1, 1);
    NumberConstraint falseConstraint =
        new NumberConstraint("green", NumberOperator.IN_INTERVAL, 2, 3);

    // check state with true constraint
    trans.setGuardDataContainer(tgdc);
    trans.addGuard(trueConstraint);
    trans.checkState();
    assertTrue("An enabled transition is reported to be disabled", trans.isEnabled());

    // check state with additional false constraint
    trans.addGuard(falseConstraint);
    trans.checkState();
    assertFalse("An disabled transition is reported to be enabled", trans.isEnabled());
  }
  /*
   * Test method for {@link de.uni.freiburg.iig.telematik.sepia.petrinet.ifnet.RegularIFNetTransition#checkState()}. Check whether an enabled transition is reported to be enabled and a disable transition to be disabled.
   */
  @Test
  public void testCheckState() throws ParameterException {

    // Get a simple standard SNet and one of its transitions
    IFNet sNet = IFNetTestUtil.createSimpleIFNet();
    RegularIFNetTransition disabledTrans = (RegularIFNetTransition) sNet.getTransition("t0");
    RegularIFNetTransition enabledTrans = (RegularIFNetTransition) sNet.getTransition("tIn");

    // check the states
    disabledTrans.checkState();
    assertFalse("A disabled transition is reported to be enabled", disabledTrans.isEnabled());
    enabledTrans.checkState();
    assertTrue("An enabled transition is reported to be disabled", enabledTrans.isEnabled());
  }