feat: improve the regrading utilities

main
Dominique Merle 3 years ago
parent ef3d92bba6
commit 96618ef789

@ -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
}
}

@ -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")

@ -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)

Loading…
Cancel
Save