소스 검색

Fix some bugs in Burndown.MergeResults

Vadim Markovtsev 7 년 전
부모
커밋
a4e9e95d8c
3개의 변경된 파일20개의 추가작업 그리고 12개의 파일을 삭제
  1. 11 11
      burndown.go
  2. 6 1
      burndown_test.go
  3. 3 0
      pipeline.go

+ 11 - 11
burndown.go

@@ -349,8 +349,7 @@ func (analyser *BurndownAnalysis) MergeResults(
 
 func mergeMatrices(m1, m2 [][]int64, granularity1, sampling1, granularity2, sampling2 int,
 	c1, c2 *CommonAnalysisResult) [][]int64 {
-	commonMerged := CommonAnalysisResult{}
-	commonMerged.Merge(c1)
+	commonMerged := *c1
 	commonMerged.Merge(c2)
 
 	var granularity, sampling int
@@ -375,17 +374,18 @@ func mergeMatrices(m1, m2 [][]int64, granularity1, sampling1, granularity2, samp
 	addBurndownMatrix(m2, granularity2, sampling2, daily,
 		int(c2.BeginTime-commonMerged.BeginTime)/(3600*24))
 
-	// convert daily to [][]int64
-	result := make([][]int64, (size+granularity-1)/granularity)
+	// convert daily to [][]in(t64
+	result := make([][]int64, (size+sampling-1)/sampling)
 	for i := range result {
-		result[i] = make([]int64, (size+sampling-1)/sampling)
-		for j := 0; j < len(result[i])*sampling; j += sampling {
-			if j >= size {
-				j = size - 1
-			}
+		result[i] = make([]int64, (size+granularity-1)/granularity)
+		sampledIndex := i*sampling
+		if i == len(result) - 1 {
+			sampledIndex = size - 1
+		}
+		for j := 0; j < len(result[i]); j++ {
 			accum := float32(0)
-			for k := i * granularity; k < (i+1)*granularity && k < len(result[i]); k++ {
-				accum += daily[k][j]
+			for k := j * granularity; k < (j+1)*granularity && k < size; k++ {
+				accum += daily[sampledIndex][k]
 			}
 			result[i][j] = int64(accum)
 		}

+ 6 - 1
burndown_test.go

@@ -786,5 +786,10 @@ func TestBurndownMergeGlobalHistory(t *testing.T) {
 	}
 	burndown := BurndownAnalysis{}
 	merged := burndown.MergeResults(res1, res2, &c1, &c2).(BurndownResult)
-	//fmt.Println(merged.granularity, merged.sampling, merged.GlobalHistory)
+	assert.Equal(t, merged.granularity, 19)
+	assert.Equal(t, merged.sampling, 14)
+	assert.Len(t, merged.GlobalHistory, 5)
+	for _, row := range merged.GlobalHistory {
+		assert.Len(t, row, 4)
+	}
 }

+ 3 - 0
pipeline.go

@@ -125,6 +125,9 @@ func (car *CommonAnalysisResult) EndTimeAsTime() time.Time {
 }
 
 func (car *CommonAnalysisResult) Merge(other *CommonAnalysisResult) {
+	if car.EndTime == 0 || other.BeginTime == 0 {
+		panic("Merging with an uninitialized CommonAnalysisResult")
+	}
 	if other.BeginTime < car.BeginTime {
 		car.BeginTime = other.BeginTime
 	}