File: bytewriter_test.go

package info (click to toggle)
golang-github-performancecopilot-speed 4.0.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 508 kB
  • sloc: makefile: 38
file content (128 lines) | stat: -rw-r--r-- 2,491 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package bytewriter

import "testing"

func TestWriteInt32(t *testing.T) {
	cases := []int32{0, 10, 100, 200, 1000, 10000, 10000000, 1000000000, 2147483647}

	for _, val := range cases {
		b := NewByteWriter(4)

		off, err := b.WriteInt32(val, 0)

		if err != nil {
			t.Error(err)
			return
		}

		if off != 4 {
			t.Error("expected offset to be 4")
		}

		e := []byte{
			byte(val & 0xFF),
			byte((val >> 8) & 0xFF),
			byte((val >> 16) & 0xFF),
			byte(val >> 24),
		}

		for i := 0; i < 4; i++ {
			if b.buffer[i] != e[i] {
				t.Errorf("pos: %v, expected: %v, got %v", i, e[i], b.buffer[i])
			}
		}
	}
}

func TestWriteInt64(t *testing.T) {
	cases := []int64{0, 10, 100, 200, 1000, 10000, 10000000, 1000000000, 2147483647,
		4294967295, 10000000000000, 100000000000000000, 9223372036854775807}

	for _, val := range cases {
		w := NewByteWriter(8)

		off, err := w.WriteInt64(val, 0)
		if err != nil {
			t.Error(err)
			return
		}

		if off != 8 {
			t.Error("Not Writing 8 bytes for int32")
			return
		}

		e := []byte{
			byte(val & 0xFF),
			byte((val >> 8) & 0xFF),
			byte((val >> 16) & 0xFF),
			byte((val >> 24) & 0xFF),
			byte((val >> 32) & 0xFF),
			byte((val >> 40) & 0xFF),
			byte((val >> 48) & 0xFF),
			byte(val >> 56),
		}

		for i := 0; i < 8; i++ {
			if w.buffer[i] != e[i] {
				t.Errorf("pos: %v, expected: %v, got %v", i, e[i], w.buffer[i])
			}
		}
	}
}

func TestWriteString(t *testing.T) {
	cases := []string{"MMV", "Suyash", "This is a little long string"}
	for _, val := range cases {
		w := NewByteWriter(len(val))

		off, err := w.WriteString(val, 0)
		if err != nil {
			t.Error(err)
			return
		}

		if off != len(val) {
			t.Errorf("Expected to write %v bytes, writing %v bytes", len(val), off)
			return
		}

		e := []byte(val)
		for i := 0; i < len(val); i++ {
			if w.buffer[i] != e[i] {
				t.Errorf("pos: %v, expected: %v, got %v", i, e[i], w.buffer[i])
			}
		}
	}
}

func TestOffset(t *testing.T) {
	w := NewByteWriter(4)

	off, err := w.WriteString("a", 2)
	if err != nil {
		t.Error("Did not Expect error in writing a value inside the buffer")
		return
	}

	if off != 3 {
		t.Error("Position not changing as expected")
		return
	}

	if w.Bytes()[2] != 'a' {
		t.Error("Value was not written at the expected position")
		return
	}

	off, err = w.WriteInt32(10, 2)
	if err == nil {
		t.Error("Expected error in writing a value guaranteed to overflow")
		return
	}

	if off != -1 {
		t.Error("expected write failure to return -1")
		return
	}
}