github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/internal/coverage/slicereader/slr_test.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package slicereader 6 7 import ( 8 "encoding/binary" 9 "testing" 10 ) 11 12 func TestSliceReader(t *testing.T) { 13 b := []byte{} 14 15 bt := make([]byte, 4) 16 e32 := uint32(1030507) 17 binary.LittleEndian.PutUint32(bt, e32) 18 b = append(b, bt...) 19 20 bt = make([]byte, 8) 21 e64 := uint64(907050301) 22 binary.LittleEndian.PutUint64(bt, e64) 23 b = append(b, bt...) 24 25 b = appendUleb128(b, uint(e32)) 26 b = appendUleb128(b, uint(e64)) 27 b = appendUleb128(b, 6) 28 s1 := "foobar" 29 s1b := []byte(s1) 30 b = append(b, s1b...) 31 b = appendUleb128(b, 9) 32 s2 := "bazbasher" 33 s2b := []byte(s2) 34 b = append(b, s2b...) 35 36 readStr := func(slr *Reader) string { 37 len := slr.ReadULEB128() 38 return slr.ReadString(int64(len)) 39 } 40 41 for i := 0; i < 2; i++ { 42 slr := NewReader(b, i == 0) 43 g32 := slr.ReadUint32() 44 if g32 != e32 { 45 t.Fatalf("slr.ReadUint32() got %d want %d", g32, e32) 46 } 47 g64 := slr.ReadUint64() 48 if g64 != e64 { 49 t.Fatalf("slr.ReadUint64() got %d want %d", g64, e64) 50 } 51 g32 = uint32(slr.ReadULEB128()) 52 if g32 != e32 { 53 t.Fatalf("slr.ReadULEB128() got %d want %d", g32, e32) 54 } 55 g64 = slr.ReadULEB128() 56 if g64 != e64 { 57 t.Fatalf("slr.ReadULEB128() got %d want %d", g64, e64) 58 } 59 gs1 := readStr(slr) 60 if gs1 != s1 { 61 t.Fatalf("readStr got %s want %s", gs1, s1) 62 } 63 gs2 := readStr(slr) 64 if gs2 != s2 { 65 t.Fatalf("readStr got %s want %s", gs2, s2) 66 } 67 slr.SeekTo(4) 68 off := slr.Offset() 69 if off != 4 { 70 t.Fatalf("Offset(0 returned %d wanted 4", off) 71 } 72 g64 = slr.ReadUint64() 73 if g64 != e64 { 74 t.Fatalf("post-seek slr.ReadUint64() got %d want %d", g64, e64) 75 } 76 } 77 } 78 79 func appendUleb128(b []byte, v uint) []byte { 80 for { 81 c := uint8(v & 0x7f) 82 v >>= 7 83 if v != 0 { 84 c |= 0x80 85 } 86 b = append(b, c) 87 if c&0x80 == 0 { 88 break 89 } 90 } 91 return b 92 }