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  }