diff --git a/majorityjudgment.go b/majorityjudgment.go index 12d8b3b..7eeb75c 100644 --- a/majorityjudgment.go +++ b/majorityjudgment.go @@ -103,9 +103,9 @@ func (mj *MajorityJudgment) ComputeScore(tally *ProposalTally, favorContestation score += fmt.Sprintf("%0"+fmt.Sprintf("%d", amountOfDigitsForGrade)+"d", analysis.MedianGrade) // fixme: BAD → uint64 to int conversion — either move to int everywhere, or use whatever bigint Go has score += fmt.Sprintf("%0"+fmt.Sprintf("%d", amountOfDigitsForAdhesionScore)+"d", int(amountOfJudgments)+int(analysis.SecondGroupSize)*analysis.SecondGroupSign) - err := mutatedTally.RegradeJudgments(analysis.MedianGrade, analysis.SecondMedianGrade) - if nil != err { - return "", err + regradingErr := mutatedTally.RegradeJudgments(analysis.MedianGrade, analysis.SecondMedianGrade) + if nil != regradingErr { + return "", regradingErr } } diff --git a/tally.go b/tally.go index 30fa3a8..a4dfa39 100644 --- a/tally.go +++ b/tally.go @@ -39,6 +39,10 @@ func (proposalTally *ProposalTally) CountAvailableGrades() (_ uint8) { // This mutates the proposalTally. func (proposalTally *ProposalTally) RegradeJudgments(fromGrade uint8, intoGrade uint8) (err error) { + if fromGrade == intoGrade { + return nil + } + amountOfGrades := proposalTally.CountAvailableGrades() if fromGrade >= amountOfGrades { return fmt.Errorf("RegradeJudgments() fromGrade is too high") diff --git a/tally_test.go b/tally_test.go index 9f89e86..254ca5f 100644 --- a/tally_test.go +++ b/tally_test.go @@ -18,6 +18,19 @@ func TestProposalTally_RegradeJudgments(t *testing.T) { assert.Equal(t, uint64(8), proposalTally.Tally[6]) } +func TestProposalTally_RegradeJudgmentsIntoSelf(t *testing.T) { + proposalTally := ProposalTally{Tally: []uint64{1, 2, 3, 4, 5, 6, 7}} + err := proposalTally.RegradeJudgments(2, 2) + assert.NoError(t, err, "Regrading should succeed") + assert.Equal(t, uint64(1), proposalTally.Tally[0]) + assert.Equal(t, uint64(2), proposalTally.Tally[1]) + assert.Equal(t, uint64(3), proposalTally.Tally[2]) + assert.Equal(t, uint64(4), proposalTally.Tally[3]) + assert.Equal(t, uint64(5), proposalTally.Tally[4]) + assert.Equal(t, uint64(6), proposalTally.Tally[5]) + assert.Equal(t, uint64(7), proposalTally.Tally[6]) +} + func TestProposalTally_RegradeJudgments_Failure1(t *testing.T) { proposalTally := ProposalTally{Tally: []uint64{1, 2, 3, 4, 5, 6, 7}} err := proposalTally.RegradeJudgments(0, 60)