Fix sequence number comparison.

This commit is contained in:
gram-signal 2026-04-08 15:51:52 -07:00 committed by GitHub
parent 575324ed09
commit 8f16fa5137
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 50 additions and 1 deletions

View File

@ -46,7 +46,7 @@ func (s sequenceNumber) nextEpoch() sequenceNumber {
// == 0 if this is equal to the provided sequenceNumber
// > 0 if this is greater than the provided sequenceNumber
func (s sequenceNumber) cmp(o sequenceNumber) int {
if ecmp := int(s.epoch - o.epoch); ecmp != 0 {
if ecmp := int(int32(s.epoch - o.epoch)); ecmp != 0 {
return ecmp
}
return int(s.seq - o.seq)

View File

@ -0,0 +1,49 @@
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
package peer
import (
"testing"
)
func TestSequenceNumberCmp(t *testing.T) {
for _, test := range []struct {
a sequenceNumber
b sequenceNumber
want int
}{
{
a: sequenceNumber{epoch: 1, seq: 1},
b: sequenceNumber{epoch: 1, seq: 1},
want: 0,
},
{
a: sequenceNumber{epoch: 2, seq: 1},
b: sequenceNumber{epoch: 1, seq: 1},
want: 1,
},
{
a: sequenceNumber{epoch: 1, seq: 2},
b: sequenceNumber{epoch: 1, seq: 1},
want: 1,
},
{
a: sequenceNumber{epoch: 20, seq: 1},
b: sequenceNumber{epoch: 1, seq: 1},
want: 19,
},
{
a: sequenceNumber{epoch: 1, seq: 20},
b: sequenceNumber{epoch: 1, seq: 1},
want: 19,
},
} {
if got := test.a.cmp(test.b); got != test.want {
t.Errorf("%#v cmp> %#v: want %d got %d", test.a, test.b, test.want, got)
}
if got := test.b.cmp(test.a); got != -test.want {
t.Errorf("%#v <cmp %#v: want %d got %d", test.a, test.b, -test.want, got)
}
}
}