// Test the MapReduce function with a scenario, where orders are analyzed // and a list of the analyzed articles will be returned func TestMapReduce(t *testing.T) { assert := audit.NewTestingAssertion(t, true) // Create MapReducer and let the show begin. mr := &OrderMapReducer{200000, make(map[int][]*OrderItem), make(map[string]*OrderItemAnalysis), assert} err := mapreduce.MapReduce(mr) // Asserts. assert.Nil(err) assert.Equal(len(mr.items), len(mr.analyses), "all items are analyzed") for _, analysis := range mr.analyses { quantity := 0 amount := 0.0 discount := 0.0 items := mr.items[analysis.ArticleNo] for _, item := range items { unitDiscount := (item.UnitPrice / 100.0) * item.DiscountPerc totalDiscount := unitDiscount * float64(item.Count) totalAmount := (item.UnitPrice - unitDiscount) * float64(item.Count) quantity += item.Count amount += totalAmount discount += totalDiscount } assert.Equal(quantity, analysis.Quantity, "quantity per article") assert.About(amount, analysis.Amount, 0.01, "amount per article") assert.About(discount, analysis.Discount, 0.01, "discount per article") } }
// Benchmark the MapReduce function. func BenchmarkMapReduce(b *testing.B) { assert := audit.NewPanicAssertion() mr := &OrderMapReducer{b.N, make(map[int][]*OrderItem), make(map[string]*OrderItemAnalysis), assert} mapreduce.MapReduce(mr) }