@Test
  public void testConstantWildCard() {
    // no spaces
    {
      String[] constantFields = {"*"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);

      FieldSet fs = sp.getForwardedField(1);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(1));

      fs = sp.getForwardedField(2);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(2));

      fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(0));
    }

    //		// with spaces
    //		{
    //			String[] constantFields = { "   *   " };
    //
    //			TypeInformation<?> type = new TupleTypeInfo<Tuple3<Integer, Integer,
    // Integer>>(BasicTypeInfo.INT_TYPE_INFO,
    //					BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO);
    //			SingleInputSemanticProperties sp =
    // SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);
    //
    //			FieldSet fs = sp.getForwardedField(1);
    //			Assert.assertTrue(fs.size() == 1);
    //			Assert.assertTrue(fs.contains(1));
    //
    //			fs = sp.getForwardedField(2);
    //			Assert.assertTrue(fs.size() == 1);
    //			Assert.assertTrue(fs.contains(2));
    //
    //			fs = sp.getForwardedField(0);
    //			Assert.assertTrue(fs.size() == 1);
    //			Assert.assertTrue(fs.contains(0));
    //		}
  }
  @Test
  public void testConstantWithArrowIndividualStrings() {
    // no spaces
    {
      String[] constantFields = {"0->0,1", "1->2"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 2);
      Assert.assertTrue(fs.contains(0));
      Assert.assertTrue(fs.contains(1));

      fs = sp.getForwardedField(1);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(2));
    }

    // with spaces
    {
      String[] constantFields = {"0 -> 0 ,   1 ", " 1     -> 2  "};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 2);
      Assert.assertTrue(fs.contains(0));
      Assert.assertTrue(fs.contains(1));

      fs = sp.getForwardedField(1);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(2));
    }
  }
  @Test
  public void testConstantExceptSingleString() {
    // no spaces
    {
      String[] constantFieldsExcept = {"1,2"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(
              null, constantFieldsExcept, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(0));

      Assert.assertNull(sp.getForwardedField(1));
      Assert.assertNull(sp.getForwardedField(2));
    }

    // with spaces
    {
      String[] constantFieldsExcept = {" 1  , 2"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple3<Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(
              null, constantFieldsExcept, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(0));

      Assert.assertNull(sp.getForwardedField(1));
      Assert.assertNull(sp.getForwardedField(2));
    }
  }
  @Test
  public void testConstantMixedOneString() {
    // no spaces
    {
      String[] constantFields = {"2,3;0->1,4;4->0"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple5<Integer, Integer, Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 2);
      Assert.assertTrue(fs.contains(1));
      Assert.assertTrue(fs.contains(4));

      fs = sp.getForwardedField(2);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(2));

      fs = sp.getForwardedField(3);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(3));

      fs = sp.getForwardedField(4);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(0));
    }

    // with spaces
    {
      String[] constantFields = {" 2  ,  3   ;  0 -> 1  , 4 ; 4 ->  0"};

      TypeInformation<?> type =
          new TupleTypeInfo<Tuple5<Integer, Integer, Integer, Integer, Integer>>(
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO,
              BasicTypeInfo.INT_TYPE_INFO);
      SingleInputSemanticProperties sp =
          SemanticPropUtil.getSemanticPropsSingleFromString(constantFields, null, null, type, type);

      FieldSet fs = sp.getForwardedField(0);
      Assert.assertTrue(fs.size() == 2);
      Assert.assertTrue(fs.contains(1));
      Assert.assertTrue(fs.contains(4));

      fs = sp.getForwardedField(2);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(2));

      fs = sp.getForwardedField(3);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(3));

      fs = sp.getForwardedField(4);
      Assert.assertTrue(fs.size() == 1);
      Assert.assertTrue(fs.contains(0));
    }
  }