Package cleo.search.test

Source Code of cleo.search.test.TestConnectionFilter

/*
* Copyright (c) 2011 LinkedIn, Inc
*
* 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 cleo.search.test;

import java.util.Random;

import cleo.search.connection.Connection;
import cleo.search.connection.ConnectionFilter;
import cleo.search.connection.RandomConnectionFilter;
import cleo.search.connection.SimpleConnection;
import cleo.search.connection.SourcePartitionConnectionFilter;
import cleo.search.connection.TargetPartitionConnectionFilter;
import cleo.search.connection.TransitivePartitionConnectionFilter;
import cleo.search.util.Range;
import junit.framework.TestCase;

/**
* TestConnectionFilter
*
* @author jwu
* @since 04/20, 2011
*
* <p>
* 05/27, 2011 - Added testEquals <br/>
*/
public class TestConnectionFilter extends TestCase {
  private final Random rand = new Random();
 
  public void testSourcePartitionConnectionFilter() {
    int start = rand.nextInt(10000) + 100;
    int count = rand.nextInt(10000) + 100;
    Range sourceRange = new Range(start, count);
    ConnectionFilter connFilter = new SourcePartitionConnectionFilter(sourceRange);
   
    Connection conn = new SimpleConnection(0, rand.nextInt(), true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(rand.nextInt(start), rand.nextInt(), true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(start + rand.nextInt(count), rand.nextInt(), true);
    assertEquals(true, connFilter.accept(conn));
   
    conn = new SimpleConnection(sourceRange.getEnd(), rand.nextInt(), true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(sourceRange.getEnd() + rand.nextInt(count), rand.nextInt(), true);
    assertEquals(false, connFilter.accept(conn));
  }
 
  public void testTargetPartitionConnectionFilter() {
    int start = rand.nextInt(10000) + 100;
    int count = rand.nextInt(10000) + 100;
    Range targetRange = new Range(start, count);
    ConnectionFilter connFilter = new TargetPartitionConnectionFilter(targetRange);
   
    Connection conn = new SimpleConnection(rand.nextInt(), 0, true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(rand.nextInt(), rand.nextInt(start), true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(rand.nextInt(), start + rand.nextInt(count), true);
    assertEquals(true, connFilter.accept(conn));
   
    conn = new SimpleConnection(rand.nextInt(), targetRange.getEnd(), true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(rand.nextInt(), targetRange.getEnd() + rand.nextInt(count), true);
    assertEquals(false, connFilter.accept(conn));
  }
 
  public void testTransitivePartitionConnectionFilter() {
    Range range = new Range(3000, 1000); // [3000, 4000)
    ConnectionFilter connFilter = new TransitivePartitionConnectionFilter(range);
    Connection conn;
   
    // Source in range
    conn = new SimpleConnection(3100, 1, true);
    assertEquals(true, connFilter.accept(conn));
   
    conn = new SimpleConnection(3100, 3200, true);
    assertEquals(true, connFilter.accept(conn));

    conn = new SimpleConnection(3100, 5000, true);
    assertEquals(true, connFilter.accept(conn));
   
    // Target in range
    conn = new SimpleConnection(1, 3100, true);
    assertEquals(true, connFilter.accept(conn));

    conn = new SimpleConnection(3200, 3100, true);
    assertEquals(true, connFilter.accept(conn));
   
    conn = new SimpleConnection(5000, 3100, true);
    assertEquals(true, connFilter.accept(conn));
   
    // Neither source nor target in range
    conn = new SimpleConnection(1, 1, true);
    assertEquals(false, connFilter.accept(conn));
   
    conn = new SimpleConnection(1, 5000, true);
    assertEquals(false, connFilter.accept(conn));
  }
 
  public void testTransitivePartitionConnectionFilterRandom() {
    int source;
    int target;
   
    int start = rand.nextInt(100000) + 100;
    int count = rand.nextInt(100000) + 100;
    Range range = new Range(start, count);
   
    Connection conn;
    ConnectionFilter connFilter = new TransitivePartitionConnectionFilter(range);
   
    source = range.getStart();
    target = range.getStart();
    conn = new SimpleConnection(source, target, true);
    assertEquals(true, connFilter.accept(conn));

    source = range.getStart();
    target = range.getStart() - rand.nextInt(range.getStart());
    conn = new SimpleConnection(source, target, true);
    assertEquals(true, connFilter.accept(conn));
   
    source = range.getStart();
    target = range.getEnd();
    conn = new SimpleConnection(source, target, true);
    assertEquals(true, connFilter.accept(conn));
   
    source = range.getStart();
    target = range.getEnd() + rand.nextInt(range.getEnd());
    conn = new SimpleConnection(source, target, true);
    assertEquals(true, connFilter.accept(conn));
   
    for(int i = 0, cnt = rand.nextInt(100); i < cnt; i++) {
      source = range.getStart() + rand.nextInt(range.getCount());
      target = Math.abs(rand.nextInt());
      conn = new SimpleConnection(source, target, true);
      assertEquals(true, connFilter.accept(conn));

      source = Math.abs(rand.nextInt());
      target = range.getStart() + rand.nextInt(range.getCount());
      conn = new SimpleConnection(source, target, true);
      assertEquals(true, connFilter.accept(conn));
    }
   
    for(int i = 0, cnt = rand.nextInt(100); i < cnt; i++) {
      source = range.getStart() - rand.nextInt(range.getStart()) - 1;
      target = range.getStart() - rand.nextInt(range.getStart()) - 1;
      conn = new SimpleConnection(source, target, true);
      assertEquals(false, connFilter.accept(conn));
     
      source = range.getStart() - rand.nextInt(range.getStart()) - 1;
      target = range.getEnd() + rand.nextInt(range.getEnd());
      conn = new SimpleConnection(source, target, true);
      assertEquals(false, connFilter.accept(conn));
     
      source = range.getEnd() + rand.nextInt(range.getEnd());
      target = range.getStart() - rand.nextInt(range.getStart()) - 1;
      conn = new SimpleConnection(source, target, true);
      assertEquals(false, connFilter.accept(conn));
     
      source = range.getEnd() + rand.nextInt(range.getEnd());
      target = range.getEnd() + rand.nextInt(range.getEnd());
      conn = new SimpleConnection(source, target, true);
      assertEquals(false, connFilter.accept(conn));
    }
  }
 
  public void testRandomConnectionFilter() {
    int source = rand.nextInt(100000);
    int target = rand.nextInt(100000);
    Connection conn = new SimpleConnection(source, target, true);
    ConnectionFilter connFilter = new RandomConnectionFilter();
   
    boolean rejected = false;
    boolean accepted = false;
   
    while(!rejected) {
      rejected = !connFilter.accept(conn);
    }
   
    while(!accepted) {
      accepted = connFilter.accept(conn);
    }
   
    assertEquals(true, rejected);
    assertEquals(true, accepted);
  }
 
  public void testEquals() {
    ConnectionFilter cf1, cf2, cf3;
    Range range = new Range(rand.nextInt(10000), rand.nextInt(10000) + 100);
   
    // Test SourcePartionConnectionFilter
    cf1 = new SourcePartitionConnectionFilter(range);
    cf2 = null;
    assertFalse(cf1.equals(cf2));
   
    cf2 = new SourcePartitionConnectionFilter(range);
    assertTrue(cf1.equals(cf2));
    assertTrue(cf2.equals(cf1));
   
    assertTrue(cf1.equals(cf1));
    assertTrue(cf2.equals(cf2));
   
    assertEquals(cf1.hashCode(), cf2.hashCode());
   
    // Test TargetPartionConnectionFilter
    cf1 = new TargetPartitionConnectionFilter(range);
    cf2 = null;
    assertFalse(cf1.equals(cf2));
   
    cf2 = new TargetPartitionConnectionFilter(range);
    assertTrue(cf1.equals(cf2));
    assertTrue(cf2.equals(cf1));
   
    assertTrue(cf1.equals(cf1));
    assertTrue(cf2.equals(cf2));
   
    assertEquals(cf1.hashCode(), cf2.hashCode());
   
    // Test TransitivePartionConnectionFilter
    cf1 = new TransitivePartitionConnectionFilter(range);
    cf2 = null;
    assertFalse(cf1.equals(cf2));
   
    cf2 = new TransitivePartitionConnectionFilter(range);
    assertTrue(cf1.equals(cf2));
    assertTrue(cf2.equals(cf1));
   
    assertTrue(cf1.equals(cf1));
    assertTrue(cf2.equals(cf2));
   
    assertEquals(cf1.hashCode(), cf2.hashCode());
   
    // Test cross comparison
    cf1 = new SourcePartitionConnectionFilter(range);
    cf2 = new TargetPartitionConnectionFilter(range);
    cf3 = new TransitivePartitionConnectionFilter(range);
   
    assertFalse(cf1.equals(cf2));
    assertFalse(cf1.equals(cf3));
    assertFalse(cf2.equals(cf1));
    assertFalse(cf2.equals(cf3));
    assertFalse(cf3.equals(cf1));
    assertFalse(cf3.equals(cf2));
  }
}
TOP

Related Classes of cleo.search.test.TestConnectionFilter

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.