http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSampler.java
new file mode 100644
index 0000000..4b746b2
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSampler.java
@@ -0,0 +1,61 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.PetSpecies;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class CustomerTransactionParametersSampler implements 
Sampler<CustomerTransactionParameters>
+{
+       final private Sampler<Integer> nPetsSampler;
+       final private Sampler<PetSpecies> petSpeciesSampler;
+       final private Sampler<Double> purchaseTriggerTimeSampler;
+       final private Sampler<Double> transactionTriggerTimeSampler;
+
+       public CustomerTransactionParametersSampler(Sampler<Integer> 
nPetsSampler,
+                       Sampler<PetSpecies> petSpeciesSampler,
+                       Sampler<Double> purchaseTriggerTimeSampler,
+                       Sampler<Double> transactionTriggerTimeSampler)
+       {
+
+               this.nPetsSampler = nPetsSampler;
+               this.petSpeciesSampler = petSpeciesSampler;
+               this.purchaseTriggerTimeSampler = purchaseTriggerTimeSampler;
+               this.transactionTriggerTimeSampler = 
transactionTriggerTimeSampler;
+       }
+
+       protected void generatePets(CustomerTransactionParametersBuilder 
builder) throws Exception
+       {
+               int nPets = this.nPetsSampler.sample();
+
+               for(int i = 0; i < nPets; i++)
+               {
+                       PetSpecies species = this.petSpeciesSampler.sample();
+                       builder.addPet(species);
+               }
+       }
+
+       public CustomerTransactionParameters sample() throws Exception
+       {
+               CustomerTransactionParametersBuilder builder = new 
CustomerTransactionParametersBuilder();
+
+               this.generatePets(builder);
+               
builder.setAveragePurchaseTriggerTime(this.purchaseTriggerTimeSampler.sample());
+               
builder.setAverageTransactionTriggerTime(this.transactionTriggerTimeSampler.sample());
+
+               return builder.build();
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
new file mode 100644
index 0000000..88b1d1f
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
@@ -0,0 +1,55 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.Arrays;
+
+import org.apache.bigtop.datagenerators.bigpetstore.Constants;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.PetSpecies;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import 
org.apache.bigtop.datagenerators.samplers.samplers.BoundedMultiModalGaussianSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.RouletteWheelSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.UniformIntSampler;
+
+public class CustomerTransactionParametersSamplerBuilder
+{
+       final private SeedFactory seedFactory;
+
+       public CustomerTransactionParametersSamplerBuilder(SeedFactory 
seedFactory)
+       {
+               this.seedFactory = seedFactory;
+       }
+
+       public Sampler<CustomerTransactionParameters> build()
+       {
+               Sampler<Integer> nPetsSampler = new 
UniformIntSampler(Constants.MIN_PETS, Constants.MAX_PETS, seedFactory);
+
+               Sampler<PetSpecies> petSpeciesSampler = 
RouletteWheelSampler.createUniform(Arrays.asList(PetSpecies.values()), 
seedFactory);
+
+               Sampler<Double> transactionTriggerTimeSampler = new 
BoundedMultiModalGaussianSampler(Constants.TRANSACTION_TRIGGER_TIME_GAUSSIANS,
+                                       Constants.TRANSACTION_TRIGGER_TIME_MIN, 
Constants.TRANSACTION_TRIGGER_TIME_MAX,
+                                       seedFactory);
+
+               Sampler<Double> purchaseTriggerTimeSampler = new 
BoundedMultiModalGaussianSampler(Constants.PURCHASE_TRIGGER_TIME_GAUSSIANS,
+                               Constants.PURCHASE_TRIGGER_TIME_MIN, 
Constants.PURCHASE_TRIGGER_TIME_MAX,
+                               seedFactory);
+
+               return new CustomerTransactionParametersSampler(nPetsSampler, 
petSpeciesSampler,
+                               transactionTriggerTimeSampler, 
purchaseTriggerTimeSampler);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryInventory.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryInventory.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryInventory.java
new file mode 100644
index 0000000..3fdacbd
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryInventory.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.datagenerators.bigpetstore.generators.transaction;
+
+import org.apache.bigtop.datagenerators.bigpetstore.Constants;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import 
org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+
+public class ProductCategoryInventory
+{
+       private ProductCategoryUsageTrajectory trajectory;
+       private ProductCategoryUsageSimulator simulator;
+
+       public ProductCategoryInventory(ProductCategory productCategory, 
CustomerTransactionParameters parameters,
+                       SeedFactory seedFactory)
+       {
+
+               double amountUsedAverage = 
productCategory.getBaseAmountUsedAverage() * 
parameters.countPetsBySpecies(productCategory.getApplicableSpecies());
+               double amountUsedVariance = 
productCategory.getBaseAmountUsedVariance() * 
parameters.countPetsBySpecies(productCategory.getApplicableSpecies());
+
+               trajectory = new ProductCategoryUsageTrajectory(0.0, 0.0);
+               simulator = new 
ProductCategoryUsageSimulator(productCategory.getDailyUsageRate(),
+                               amountUsedAverage, amountUsedVariance, 
seedFactory);
+       }
+
+       public void simulatePurchase(double time, Product product) throws 
Exception
+       {
+               double amountPurchased = 
product.getFieldValueAsDouble(Constants.PRODUCT_QUANTITY);
+
+               double amountRemainingBeforePurchase = 
trajectory.amountAtTime(time);
+
+               trajectory = simulator.simulate(time, 
amountRemainingBeforePurchase + amountPurchased);
+       }
+
+       public double findExhaustionTime()
+       {
+               return trajectory.getLastTime();
+       }
+
+       public double findRemainingAmount(double time)
+       {
+               return trajectory.amountAtTime(time);
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageSimulator.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageSimulator.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageSimulator.java
new file mode 100644
index 0000000..cfefa16
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageSimulator.java
@@ -0,0 +1,72 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ExponentialSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.GaussianSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class ProductCategoryUsageSimulator
+{
+       final private double amountUsedAverage;
+       final private double amountUsedVariance;
+
+       final private Sampler<Double> timestepSampler;
+       final private Sampler<Double> R;
+
+       public ProductCategoryUsageSimulator(double dailyUsageRate, double 
amountUsedAverage,
+                       double amountUsedVariance, SeedFactory seedFactory)
+       {
+               this.amountUsedAverage = amountUsedAverage;
+               this.amountUsedVariance = amountUsedVariance;
+
+               timestepSampler = new ExponentialSampler(dailyUsageRate, 
seedFactory);
+               R = new GaussianSampler(0.0, 1.0, seedFactory);
+       }
+
+       private void step(ProductCategoryUsageTrajectory trajectory) throws 
Exception
+       {
+               // given in days since last usage
+               double timestep = timestepSampler.sample();
+
+               double r = R.sample();
+
+               // given in units per day
+               double usageAmount = this.amountUsedAverage * timestep +
+                               Math.sqrt(this.amountUsedVariance * timestep) * 
r;
+
+               // can't use a negative amount
+               usageAmount = Math.max(usageAmount, 0.0);
+
+               double remainingAmount = Math.max(0.0, 
trajectory.getLastAmount() - usageAmount);
+               double time = trajectory.getLastTime() + timestep;
+
+               trajectory.append(time, remainingAmount);
+       }
+
+       public ProductCategoryUsageTrajectory simulate(double initialTime, 
double initialAmount) throws Exception
+       {
+               ProductCategoryUsageTrajectory trajectory = new 
ProductCategoryUsageTrajectory(initialTime, initialAmount);
+
+               while(trajectory.getLastAmount() > 0.0)
+               {
+                       step(trajectory);
+               }
+
+               return trajectory;
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageTrajectory.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageTrajectory.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageTrajectory.java
new file mode 100644
index 0000000..45cdbc9
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProductCategoryUsageTrajectory.java
@@ -0,0 +1,74 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.List;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.google.common.collect.Lists;
+
+public class ProductCategoryUsageTrajectory
+{
+       final private List<Pair<Double, Double>> trajectory;
+
+       public ProductCategoryUsageTrajectory(double initialTime, double 
initialAmount)
+       {
+               trajectory = Lists.newArrayList();
+               this.append(initialTime, initialAmount);
+       }
+
+       public void append(double time, double amount)
+       {
+               trajectory.add(Pair.of(time, amount));
+       }
+
+       public double getLastAmount()
+       {
+               return trajectory.get(trajectory.size() - 1).getValue();
+       }
+
+       public double getLastTime()
+       {
+               return trajectory.get(trajectory.size() - 1).getKey();
+       }
+
+       public double amountAtTime(double time)
+       {
+               Pair<Double, Double> previous = null;
+               for(Pair<Double, Double> entry : trajectory)
+               {
+                       if(entry.getKey() > time)
+                               break;
+                       previous = entry;
+               }
+
+               if(previous == null)
+                       return 0.0;
+
+               return previous.getValue();
+       }
+
+       public Pair<Double, Double> getStep(int idx)
+       {
+               return trajectory.get(idx);
+       }
+
+       public int size()
+       {
+               return trajectory.size();
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProposedPurchaseTimeSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProposedPurchaseTimeSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProposedPurchaseTimeSampler.java
new file mode 100644
index 0000000..e4380fc
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/ProposedPurchaseTimeSampler.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.datagenerators.bigpetstore.generators.transaction;
+
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class ProposedPurchaseTimeSampler implements Sampler<Double>
+{
+       final CustomerInventory customerInventory;
+       final Sampler<Double> arrivalTimeSampler;
+
+       public ProposedPurchaseTimeSampler(CustomerInventory customerInventory,
+                       Sampler<Double> arrivalTimeSampler)
+       {
+               this.customerInventory = customerInventory;
+               this.arrivalTimeSampler = arrivalTimeSampler;
+       }
+
+       protected double categoryProposedTime(double exhaustionTime) throws 
Exception
+       {
+               return Math.max(exhaustionTime - arrivalTimeSampler.sample(), 
0.0);
+       }
+
+       public Double sample() throws Exception
+       {
+               double minProposedTime = Double.MAX_VALUE;
+               for(Double exhaustionTime : 
this.customerInventory.getExhaustionTimes().values())
+               {
+                       double proposedTime = 
this.categoryProposedTime(exhaustionTime);
+                       minProposedTime = Math.min(proposedTime, 
minProposedTime);
+               }
+
+               return minProposedTime;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
new file mode 100644
index 0000000..0ae2f2c
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
@@ -0,0 +1,108 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.bigtop.datagenerators.bigpetstore.Constants;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.RouletteWheelSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.samplers.wfs.ConditionalWeightFunction;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+public class TransactionPurchasesHiddenMarkovModel implements 
ConditionalSampler<List<Product>, Double>
+{
+
+       protected final static String STOP_STATE = "STOP";
+
+       final ConditionalSampler<Product, String> purchasingProcesses;
+       final ConditionalWeightFunction<Double, Double> categoryWF;
+       final CustomerInventory inventory;
+
+       final SeedFactory seedFactory;
+
+       public 
TransactionPurchasesHiddenMarkovModel(ConditionalSampler<Product, String> 
purchasingProcesses,
+                       ConditionalWeightFunction<Double, Double> categoryWF, 
CustomerInventory inventory,
+                               SeedFactory seedFactory)
+       {
+               this.purchasingProcesses = purchasingProcesses;
+               this.inventory = inventory;
+               this.categoryWF = categoryWF;
+
+               this.seedFactory = seedFactory;
+       }
+
+       protected String chooseCategory(double transactionTime, int 
numPurchases) throws Exception
+       {
+               ImmutableMap<String, Double> exhaustionTimes = 
this.inventory.getExhaustionTimes();
+               Map<String, Double> weights = Maps.newHashMap();
+
+               for(Map.Entry<String, Double> entry : 
exhaustionTimes.entrySet())
+               {
+                       String category = entry.getKey();
+                       double weight = 
this.categoryWF.weight(entry.getValue(), transactionTime);
+                       weights.put(category, weight);
+               }
+
+               if(numPurchases > 0)
+               {
+                       weights.put(STOP_STATE, Constants.STOP_CATEGORY_WEIGHT);
+               }
+
+               Sampler<String> sampler = RouletteWheelSampler.create(weights, 
seedFactory);
+
+               return sampler.sample();
+       }
+
+       protected Product chooseProduct(String category) throws Exception
+       {
+               return this.purchasingProcesses.sample(category);
+       }
+
+       public List<Product> sample(Double transactionTime) throws Exception
+       {
+               int numPurchases = 0;
+
+               List<Product> purchasedProducts = Lists.newArrayList();
+
+               String category;
+               while(true)
+               {
+                       category = this.chooseCategory(transactionTime, 
numPurchases);
+
+                       if(category.equals(STOP_STATE))
+                       {
+                               break;
+                       }
+
+                       Product product = this.chooseProduct(category);
+
+                       purchasedProducts.add(product);
+
+                       this.inventory.simulatePurchase(transactionTime, 
product);
+                       numPurchases += 1;
+               }
+
+               return purchasedProducts;
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesSamplerBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesSamplerBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesSamplerBuilder.java
new file mode 100644
index 0000000..678c292
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionPurchasesSamplerBuilder.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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import 
org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import 
org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel;
+import 
org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingProcesses;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.wfs.ConditionalWeightFunction;
+
+public class TransactionPurchasesSamplerBuilder
+{
+       final SeedFactory seedFactory;
+       final Collection<ProductCategory> productCategories;
+       final PurchasingModel purchasingProfile;
+
+       protected CustomerTransactionParameters transactionParameters;
+       protected CustomerInventory inventory;
+
+       public TransactionPurchasesSamplerBuilder(Collection<ProductCategory> 
productCategories,
+                       PurchasingModel purchasingProfile,
+                       SeedFactory seedFactory)
+       {
+               this.seedFactory = seedFactory;
+               this.productCategories = productCategories;
+               this.purchasingProfile = purchasingProfile;
+       }
+
+       public void setTransactionParameters(
+                       CustomerTransactionParameters transactionParameters)
+       {
+               this.transactionParameters = transactionParameters;
+       }
+
+       public void setInventory(CustomerInventory inventory)
+       {
+               this.inventory = inventory;
+       }
+
+       public ConditionalSampler<List<Product>, Double> build() throws 
Exception
+       {
+               PurchasingProcesses processes = 
purchasingProfile.buildProcesses(seedFactory);
+
+               ConditionalWeightFunction<Double, Double> categoryWF =
+                               new 
CategoryWeightFunction(transactionParameters.getAveragePurchaseTriggerTime());
+
+               ConditionalSampler<List<Product>, Double> sampler = new 
TransactionPurchasesHiddenMarkovModel(processes,
+                               categoryWF, inventory, this.seedFactory);
+
+               return sampler;
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSampler.java
new file mode 100644
index 0000000..06b479b
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSampler.java
@@ -0,0 +1,56 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class TransactionSampler implements Sampler<Transaction>
+{
+       private final Sampler<Double> timeSampler;
+       private final ConditionalSampler<List<Product>, Double> 
purchasesSampler;
+       private final Sampler<Integer> idSampler;
+       private final Customer customer;
+
+       public TransactionSampler(Customer customer, Sampler<Double> 
timeSampler,
+                       ConditionalSampler<List<Product>, Double> 
purchasesSampler,
+                       Sampler<Integer> idSampler)
+       {
+               this.timeSampler = timeSampler;
+               this.customer = customer;
+               this.purchasesSampler = purchasesSampler;
+               this.idSampler = idSampler;
+       }
+
+
+       public Transaction sample() throws Exception
+       {
+               Double transactionTime = timeSampler.sample();
+               List<Product> purchase = 
purchasesSampler.sample(transactionTime);
+               Integer id = idSampler.sample();
+
+               Transaction transaction = new Transaction(id, customer, 
customer.getStore(),
+                               transactionTime, purchase);
+
+               return transaction;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSamplerBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSamplerBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSamplerBuilder.java
new file mode 100644
index 0000000..80f336f
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionSamplerBuilder.java
@@ -0,0 +1,95 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction;
+import 
org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import 
org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.SequenceSampler;
+
+public class TransactionSamplerBuilder
+{
+       private final Collection<ProductCategory> productCategories;
+       private final Customer customer;
+       private final PurchasingModel purchasingProfile;
+       private final SeedFactory seedFactory;
+
+       CustomerTransactionParameters parameters;
+       CustomerInventory inventory;
+
+       public TransactionSamplerBuilder(Collection<ProductCategory> 
productCategories,
+                       Customer customer,
+                       PurchasingModel purchasingProfile,
+                       SeedFactory seedFactory) throws Exception
+       {
+               this.customer = customer;
+               this.seedFactory = seedFactory;
+               this.purchasingProfile = purchasingProfile;
+               this.productCategories = productCategories;
+       }
+
+       protected void buildParameters() throws Exception
+       {
+               CustomerTransactionParametersSamplerBuilder builder = new 
CustomerTransactionParametersSamplerBuilder(seedFactory);
+               parameters = builder.build().sample();
+       }
+
+       protected ConditionalSampler<List<Product>, Double> 
buildPurchasesSampler() throws Exception
+       {
+               TransactionPurchasesSamplerBuilder builder = new 
TransactionPurchasesSamplerBuilder(productCategories,
+                               purchasingProfile, seedFactory);
+
+               builder.setTransactionParameters(parameters);
+               builder.setInventory(inventory);
+
+               return builder.build();
+       }
+
+       protected Sampler<Double> buildTimeSampler()
+       {
+               TransactionTimeSamplerBuilder builder = new 
TransactionTimeSamplerBuilder(seedFactory);
+               builder.setCustomerTransactionParameters(parameters);
+               builder.setCustomerInventory(inventory);
+
+               return builder.build();
+       }
+
+       protected void buildCustomerInventory()
+       {
+               CustomerInventoryBuilder inventoryBuilder = new 
CustomerInventoryBuilder(parameters,
+                               seedFactory);
+               inventoryBuilder.addAllProductCategories(productCategories);
+               inventory = inventoryBuilder.build();
+       }
+
+       public Sampler<Transaction> build() throws Exception
+       {
+               buildParameters();
+               buildCustomerInventory();
+
+               Sampler<Double> timeSampler = buildTimeSampler();
+
+               return new TransactionSampler(customer, timeSampler, 
buildPurchasesSampler(), new SequenceSampler());
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimePDF.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimePDF.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimePDF.java
new file mode 100644
index 0000000..8e7369b
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimePDF.java
@@ -0,0 +1,31 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import 
org.apache.bigtop.datagenerators.samplers.pdfs.ConditionalProbabilityDensityFunction;
+
+public class TransactionTimePDF implements 
ConditionalProbabilityDensityFunction<Double, Double>
+{
+       public double probability(Double proposedTime, Double 
lastTransactionTime)
+       {
+               if(proposedTime >= lastTransactionTime)
+               {
+                       return 1.0;
+               }
+
+               return 0.0;
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimeSamplerBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimeSamplerBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimeSamplerBuilder.java
new file mode 100644
index 0000000..41fd984
--- /dev/null
+++ 
b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/generators/transaction/TransactionTimeSamplerBuilder.java
@@ -0,0 +1,56 @@
+/**
+ * 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.datagenerators.bigpetstore.generators.transaction;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ExponentialSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import 
org.apache.bigtop.datagenerators.samplers.samplers.StatefulMonteCarloSampler;
+
+public class TransactionTimeSamplerBuilder
+{
+       private final SeedFactory seedFactory;
+       private CustomerInventory customerInventory;
+       private CustomerTransactionParameters transactionParameters;
+
+       public TransactionTimeSamplerBuilder(SeedFactory seedFactory)
+       {
+               this.seedFactory = seedFactory;
+       }
+
+       public void setCustomerInventory(CustomerInventory inventory)
+       {
+               this.customerInventory = inventory;
+       }
+
+       public void 
setCustomerTransactionParameters(CustomerTransactionParameters parameters)
+       {
+               this.transactionParameters = parameters;
+       }
+
+       public Sampler<Double> build()
+       {
+               double lambda = 1.0 / 
transactionParameters.getAverageTransactionTriggerTime();
+               Sampler<Double> arrivalTimeSampler = new 
ExponentialSampler(lambda, seedFactory);
+               Sampler<Double> proposedTimeSampler = new 
ProposedPurchaseTimeSampler(customerInventory,
+                               arrivalTimeSampler);
+
+               return new 
StatefulMonteCarloSampler<Double>(proposedTimeSampler,
+                               new TransactionTimePDF(),
+                               0.0,
+                               seedFactory);
+       }
+}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java
deleted file mode 100644
index f1e835a..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/datamodels/TestProduct.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java
deleted file mode 100644
index b9e63f2..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovModelBuilder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java
deleted file mode 100644
index e2ff4d5..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/markovmodels/TestMarkovProcess.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/pdfs/TestMultinomialPDF.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/pdfs/TestMultinomialPDF.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/pdfs/TestMultinomialPDF.java
deleted file mode 100644
index 8952389..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/pdfs/TestMultinomialPDF.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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.pdfs;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Sets;
-
-public class TestMultinomialPDF
-{
-
-       @Test
-       public void testToString()
-       {
-               Map<String, Double> objects = ImmutableMap.of("A", 0.1, "B", 
0.3, "C", 0.5);
-               MultinomialPDF<String> pdf = new 
MultinomialPDF<String>(objects);
-               String string = pdf.toString();
-               Set<String> observed = Sets.newHashSet(string.split("\n"));
-               Set<String> expected = Sets.newHashSet("0.1,A", "0.3,B", 
"0.5,C");
-               
-               Assert.assertEquals(expected, observed);
-       }
-}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java
deleted file mode 100644
index 9300d08..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestBoundedMultiModalGaussianSampler.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 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.framework.SeedFactory;
-import org.apache.commons.lang3.tuple.Pair;
-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.of(2.0, 2.0), Pair.of(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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java
deleted file mode 100644
index 228b97d..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestExponentialSampler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java
deleted file mode 100644
index fbe8c18..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestGaussianSampler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java
deleted file mode 100644
index f1152c5..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestRouletteWheelSampler.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java
deleted file mode 100644
index 6684773..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestSequenceSampler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java
deleted file mode 100644
index a700cdf..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/framework/samplers/TestUniformIntSampler.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java
deleted file mode 100644
index 0800c58..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerLocationPDF.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.Store;
-import 
org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord;
-import org.apache.commons.lang3.tuple.Pair;
-import org.junit.Test;
-
-public class TestCustomerLocationPDF
-{
-
-       @Test
-       public void testProbability() throws Exception
-       {
-               List<ZipcodeRecord> zipcodes = Arrays.asList(new 
ZipcodeRecord[] {                              
-                               new ZipcodeRecord("11111", Pair.of(1.0, 1.0), 
"AZ", "Tempte", 30000.0, 100),
-                               new ZipcodeRecord("22222", Pair.of(2.0, 2.0), 
"AZ", "Phoenix", 45000.0, 200),
-                               new ZipcodeRecord("33333", Pair.of(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/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java
deleted file mode 100644
index 639b2af..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSampler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * 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.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.commons.lang3.tuple.Pair;
-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();
-                                       }
-                               };
-       }
-
-       @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.of(1.0, 1.0), 
"AZ", "Tempte", 30000.0, 100),
-                               new ZipcodeRecord("22222", Pair.of(2.0, 2.0), 
"AZ", "Phoenix", 45000.0, 200),
-                               new ZipcodeRecord("33333", Pair.of(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().getLeft());
-               assertTrue(nameList.contains(customer.getName().getLeft()));
-               assertNotNull(customer.getName().getRight());
-               assertTrue(nameList.contains(customer.getName().getRight()));
-               assertNotNull(customer.getLocation());
-               assertTrue(zipcodes.contains(customer.getLocation()));
-               
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java
deleted file mode 100644
index 74c8348..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/customer/TestCustomerSamplerBuilder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer;
-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.ZipcodeRecord;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-import org.apache.commons.lang3.tuple.Pair;
-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.of(1.0, 1.0), 
"AZ", "Tempte", 30000.0, 100),
-                               new ZipcodeRecord("22222", Pair.of(2.0, 2.0), 
"AZ", "Phoenix", 45000.0, 200),
-                               new ZipcodeRecord("33333", Pair.of(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);
-               
-               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().getLeft());
-               assertNotNull(customer.getName().getRight());
-               assertNotNull(customer.getLocation());
-               
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductBase.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductBase.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductBase.java
deleted file mode 100644
index 3b7c2e8..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductBase.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 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.products.cartesian;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestCartesianProductBase
-{
-       @Test
-       public void testNext()
-       {
-               Iterator<Map<String, Double>> iter = new 
CartesianProductBase<Double>("count",
-                               Arrays.asList(1.0, 2.0, 3.0));
-
-               Assert.assertTrue(iter.hasNext());
-
-               Map<String, Double> map = iter.next();
-               Assert.assertEquals(1, map.size());
-               Assert.assertTrue(map.containsKey("count"));
-               Assert.assertEquals( (double) map.get("count"), (double) 1.0, 
0.0001);
-
-               Assert.assertTrue(iter.hasNext());
-
-               map = iter.next();
-               Assert.assertEquals(1, map.size());
-               Assert.assertTrue(map.containsKey("count"));
-               Assert.assertEquals( (double) map.get("count"), (double) 2.0, 
0.0001);
-
-               Assert.assertTrue(iter.hasNext());
-
-               map = iter.next();
-               Assert.assertEquals(1, map.size());
-               Assert.assertTrue(map.containsKey("count"));
-               Assert.assertEquals( (double) map.get("count"), (double) 3.0, 
0.0001);
-
-               Assert.assertFalse(iter.hasNext());
-       }
-}

http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductField.java
----------------------------------------------------------------------
diff --git 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductField.java
 
b/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductField.java
deleted file mode 100644
index 5071a54..0000000
--- 
a/bigtop-data-generators/bigpetstore-data-generator/src/test/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/TestCartesianProductField.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 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.products.cartesian;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestCartesianProductField
-{
-
-       @Test
-       public void testTwoLevels()
-       {
-               Iterator<Map<String, String>> iter = new 
CartesianProductField<String>(
-                               "children", Arrays.asList("1", "2"),
-                                       new CartesianProductBase<String>(
-                                                       "animal", 
Arrays.asList("cat", "dog")));
-
-               Assert.assertEquals(iter.hasNext(), true);
-               Map<String, String> map = iter.next();
-               Assert.assertEquals(map.size(), 2);
-               Assert.assertTrue(map.containsKey("animal"));
-               Assert.assertTrue(map.containsKey("children"));
-               Assert.assertEquals(map.get("animal"), "cat");
-               Assert.assertEquals(map.get("children"), "1");
-
-               Assert.assertEquals(iter.hasNext(), true);
-               map = iter.next();
-               Assert.assertEquals(map.size(), 2);
-               Assert.assertTrue(map.containsKey("animal"));
-               Assert.assertTrue(map.containsKey("children"));
-               Assert.assertEquals(map.get("animal"), "cat");
-               Assert.assertEquals(map.get("children"), "2");
-
-               Assert.assertEquals(iter.hasNext(), true);
-               map = iter.next();
-               Assert.assertEquals(map.size(), 2);
-               Assert.assertTrue(map.containsKey("animal"));
-               Assert.assertTrue(map.containsKey("children"));
-               Assert.assertEquals(map.get("animal"), "dog");
-               Assert.assertEquals(map.get("children"), "1");
-
-               Assert.assertEquals(iter.hasNext(), true);
-               map = iter.next();
-               Assert.assertEquals(map.size(), 2);
-               Assert.assertTrue(map.containsKey("animal"));
-               Assert.assertTrue(map.containsKey("children"));
-               Assert.assertEquals(map.get("animal"), "dog");
-               Assert.assertEquals(map.get("children"), "2");
-
-               Assert.assertFalse(iter.hasNext());
-               Assert.assertFalse(iter.hasNext());
-               Assert.assertFalse(iter.hasNext());
-       }
-}

Reply via email to