Package eu.stratosphere.api.distributions

Source Code of eu.stratosphere.api.distributions.SimpleDataDistributionTest

/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
**********************************************************************************************************************/

package eu.stratosphere.api.distributions;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import junit.framework.Assert;

import org.junit.Test;

import eu.stratosphere.api.common.distributions.SimpleDistribution;
import eu.stratosphere.types.DoubleValue;
import eu.stratosphere.types.IntValue;
import eu.stratosphere.types.Key;
import eu.stratosphere.types.StringValue;

public class SimpleDataDistributionTest {

  @Test
  public void testConstructorSingleKey() {

    // check correct data distribution
    try {
      SimpleDistribution dd = new SimpleDistribution(new Key[] {new IntValue(1), new IntValue(2), new IntValue(3)});
      Assert.assertEquals(1, dd.getNumberOfFields());
    }
    catch (Throwable t) {
      Assert.fail();
    }
   
    // check incorrect key types
    try {
      new SimpleDistribution(new Key[] {new IntValue(1), new StringValue("ABC"), new IntValue(3)});
      Assert.fail("Data distribution accepts inconsistent key types");
    } catch(IllegalArgumentException iae) {
      // do nothing
    }
   
    // check inconsistent number of keys
    try {
      new SimpleDistribution(new Key[][] {{new IntValue(1)}, {new IntValue(2), new IntValue(2)}, {new IntValue(3)}});
      Assert.fail("Data distribution accepts inconsistent many keys");
    } catch(IllegalArgumentException iae) {
      // do nothing
    }
  }
 
  @Test
  public void testConstructorMultiKey() {
   
    // check correct data distribution
    SimpleDistribution dd = new SimpleDistribution(
        new Key[][] {{new IntValue(1), new StringValue("A"), new IntValue(1)},
              {new IntValue(2), new StringValue("A"), new IntValue(1)},
              {new IntValue(3), new StringValue("A"), new IntValue(1)}});
    Assert.assertEquals(3, dd.getNumberOfFields());
   
    // check inconsistent key types
    try {
      new SimpleDistribution(
          new Key[][] {{new IntValue(1), new StringValue("A"), new DoubleValue(1.3d)},
                {new IntValue(2), new StringValue("B"), new IntValue(1)}});
      Assert.fail("Data distribution accepts incorrect key types");
    } catch(IllegalArgumentException iae) {
      // do nothing
    }
   
    // check inconsistent number of keys
    try {
      dd = new SimpleDistribution(
          new Key[][] {{new IntValue(1), new IntValue(2)},
                {new IntValue(2), new IntValue(2)},
                {new IntValue(3)}});
      Assert.fail("Data distribution accepts bucket boundaries with inconsistent many keys");
    } catch(IllegalArgumentException iae) {
      // do nothing
    }
   
  }
 
  @Test
  public void testWriteRead() {
   
    SimpleDistribution ddWrite = new SimpleDistribution(
        new Key[][] {{new IntValue(1), new StringValue("A"), new IntValue(1)},
              {new IntValue(2), new StringValue("A"), new IntValue(1)},
              {new IntValue(2), new StringValue("B"), new IntValue(4)},
              {new IntValue(2), new StringValue("B"), new IntValue(3)},
              {new IntValue(2), new StringValue("B"), new IntValue(2)}});
    Assert.assertEquals(3, ddWrite.getNumberOfFields());
   
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    final DataOutputStream dos = new DataOutputStream(baos);
    try {
      ddWrite.write(dos);
    } catch (IOException e) {
      Assert.fail("Error serializing the DataDistribution: " + e.getMessage());
    }

    byte[] seralizedDD = baos.toByteArray();
   
    final ByteArrayInputStream bais = new ByteArrayInputStream(seralizedDD);
    final DataInputStream in = new DataInputStream(bais);
   
    SimpleDistribution ddRead = new SimpleDistribution();
   
    try {
      ddRead.read(in);
    } catch (Exception ex) {
      Assert.fail("The deserialization of the encoded data distribution caused an error");
    }
   
    Assert.assertEquals(3, ddRead.getNumberOfFields());
   
    // compare written and read distributions
    for(int i=0;i<6;i++) {
      Key<?>[] recW = ddWrite.getBucketBoundary(0, 6);
      Key<?>[] recR = ddWrite.getBucketBoundary(0, 6);
     
      Assert.assertEquals(recW[0], recR[0]);
      Assert.assertEquals(recW[1], recR[1]);
      Assert.assertEquals(recW[2], recR[2]);
    }
  }
 
  @Test
  public void testGetBucketBoundary() {
   
    SimpleDistribution dd = new SimpleDistribution(
        new Key[][] {{new IntValue(1), new StringValue("A")},
              {new IntValue(2), new StringValue("B")},
              {new IntValue(3), new StringValue("C")},
              {new IntValue(4), new StringValue("D")},
              {new IntValue(5), new StringValue("E")},
              {new IntValue(6), new StringValue("F")},
              {new IntValue(7), new StringValue("G")}});
   
    Key<?>[] boundRec = dd.getBucketBoundary(0, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 1);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("A"));
   
    boundRec = dd.getBucketBoundary(1, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 2);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("B"));
   
    boundRec = dd.getBucketBoundary(2, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 3);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("C"));
   
    boundRec = dd.getBucketBoundary(3, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 4);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("D"));
   
    boundRec = dd.getBucketBoundary(4, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 5);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("E"));
   
    boundRec = dd.getBucketBoundary(5, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 6);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("F"));
   
    boundRec = dd.getBucketBoundary(6, 8);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 7);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("G"));
   
    boundRec = dd.getBucketBoundary(0, 4);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 2);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("B"));
   
    boundRec = dd.getBucketBoundary(1, 4);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 4);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("D"));
   
    boundRec = dd.getBucketBoundary(2, 4);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 6);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("F"));
   
    boundRec = dd.getBucketBoundary(0, 2);
    Assert.assertEquals(((IntValue) boundRec[0]).getValue(), 4);
    Assert.assertTrue(((StringValue) boundRec[1]).getValue().equals("D"));
   
    try {
      boundRec = dd.getBucketBoundary(0, 7);
      Assert.fail();
    } catch(IllegalArgumentException iae) {
      // nothing to do
    }
   
    try {
      boundRec = dd.getBucketBoundary(3, 4);
      Assert.fail();
    } catch(IllegalArgumentException iae) {
      // nothing to do
    }
   
    try {
      boundRec = dd.getBucketBoundary(-1, 4);
      Assert.fail();
    } catch(IllegalArgumentException iae) {
      // nothing to do
    }
   
    try {
      boundRec = dd.getBucketBoundary(0, 0);
      Assert.fail();
    } catch(IllegalArgumentException iae) {
      // nothing to do
    }
  }

}
TOP

Related Classes of eu.stratosphere.api.distributions.SimpleDataDistributionTest

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.