Skip to content

Commit 615c5a9

Browse files
authored
Merge pull request #9 from jshiv/fix/change_reverse
Removed copy from reverse function
2 parents f5e2511 + 68bf611 commit 615c5a9

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

payload.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,9 @@ func (p *Payload) PackLittleEndian() *big.Int {
251251

252252
// Reverse byte array for little endian signals.
253253
func reverse(data []byte) []byte {
254-
reversedArray := make([]byte, len(data))
255-
copy(reversedArray, data)
256-
for i, j := 0, len(reversedArray)-1; i < j; i, j = i+1, j-1 {
257-
reversedArray[i], reversedArray[j] = reversedArray[j], reversedArray[i]
254+
reversedArray := make([]byte, 0, len(data))
255+
for i := len(data) - 1; i >= 0; i-- {
256+
reversedArray = append(reversedArray, data[i])
258257
}
259258
return reversedArray
260259
}

payload_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package can
22

33
import (
44
"fmt"
5+
"reflect"
56
"testing"
67
)
78

@@ -66,6 +67,24 @@ func TestSignedBigEndian(t *testing.T) {
6667
fmt.Println(payload.SignedBitsBigEndian(signal.start, signal.length))
6768
}
6869

70+
func TestReverse(t *testing.T) {
71+
payloadHexes := []string{
72+
"17399b6c89d22805003f", // Even Length
73+
"17399b6c89d22805003f17399b6c89d22805003f17399b6c89d22805003f", // Long Even
74+
"17399b6c89d2280500", // Odd Length
75+
"17399b6c89d228050017399b6c89d228050017399b6c89d2280500", // Long Odd
76+
}
77+
78+
for _, hex := range payloadHexes {
79+
p, _ := PayloadFromHex(hex)
80+
81+
twiceReversed := reverse(reverse(p.Data))
82+
if !reflect.DeepEqual(p.Data, twiceReversed) {
83+
t.Errorf("Reversed slices are not equal, input: %v, output: %v", p.Data, twiceReversed)
84+
}
85+
}
86+
}
87+
6988
func Benchmark4BytesPayload_PackLittleEndian(b *testing.B) {
7089
data := []byte{0x40, 0x23, 0x01, 0x12}
7190
payload := Payload{Data: data}

0 commit comments

Comments
 (0)