Package com.tinkerpop.furnace.generators

Source Code of com.tinkerpop.furnace.generators.DistributionGeneratorTest

package com.tinkerpop.furnace.generators;

import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
import com.tinkerpop.furnace.generators.CommunityGenerator;
import com.tinkerpop.furnace.generators.Distribution;
import com.tinkerpop.furnace.generators.DistributionGenerator;
import com.tinkerpop.furnace.generators.NormalDistribution;
import com.tinkerpop.furnace.generators.PowerLawDistribution;
import com.tinkerpop.furnace.generators.SizableIterable;
import junit.framework.TestCase;

import java.util.Random;

/**
* @author Matthias Broecheler (me@matthiasb.com)
*/

public class DistributionGeneratorTest extends TestCase {
   
    public void testRandom() {
        long seed = System.currentTimeMillis();
        Random r1 = new Random(seed);
        Random r2 = new Random(seed);
        for (int i=0;i<1000;i++) {
            assertEquals(r1.nextGaussian(),r2.nextGaussian());
            assertEquals(r1.nextDouble(),r2.nextDouble());
            assertEquals(r1.nextInt(100),r2.nextInt(100));
        }
    }

    public void testDistributions() {
        int numNodes = 100;
        int numEdges = 1000;
        long seed = System.currentTimeMillis();
        Random random = new Random(seed);
        //normal
        Distribution n = new NormalDistribution(2);
        n = n.initialize(numNodes,numEdges);
        int degreeSum = 0;
        for (int i=0;i<numNodes;i++) {
            int degree=n.nextValue(random);
            degreeSum+=degree;
        }
        System.out.println(degreeSum);

        random = new Random(seed);
        n = new NormalDistribution(2);
        n = n.initialize(numNodes,numEdges);
        for (int i=0;i<numNodes;i++) {
            degreeSum-=n.nextValue(random);
        }
        assertEquals(0,degreeSum);

        //scale free
        n = new PowerLawDistribution(2.9);
        n = n.initialize(numNodes,numEdges);
        degreeSum = 0;
        for (int i=0;i<numNodes;i++) {
            int degree=n.nextValue(random);
            //System.out.println(degree);
            degreeSum+=degree;
        }
        System.out.println(degreeSum);

    }
   
    public void testGeneratorNormal1() {
        distributionGeneratorTest(new NormalDistribution(2), null);
    }


    public void testGeneratorNormal2() {
        distributionGeneratorTest(new NormalDistribution(2), new NormalDistribution(5));
    }

    public void testGeneratorScaleFree1() {
        distributionGeneratorTest(new PowerLawDistribution(2.9), null);
    }

    public void testGeneratorScaleFree2() {
        distributionGeneratorTest(new PowerLawDistribution(2.1), null);
    }

    public void testGeneratorScaleFree3() {
        distributionGeneratorTest(new PowerLawDistribution(3.9), null);
    }

    public void testGeneratorScaleFree4() {
        distributionGeneratorTest(new PowerLawDistribution(2.3), new PowerLawDistribution(2.8));
    }

    private void distributionGeneratorTest(Distribution indist, Distribution outdist) {
        int numNodes = 100;
        TinkerGraph graph = new TinkerGraph();
        for (int i=0;i<numNodes;i++) graph.addVertex(i);

        DistributionGenerator generator = new DistributionGenerator("knows");
        generator.setOutDistribution(indist);
        if (outdist!=null) generator.setOutDistribution(outdist);
        int numEdges = generator.generate(graph,numNodes*10);
        assertEquals(numEdges, SizableIterable.sizeOf(graph.getEdges()));
        System.out.println(graph);
//        for (Vertex v : graph.getVertices()) System.out.print(SizableIterable.sizeOf(v.getEdges(Direction.BOTH,"knows"))+",");
//        System.out.println();
    }

   /*
    TODO: Make not lock or cause exceptions
   public void testCommunityGenerator1() {
        communityGeneratorTest(new NormalDistribution(2),new PowerLawDistribution(2.4),0.1);
    }

    public void testCommunityGenerator2() {
        communityGeneratorTest(new NormalDistribution(2),new PowerLawDistribution(2.4),0.5);
    }

    public void testCommunityGenerator3() {
        communityGeneratorTest(new NormalDistribution(2),new NormalDistribution(4),0.5);
    }

    public void testCommunityGenerator4() {
        communityGeneratorTest(new NormalDistribution(2),new NormalDistribution(4),0.1);
    }

    public void testCommunityGenerator5() {
        communityGeneratorTest(new PowerLawDistribution(2.3),new PowerLawDistribution(2.4),0.2);
    }

    public void testCommunityGenerator6() {
        communityGeneratorTest(new PowerLawDistribution(2.3),new NormalDistribution(4),0.2);
    }*/



    private void communityGeneratorTest(Distribution community, Distribution degree, double crossPercentage) {
        int numNodes = 100;
        TinkerGraph graph = new TinkerGraph();
        for (int i=0;i<numNodes;i++) graph.addVertex(i);

        CommunityGenerator generator = new CommunityGenerator("knows");
        generator.setCommunityDistribution(community);
        generator.setDegreeDistribution(degree);
        generator.setCrossCommunityPercentage(crossPercentage);
        int numEdges = generator.generate(graph,numNodes/10,numNodes*10);
        assertEquals(numEdges, SizableIterable.sizeOf(graph.getEdges()));
        System.out.println(graph);
        //        for (Vertex v : graph.getVertices()) System.out.print(SizableIterable.sizeOf(v.getEdges(Direction.BOTH,"knows"))+",");
//        System.out.println();
    }
   
}
TOP

Related Classes of com.tinkerpop.furnace.generators.DistributionGeneratorTest

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.