diff --git a/host/peer/sequence_number.go b/host/peer/sequence_number.go index 96208a7..a7a4ef4 100644 --- a/host/peer/sequence_number.go +++ b/host/peer/sequence_number.go @@ -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) diff --git a/host/peer/sequence_number_test.go b/host/peer/sequence_number_test.go new file mode 100644 index 0000000..da75b6b --- /dev/null +++ b/host/peer/sequence_number_test.go @@ -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