/// <summary> /// Compares two product partition nodes. /// </summary> /// <param name="leftNode">The left node.</param> /// <param name="rightNode">The right node.</param> private static void CompareTree(ProductPartitionNode leftNode, ProductPartitionNode rightNode) { ProductDimensionEqualityComparer comparer = new ProductDimensionEqualityComparer(); Assert.True(comparer.Equals(leftNode.Dimension, rightNode.Dimension)); Assert.AreEqual(leftNode.Children.Count(), rightNode.Children.Count()); for (int i = 0; i < leftNode.Children.Count(); i++) { ProductPartitionNode leftChildNode = leftNode.Children.ElementAt(i); bool foundMatch = false; for (int j = 0; j < rightNode.Children.Count(); j++) { ProductPartitionNode rightChildNode = rightNode.Children.ElementAt(j); if (comparer.Equals(leftChildNode.Dimension, rightChildNode.Dimension)) { CompareTree(leftChildNode, rightChildNode); foundMatch = true; break; } } Assert.True(foundMatch, "Matching node not found."); } }
/// <summary> /// Gets the operations for node. /// </summary> /// <param name="partitionNode">The partition node.</param> /// <param name="mutateOperations">The list of all mutate operations.</param> /// <returns>The list of operations that apply to partitionNode.</returns> internal List <AdGroupCriterionOperation> GetOperationsForNode( ProductPartitionNode partitionNode, AdGroupCriterionOperation[] mutateOperations) { ProductDimensionEqualityComparer comparer = new ProductDimensionEqualityComparer(); List <AdGroupCriterionOperation> retval = new List <AdGroupCriterionOperation>(); foreach (AdGroupCriterionOperation operation in mutateOperations) { switch (operation.@operator) { case Operator.SET: case Operator.REMOVE: if (operation.operand.criterion.id == partitionNode.ProductPartitionId) { retval.Add(operation); } break; case Operator.ADD: if (comparer.Equals((operation.operand.criterion as ProductPartition).caseValue, partitionNode.Dimension)) { retval.Add(operation); } break; } } return(retval); }
public void TestNullEquals() { ProductDimension dimension = new ProductBiddingCategory() { type = ProductDimensionType.BIDDING_CATEGORY_L1, value = 2L }; Assert.False(comparer.Equals(dimension, null)); Assert.False(comparer.Equals(null, dimension)); Assert.True(comparer.Equals(null, null)); }
public void TestCreateBiddingCategory() { ProductBiddingCategory categoryA = new ProductBiddingCategory() { type = ProductDimensionType.BIDDING_CATEGORY_L1, value = 2L }; ProductBiddingCategory categoryB = ProductDimensions.CreateBiddingCategory( ProductDimensionType.BIDDING_CATEGORY_L1, 2L); Assert.True(comparer.Equals(categoryA, categoryB)); ProductBiddingCategory categoryC = new ProductBiddingCategory() { type = ProductDimensionType.BIDDING_CATEGORY_L1, }; ProductBiddingCategory categoryD = ProductDimensions.CreateBiddingCategory( ProductDimensionType.BIDDING_CATEGORY_L1); Assert.True(comparer.Equals(categoryC, categoryD)); }
/// <summary> /// Gets the operations for node. /// </summary> /// <param name="partitionNode">The partition node.</param> /// <param name="mutateOperations">The list of all mutate operations.</param> /// <returns>The list of operations that apply to partitionNode.</returns> internal List<AdGroupCriterionOperation> GetOperationsForNode( ProductPartitionNode partitionNode, AdGroupCriterionOperation[] mutateOperations) { ProductDimensionEqualityComparer comparer = new ProductDimensionEqualityComparer(); List<AdGroupCriterionOperation> retval = new List<AdGroupCriterionOperation>(); foreach (AdGroupCriterionOperation operation in mutateOperations) { switch (operation.@operator) { case Operator.SET: case Operator.REMOVE: if (operation.operand.criterion.id == partitionNode.ProductPartitionId) { retval.Add(operation); } break; case Operator.ADD: if (comparer.Equals((operation.operand.criterion as ProductPartition).caseValue, partitionNode.Dimension)) { retval.Add(operation); } break; } } return retval; }