http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java new file mode 100644 index 0000000..f1e835a --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java @@ -0,0 +1,77 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.datamodels; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.junit.Test; + +import com.google.common.collect.Maps; + +public class TestProduct +{ + + @Test + public void testString() + { + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "poop bags"); + fields.put(Constants.PRODUCT_QUANTITY, 120); + fields.put("price", 12.80); + + Product product = new Product(fields); + + assertEquals(product.getFieldValueAsString(Constants.PRODUCT_CATEGORY), "poop bags"); + assertEquals(product.getFieldValueAsString("price"), "12.8"); + assertEquals(product.getFieldValueAsString(Constants.PRODUCT_QUANTITY), "120"); + } + + @Test + public void testDouble() + { + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "poop bags"); + fields.put(Constants.PRODUCT_QUANTITY, 120); + fields.put("price", 12.80); + + Product product = new Product(fields); + + assertNull(product.getFieldValueAsDouble(Constants.PRODUCT_CATEGORY)); + assertEquals(product.getFieldValueAsDouble("price"), 12.80, 1e-5); + assertNull(product.getFieldValueAsDouble(Constants.PRODUCT_QUANTITY)); + } + + @Test + public void testLong() + { + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "poop bags"); + fields.put(Constants.PRODUCT_QUANTITY, 120); + fields.put("price", 12.80); + + Product product = new Product(fields); + + assertNull(product.getFieldValueAsLong(Constants.PRODUCT_CATEGORY)); + assertNull(product.getFieldValueAsLong("price")); + assertEquals((long) product.getFieldValueAsLong(Constants.PRODUCT_QUANTITY), 120L); + } + +}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java new file mode 100644 index 0000000..b9e63f2 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java @@ -0,0 +1,76 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModelBuilder; +import org.junit.Test; + +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.matchers.JUnitMatchers.*; + +public class TestMarkovModelBuilder +{ + + @Test + public void testAddStateState() + { + MarkovModelBuilder<String> builder = MarkovModelBuilder.create(); + + builder.addStartState("a", 1.0); + + MarkovModel<String> msm = builder.build(); + + assertThat(msm.getStartWeights().keySet(), hasItem("a")); + assertEquals((double) msm.getStartWeights().get("a"), (double) 1.0, 0.000001); + + } + + @Test + public void testAddEdgeTransition() + { + MarkovModelBuilder<String> builder = MarkovModelBuilder.create(); + + builder.addTransition("a", "b", 1.0); + + MarkovModel<String> msm = builder.build(); + + assertThat(msm.getTransitionWeights().keySet(), hasItem("a")); + assertThat(msm.getTransitionWeights().get("a").keySet(), hasItem("b")); + assertEquals((double) msm.getTransitionWeights().get("a").get("b"), (double) 1.0, 0.000001); + } + + @Test + public void testBuildMSM() + { + MarkovModelBuilder<String> builder = MarkovModelBuilder.create(); + + builder.addStartState("a", 1.0); + builder.addTransition("a", "b", 1.0); + builder.addTransition("a", "c", 1.0); + + MarkovModel<String> msm = builder.build(); + + assertThat(msm.getStartWeights().keySet(), hasItem("a")); + assertThat(msm.getTransitionWeights().keySet(), hasItem("a")); + assertThat(msm.getTransitionWeights().get("a").keySet(), hasItem("b")); + assertThat(msm.getTransitionWeights().get("a").keySet(), hasItem("c")); + assertEquals((double) msm.getTransitionWeights().get("a").get("b"), (double) 1.0, 0.000001); + assertEquals((double) msm.getTransitionWeights().get("a").get("c"), (double) 1.0, 0.000001); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java new file mode 100644 index 0000000..e2ff4d5 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.matchers.JUnitMatchers.hasItem; + +import java.util.Arrays; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModelBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovProcess; +import org.junit.Test; + +public class TestMarkovProcess +{ + + @Test + public void test() throws Exception + { + SeedFactory factory = new SeedFactory(1245); + MarkovModelBuilder<String> builder = MarkovModelBuilder.create(); + + builder.addStartState("a", 1.0); + builder.addTransition("a", "b", 1.0); + builder.addTransition("a", "c", 1.0); + + MarkovModel<String> msm = builder.build(); + MarkovProcess<String> process = MarkovProcess.create(msm, factory); + + String firstState = process.sample(); + assertEquals(firstState, "a"); + + String secondState = process.sample(); + assertThat(Arrays.asList("b", "c"), hasItem(secondState)); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java new file mode 100644 index 0000000..fd85d08 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java @@ -0,0 +1,50 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.BoundedMultiModalGaussianSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.junit.Test; + +import com.google.common.collect.Lists; + +public class TestBoundedMultiModalGaussianSampler +{ + + @Test + public void testSample() throws Exception + { + double upperbound = 10.0; + double lowerbound = 1.0; + + List<Pair<Double, Double>> distributions = Lists.newArrayList(Pair.create(2.0, 2.0), Pair.create(7.5, 2.0)); + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<Double> sampler = new BoundedMultiModalGaussianSampler(distributions, lowerbound, upperbound, seedFactory); + + Double result = sampler.sample(); + + assertTrue(result >= lowerbound); + assertTrue(result <= upperbound); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java new file mode 100644 index 0000000..228b97d --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertTrue; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ExponentialSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.junit.Test; + +public class TestExponentialSampler +{ + + @Test + public void testSample() throws Exception + { + double lambda = 1.0 / 2.0; + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<Double> sampler = new ExponentialSampler(lambda, seedFactory); + + Double result = sampler.sample(); + + assertTrue(result >= 0.0); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java new file mode 100644 index 0000000..fbe8c18 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertTrue; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.GaussianSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.junit.Test; + +public class TestGaussianSampler +{ + + @Test + public void testSample() throws Exception + { + double mean = 2.0; + double var = 1.0; + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<Double> sampler = new GaussianSampler(mean, var, seedFactory); + + Double result = sampler.sample(); + + assertTrue(result >= -10); + assertTrue(result <= 10); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java new file mode 100644 index 0000000..f1152c5 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertThat; +import static org.junit.matchers.JUnitMatchers.hasItem; + +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.junit.Test; + +import com.google.common.collect.ImmutableMap; + +public class TestRouletteWheelSampler +{ + + @Test + public void testSample() throws Exception + { + Map<String, Double> dataPoints = ImmutableMap.of( + "a", 0.25, + "b", 0.25, + "c", 0.25, + "d", 0.25 + ); + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<String> sampler = new RouletteWheelSampler<String>(dataPoints, seedFactory); + + String result = sampler.sample(); + + assertThat(dataPoints.keySet(), hasItem(result)); + } + + @Test + public void testSampleUnnormalized() throws Exception + { + Map<String, Double> dataPoints = ImmutableMap.of( + "a", 1.0, + "b", 1.0, + "c", 1.0, + "d", 1.0 + ); + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<String> sampler = new RouletteWheelSampler<String>(dataPoints, seedFactory); + + String result = sampler.sample(); + + assertThat(dataPoints.keySet(), hasItem(result)); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java new file mode 100644 index 0000000..6684773 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertEquals; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.SequenceSampler; +import org.junit.Test; + +public class TestSequenceSampler +{ + + @Test + public void testSample() throws Exception + { + Sampler<Integer> sampler = new SequenceSampler(0, 10, 1); + + for(int i = 0; i < 10; i++) + { + Integer value = sampler.sample(); + assertEquals( (int) value, i); + } + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java new file mode 100644 index 0000000..a700cdf --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.framework.samplers; + +import static org.junit.Assert.assertTrue; + +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformIntSampler; +import org.junit.Test; + +public class TestUniformIntSampler +{ + + @Test + public void testSample() throws Exception + { + int upperbound = 10; + int lowerbound = 1; + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<Integer> sampler = new UniformIntSampler(lowerbound, upperbound, seedFactory); + + Integer result = sampler.sample(); + + assertTrue(result >= lowerbound); + assertTrue(result <= upperbound); + } + + @Test + public void testSampleInclusive() throws Exception + { + int upperbound = 2; + int lowerbound = 1; + + SeedFactory seedFactory = new SeedFactory(1234); + + Sampler<Integer> sampler = new UniformIntSampler(lowerbound, upperbound, seedFactory); + + Integer result = sampler.sample(); + + assertTrue(result >= lowerbound); + assertTrue(result <= upperbound); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java new file mode 100644 index 0000000..849fead --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java @@ -0,0 +1,58 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.customer; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Store; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.generators.customer.CustomerLocationPDF; +import org.junit.Test; + +public class TestCustomerLocationPDF +{ + + @Test + public void testProbability() throws Exception + { + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + List<Store> stores = new ArrayList<Store>(); + for(int i = 0; i < zipcodes.size(); i++) + { + Store store = new Store(i, "Store_" + i, zipcodes.get(i)); + stores.add(store); + } + + CustomerLocationPDF customerLocationPDF = new CustomerLocationPDF(zipcodes, stores.get(0), + Constants.AVERAGE_CUSTOMER_STORE_DISTANCE); + + double prob = customerLocationPDF.probability(zipcodes.get(0)); + + assertTrue(prob > 0.0); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java new file mode 100644 index 0000000..5865a83 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java @@ -0,0 +1,113 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.customer; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Store; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ProbabilityDensityFunction; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.SequenceSampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.customer.CustomerLocationPDF; +import org.apache.bigtop.bigpetstore.datagenerator.generators.customer.CustomerSampler; +import org.junit.Test; + +import com.google.common.collect.Maps; + +public class TestCustomerSampler +{ + protected ConditionalSampler<ZipcodeRecord, Store> buildLocationSampler(List<Store> stores, List<ZipcodeRecord> records, + SeedFactory factory) + { + final Map<Store, Sampler<ZipcodeRecord>> locationSamplers = Maps.newHashMap(); + for(Store store : stores) + { + ProbabilityDensityFunction<ZipcodeRecord> locationPDF = new CustomerLocationPDF(records, + store, Constants.AVERAGE_CUSTOMER_STORE_DISTANCE); + Sampler<ZipcodeRecord> locationSampler = RouletteWheelSampler.create(records, locationPDF, factory); + locationSamplers.put(store, locationSampler); + } + + return new ConditionalSampler<ZipcodeRecord, Store>() + { + public ZipcodeRecord sample(Store store) throws Exception + { + return locationSamplers.get(store).sample(); + } + + public Sampler<ZipcodeRecord> fixConditional(Store store) + { + return locationSamplers.get(store); + } + }; + } + + @Test + public void testBuild() throws Exception + { + SeedFactory factory = new SeedFactory(1234); + + Collection<String> nameList = Arrays.asList(new String[] {"Fred", "Gary", "George", "Fiona"}); + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + List<Store> stores = new ArrayList<Store>(); + for(int i = 0; i < zipcodes.size(); i++) + { + Store store = new Store(i, "Store_" + i, zipcodes.get(i)); + stores.add(store); + } + + + Sampler<Integer> idSampler = new SequenceSampler(); + Sampler<String> nameSampler = RouletteWheelSampler.createUniform(nameList, factory); + Sampler<Store> storeSampler = RouletteWheelSampler.createUniform(stores, factory); + ConditionalSampler<ZipcodeRecord, Store> zipcodeSampler = buildLocationSampler(stores, zipcodes, factory); + + Sampler<Customer> sampler = new CustomerSampler(idSampler, nameSampler, nameSampler, storeSampler, zipcodeSampler); + + Customer customer = sampler.sample(); + + assertNotNull(customer); + assertTrue(customer.getId() >= 0); + assertNotNull(customer.getName()); + assertNotNull(customer.getName().getFirst()); + assertTrue(nameList.contains(customer.getName().getFirst())); + assertNotNull(customer.getName().getSecond()); + assertTrue(nameList.contains(customer.getName().getSecond())); + assertNotNull(customer.getLocation()); + assertTrue(zipcodes.contains(customer.getLocation())); + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java new file mode 100644 index 0000000..cd92052 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java @@ -0,0 +1,79 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.customer; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Store; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.InputData; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.Names; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.customer.CustomerSamplerBuilder; +import org.junit.Test; + +import com.google.common.collect.ImmutableMap; + +public class TestCustomerSamplerBuilder +{ + + @Test + public void testSample() throws Exception + { + Map<String, Double> nameList = ImmutableMap.of("Fred", 1.0, "George", 1.0, "Gary", 1.0, "Fiona", 1.0); + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + Names names = new Names(nameList, nameList); + + // don't need product categories for building customers + InputData inputData = new InputData(zipcodes, names, new ArrayList<ProductCategory>()); + + List<Store> stores = Arrays.asList(new Store(0, "Store_0", zipcodes.get(0)), + new Store(1, "Store_1", zipcodes.get(1)), + new Store(2, "Store_2", zipcodes.get(2)) + ); + + SeedFactory factory = new SeedFactory(1234); + + CustomerSamplerBuilder builder = new CustomerSamplerBuilder(stores, inputData, factory); + Sampler<Customer> sampler = builder.build(); + + Customer customer = sampler.sample(); + + assertNotNull(customer); + assertTrue(customer.getId() >= 0); + assertNotNull(customer.getName()); + assertNotNull(customer.getName().getFirst()); + assertNotNull(customer.getName().getSecond()); + assertNotNull(customer.getLocation()); + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestProductCategoryMarkovModelSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestProductCategoryMarkovModelSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestProductCategoryMarkovModelSampler.java new file mode 100644 index 0000000..e32994b --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestProductCategoryMarkovModelSampler.java @@ -0,0 +1,114 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.purchase; + +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformSampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.ProductCategoryMarkovModelSampler; +import org.junit.Test; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +public class TestProductCategoryMarkovModelSampler +{ + + private List<ProductCategory> createProducts() + { + List<ProductCategory> productCategories = Lists.newArrayList(); + + ProductCategoryBuilder foodBuilder = new ProductCategoryBuilder(); + foodBuilder.addApplicableSpecies(PetSpecies.DOG); + foodBuilder.setAmountUsedPetPetAverage(1.0); + foodBuilder.setAmountUsedPetPetVariance(1.0); + foodBuilder.setDailyUsageRate(2.0); + foodBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + foodBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + foodBuilder.addFieldName("Flavor"); + foodBuilder.setCategory("dogFood"); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Flavor", "Fish & Potato"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Flavor", "Chicken & Rice"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 15.0, "Flavor", "Lamb & Barley"))); + productCategories.add(foodBuilder.build()); + + ProductCategoryBuilder bagBuilder = new ProductCategoryBuilder(); + bagBuilder.addApplicableSpecies(PetSpecies.DOG); + bagBuilder.setAmountUsedPetPetAverage(1.0); + bagBuilder.setAmountUsedPetPetVariance(1.0); + bagBuilder.setDailyUsageRate(2.0); + bagBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + bagBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + bagBuilder.addFieldName("Color"); + bagBuilder.setCategory("Poop Bags"); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Color", "Blue"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Color", "Red"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 120.0, "Flavor", "Multicolor"))); + productCategories.add(bagBuilder.build()); + + return productCategories; + } + + @Test + public void testSample() throws Exception + { + SeedFactory seedFactory = new SeedFactory(1245); + + List<ProductCategory> productCategories = createProducts(); + + ProductCategory productCategory = productCategories.get(0); + + Sampler<Double> fieldWeightSampler = new UniformSampler(seedFactory); + + Map<String, Double> fieldWeights = Maps.newHashMap(); + for(String fieldName : productCategory.getFieldNames()) + { + fieldWeights.put(fieldName, fieldWeightSampler.sample()); + } + + ProductCategoryMarkovModelSampler generator = new ProductCategoryMarkovModelSampler(productCategory, + fieldWeights, new UniformSampler(seedFactory), new UniformSampler(seedFactory) + ); + + MarkovModel<Product> model = generator.sample(); + + assertNotNull(model); + assertNotNull(model.getStartWeights()); + assertNotNull(model.getTransitionWeights()); + assertTrue(model.getStartWeights().size() > 0); + assertTrue(model.getTransitionWeights().size() > 0); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSampler.java new file mode 100644 index 0000000..04a20f0 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSampler.java @@ -0,0 +1,106 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.purchase; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.MarkovPurchasingModel; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModelSamplerBuilder; +import org.junit.Test; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; + +public class TestPurchasingModelSampler +{ + + private List<ProductCategory> createProducts() + { + List<ProductCategory> productCategories = Lists.newArrayList(); + + ProductCategoryBuilder foodBuilder = new ProductCategoryBuilder(); + foodBuilder.addApplicableSpecies(PetSpecies.DOG); + foodBuilder.setAmountUsedPetPetAverage(1.0); + foodBuilder.setAmountUsedPetPetVariance(1.0); + foodBuilder.setDailyUsageRate(2.0); + foodBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + foodBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + foodBuilder.addFieldName("Flavor"); + foodBuilder.setCategory("dogFood"); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Flavor", "Fish & Potato"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Flavor", "Chicken & Rice"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 15.0, "Flavor", "Lamb & Barley"))); + productCategories.add(foodBuilder.build()); + + ProductCategoryBuilder bagBuilder = new ProductCategoryBuilder(); + bagBuilder.addApplicableSpecies(PetSpecies.DOG); + bagBuilder.setAmountUsedPetPetAverage(1.0); + bagBuilder.setAmountUsedPetPetVariance(1.0); + bagBuilder.setDailyUsageRate(2.0); + bagBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + bagBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + bagBuilder.addFieldName("Color"); + bagBuilder.setCategory("Poop Bags"); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Color", "Blue"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Color", "Red"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 120.0, "Color", "Multicolor"))); + productCategories.add(bagBuilder.build()); + + return productCategories; + } + + @Test + public void testSample() throws Exception + { + SeedFactory seedFactory = new SeedFactory(1245); + + List<ProductCategory> productCategories = createProducts(); + + PurchasingModelSamplerBuilder builder = new PurchasingModelSamplerBuilder(productCategories, seedFactory); + Sampler<MarkovPurchasingModel> sampler = builder.buildMarkovPurchasingModel(); + MarkovPurchasingModel profile = sampler.sample(); + + assertNotNull(profile); + assertNotNull(profile.getProductCategories()); + assertTrue(profile.getProductCategories().size() > 0); + + for(String label : profile.getProductCategories()) + { + assertNotNull(profile.getProfile(label)); + assertNotNull(profile.getProfile(label).getStartWeights()); + assertTrue(profile.getProfile(label).getStartWeights().size() > 0); + assertNotNull(profile.getProfile(label).getTransitionWeights()); + assertTrue(profile.getProfile(label).getTransitionWeights().size() > 0); + } + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSamplerBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSamplerBuilder.java new file mode 100644 index 0000000..2255fc3 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingModelSamplerBuilder.java @@ -0,0 +1,106 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.purchase; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.MarkovPurchasingModel; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModelSamplerBuilder; +import org.junit.Test; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; + +public class TestPurchasingModelSamplerBuilder +{ + + private List<ProductCategory> createProducts() + { + List<ProductCategory> productCategories = Lists.newArrayList(); + + ProductCategoryBuilder foodBuilder = new ProductCategoryBuilder(); + foodBuilder.addApplicableSpecies(PetSpecies.DOG); + foodBuilder.setAmountUsedPetPetAverage(1.0); + foodBuilder.setAmountUsedPetPetVariance(1.0); + foodBuilder.setDailyUsageRate(2.0); + foodBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + foodBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + foodBuilder.addFieldName("Flavor"); + foodBuilder.setCategory("dogFood"); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Flavor", "Fish & Potato"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Flavor", "Chicken & Rice"))); + foodBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "dogFood", + Constants.PRODUCT_QUANTITY, (Object) 15.0, "Flavor", "Lamb & Barley"))); + productCategories.add(foodBuilder.build()); + + ProductCategoryBuilder bagBuilder = new ProductCategoryBuilder(); + bagBuilder.addApplicableSpecies(PetSpecies.DOG); + bagBuilder.setAmountUsedPetPetAverage(1.0); + bagBuilder.setAmountUsedPetPetVariance(1.0); + bagBuilder.setDailyUsageRate(2.0); + bagBuilder.addFieldName(Constants.PRODUCT_CATEGORY); + bagBuilder.addFieldName(Constants.PRODUCT_QUANTITY); + bagBuilder.addFieldName("Color"); + bagBuilder.setCategory("Poop Bags"); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 60.0, "Color", "Blue"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 30.0, "Color", "Red"))); + bagBuilder.addProduct(new Product(ImmutableMap.of(Constants.PRODUCT_CATEGORY, (Object) "Poop Bags", + Constants.PRODUCT_QUANTITY, (Object) 120.0, "Color", "Multicolor"))); + productCategories.add(bagBuilder.build()); + + return productCategories; + } + + @Test + public void testBuild() throws Exception + { + SeedFactory seedFactory = new SeedFactory(1245); + + List<ProductCategory> productCategories = createProducts(); + + PurchasingModelSamplerBuilder builder = new PurchasingModelSamplerBuilder(productCategories, seedFactory); + Sampler<MarkovPurchasingModel> sampler = builder.buildMarkovPurchasingModel(); + MarkovPurchasingModel profile = sampler.sample(); + + assertNotNull(profile); + assertNotNull(profile.getProductCategories()); + assertTrue(profile.getProductCategories().size() > 0); + + for(String label : profile.getProductCategories()) + { + assertNotNull(profile.getProfile(label)); + assertNotNull(profile.getProfile(label).getStartWeights()); + assertTrue(profile.getProfile(label).getStartWeights().size() > 0); + assertNotNull(profile.getProfile(label).getTransitionWeights()); + assertTrue(profile.getProfile(label).getTransitionWeights().size() > 0); + } + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingProcesses.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingProcesses.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingProcesses.java new file mode 100644 index 0000000..c110def --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/TestPurchasingProcesses.java @@ -0,0 +1,70 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.purchase; + +import static org.junit.Assert.assertNotNull; + +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingProcesses; +import org.junit.Test; + +import com.google.common.collect.Maps; + +public class TestPurchasingProcesses +{ + + @Test + public void testSimulatePurchase() throws Exception + { + Map<Product, Double> productPDF = Maps.newHashMap(); + + for(int i = 0; i < 10; i++) + { + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "dog food"); + fields.put(Constants.PRODUCT_QUANTITY, (double) (i + 1)); + Product product = new Product(fields); + productPDF.put(product, 0.1); + } + + SeedFactory seedFactory = new SeedFactory(1234); + Sampler<Product> sampler = RouletteWheelSampler.create(productPDF, seedFactory); + + + Map<String, Sampler<Product>> processesMap = Maps.newHashMap(); + processesMap.put("dog food", sampler); + PurchasingProcesses processes = new PurchasingProcesses(processesMap); + + Product product = processes.sample("dog food"); + + assertNotNull(product); + assertNotNull(product.getFieldValue(Constants.PRODUCT_CATEGORY)); + assertNotNull(product.getFieldValue(Constants.PRODUCT_QUANTITY)); + + product = processes.sample("dog food"); + + assertNotNull(product); + assertNotNull(product.getFieldValue(Constants.PRODUCT_CATEGORY)); + assertNotNull(product.getFieldValue(Constants.PRODUCT_QUANTITY)); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationIncomePDF.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationIncomePDF.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationIncomePDF.java new file mode 100644 index 0000000..ee27af7 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationIncomePDF.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.store; + +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.generators.store.StoreLocationIncomePDF; +import org.junit.Test; + +public class TestStoreLocationIncomePDF +{ + + @Test + public void testProbability() throws Exception + { + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + StoreLocationIncomePDF pdf = new StoreLocationIncomePDF(zipcodes, 100.0); + + for(ZipcodeRecord record : zipcodes) + { + assertTrue(pdf.probability(record) > 0.0); + } + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationPopulationPDF.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationPopulationPDF.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationPopulationPDF.java new file mode 100644 index 0000000..7c4f522 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreLocationPopulationPDF.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.store; + +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.generators.store.StoreLocationPopulationPDF; +import org.junit.Test; + +public class TestStoreLocationPopulationPDF +{ + + @Test + public void testProbability() throws Exception + { + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + StoreLocationPopulationPDF pdf = new StoreLocationPopulationPDF(zipcodes); + + for(ZipcodeRecord record : zipcodes) + { + assertTrue(pdf.probability(record) > 0.0); + } + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSampler.java new file mode 100644 index 0000000..9efaef6 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSampler.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.store; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Collection; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Store; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.SequenceSampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.store.StoreSampler; +import org.junit.Test; + +public class TestStoreSampler +{ + + @Test + public void testSampler() throws Exception + { + Collection<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + SeedFactory factory = new SeedFactory(1234); + + Sampler<Store> sampler = new StoreSampler(new SequenceSampler(), + RouletteWheelSampler.createUniform(zipcodes, factory)); + + Store store = sampler.sample(); + assertNotNull(store); + assertTrue(store.getId() >= 0); + assertNotNull(store.getName()); + assertNotNull(store.getLocation()); + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSamplerBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSamplerBuilder.java new file mode 100644 index 0000000..cc896ea --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/TestStoreSamplerBuilder.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.store; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Pair; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Store; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.store.StoreSamplerBuilder; +import org.junit.Test; + +public class TestStoreSamplerBuilder +{ + + @Test + public void testBuild() throws Exception + { + List<ZipcodeRecord> zipcodes = Arrays.asList(new ZipcodeRecord[] { + new ZipcodeRecord("11111", Pair.create(1.0, 1.0), "AZ", "Tempte", 30000.0, 100), + new ZipcodeRecord("22222", Pair.create(2.0, 2.0), "AZ", "Phoenix", 45000.0, 200), + new ZipcodeRecord("33333", Pair.create(3.0, 3.0), "AZ", "Flagstaff", 60000.0, 300) + }); + + assertTrue(zipcodes.size() > 0); + + SeedFactory factory = new SeedFactory(1234); + + StoreSamplerBuilder builder = new StoreSamplerBuilder(zipcodes, factory); + Sampler<Store> sampler = builder.build(); + + Store store = sampler.sample(); + assertNotNull(store); + assertTrue(store.getId() >= 0); + assertNotNull(store.getName()); + assertNotNull(store.getLocation()); + + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventory.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventory.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventory.java new file mode 100644 index 0000000..6edb03d --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventory.java @@ -0,0 +1,94 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerInventory; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParameters; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParametersSamplerBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.ProductCategoryInventory; +import org.junit.Test; + +import com.google.common.collect.Maps; + +public class TestCustomerInventory +{ + + @Test + public void testPurchase() throws Exception + { + SeedFactory seedFactory = new SeedFactory(1234); + + CustomerTransactionParametersSamplerBuilder transParamsBuilder = new CustomerTransactionParametersSamplerBuilder(seedFactory); + Sampler<CustomerTransactionParameters> sampler = transParamsBuilder.build(); + + CustomerTransactionParameters parameters = sampler.sample(); + + ProductCategoryBuilder builder = new ProductCategoryBuilder(); + builder.addApplicableSpecies(PetSpecies.DOG); + builder.setAmountUsedPetPetAverage(1.0); + builder.setAmountUsedPetPetVariance(1.0); + builder.setDailyUsageRate(2.0); + builder.setCategory("dog food"); + + + ProductCategory category = builder.build(); + + ProductCategoryInventory productInventory = new ProductCategoryInventory(category, parameters, seedFactory); + + Map<String, ProductCategoryInventory> inventories = Maps.newHashMap(); + inventories.put("dog food", productInventory); + + CustomerInventory inventory = new CustomerInventory(inventories); + + for(Map.Entry<String, Double> entry : inventory.getExhaustionTimes().entrySet()) + { + assertEquals(entry.getValue(), 0.0, 0.0001); + } + + for(Map.Entry<String, Double> entry : inventory.getInventoryAmounts(0.0).entrySet()) + { + assertEquals(entry.getValue(), 0.0, 0.0001); + } + + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "dog food"); + fields.put(Constants.PRODUCT_QUANTITY, 30.0); + Product product = new Product(fields); + + inventory.simulatePurchase(1.0, product); + + Map<String, Double> exhaustionTimes = inventory.getExhaustionTimes(); + assertTrue(exhaustionTimes.containsKey("dog food")); + assertTrue(exhaustionTimes.get("dog food") > 0.0); + + Map<String, Double> amounts = inventory.getInventoryAmounts(2.0); + assertTrue(amounts.containsKey("dog food")); + assertTrue(amounts.get("dog food") > 0.0); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventoryBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventoryBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventoryBuilder.java new file mode 100644 index 0000000..fb147de --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerInventoryBuilder.java @@ -0,0 +1,91 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + +import org.apache.bigtop.bigpetstore.datagenerator.Constants; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; +import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerInventory; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerInventoryBuilder; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParameters; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParametersSamplerBuilder; +import org.junit.Test; + +import com.google.common.collect.Maps; + +public class TestCustomerInventoryBuilder +{ + + @Test + public void testBuild() throws Exception + { + SeedFactory seedFactory = new SeedFactory(1234); + + CustomerTransactionParametersSamplerBuilder transParamsBuilder = new CustomerTransactionParametersSamplerBuilder(seedFactory); + Sampler<CustomerTransactionParameters> sampler = transParamsBuilder.build(); + + CustomerTransactionParameters parameters = sampler.sample(); + + ProductCategoryBuilder builder = new ProductCategoryBuilder(); + builder.addApplicableSpecies(PetSpecies.DOG); + builder.setAmountUsedPetPetAverage(1.0); + builder.setAmountUsedPetPetVariance(1.0); + builder.setDailyUsageRate(2.0); + builder.setCategory("dog food"); + + ProductCategory category = builder.build(); + + CustomerInventoryBuilder inventoryBuilder = new CustomerInventoryBuilder(parameters, seedFactory); + inventoryBuilder.addProductCategory(category); + + CustomerInventory inventory = inventoryBuilder.build(); + + for(Map.Entry<String, Double> entry : inventory.getExhaustionTimes().entrySet()) + { + assertEquals(entry.getValue(), 0.0, 0.0001); + } + + for(Map.Entry<String, Double> entry : inventory.getInventoryAmounts(0.0).entrySet()) + { + assertEquals(entry.getValue(), 0.0, 0.0001); + } + + Map<String, Object> fields = Maps.newHashMap(); + fields.put(Constants.PRODUCT_CATEGORY, "dog food"); + fields.put(Constants.PRODUCT_QUANTITY, 30.0); + Product product = new Product(fields); + + inventory.simulatePurchase(1.0, product); + + Map<String, Double> exhaustionTimes = inventory.getExhaustionTimes(); + assertTrue(exhaustionTimes.containsKey("dog food")); + assertTrue(exhaustionTimes.get("dog food") > 0.0); + + Map<String, Double> amounts = inventory.getInventoryAmounts(2.0); + assertTrue(amounts.containsKey("dog food")); + assertTrue(amounts.get("dog food") > 0.0); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParameters.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParameters.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParameters.java new file mode 100644 index 0000000..a9fdaec --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParameters.java @@ -0,0 +1,69 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParameters; +import org.junit.Test; + +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Multiset; + +public class TestCustomerTransactionParameters +{ + + @Test + public void testCountPetsBySpecies() throws Exception + { + Multiset<PetSpecies> petCounts = HashMultiset.create(); + + petCounts.add(PetSpecies.CAT); + petCounts.add(PetSpecies.CAT); + petCounts.add(PetSpecies.CAT); + + + CustomerTransactionParameters transParams = new CustomerTransactionParameters( + petCounts, 0.0, 0.0); + + + assertEquals(transParams.countPetsBySpecies(PetSpecies.CAT), 3); + assertEquals(transParams.countPetsBySpecies(PetSpecies.DOG), 0); + assertEquals(transParams.countPets(), 3); + } + + @Test + public void testCountPetsByMultipleSpecies() throws Exception + { + Multiset<PetSpecies> petCounts = HashMultiset.create(); + + petCounts.add(PetSpecies.CAT); + petCounts.add(PetSpecies.CAT); + petCounts.add(PetSpecies.DOG); + + + CustomerTransactionParameters transParams = new CustomerTransactionParameters( + petCounts, 0.0, 0.0); + + + assertEquals(transParams.countPetsBySpecies(Arrays.asList(PetSpecies.values())), 3); + assertEquals(transParams.countPets(), 3); + } + +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/5646c87d/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParametersBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParametersBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParametersBuilder.java new file mode 100644 index 0000000..0630c63 --- /dev/null +++ b/bigtop-bigpetstore/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TestCustomerTransactionParametersBuilder.java @@ -0,0 +1,48 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; + +import static org.junit.Assert.assertTrue; + +import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParameters; +import org.apache.bigtop.bigpetstore.datagenerator.generators.transaction.CustomerTransactionParametersBuilder; +import org.junit.Test; + +public class TestCustomerTransactionParametersBuilder +{ + + @Test + public void testBuild() throws Exception + { + CustomerTransactionParametersBuilder builder = new CustomerTransactionParametersBuilder(); + + builder.addPet(PetSpecies.DOG); + builder.addPet(PetSpecies.DOG); + builder.addPet(PetSpecies.DOG); + + builder.setAveragePurchaseTriggerTime(1.0); + builder.setAverageTransactionTriggerTime(2.0); + + CustomerTransactionParameters transParams = builder.build(); + + assertTrue(transParams.countPetsBySpecies(PetSpecies.DOG) == 3); + assertTrue(transParams.countPetsBySpecies(PetSpecies.CAT) == 0); + assertTrue(transParams.getAveragePurchaseTriggerTime() == 1.0); + assertTrue(transParams.getAverageTransactionTriggerTime() == 2.0); + } + +}
