File: ring_test.go

package info (click to toggle)
golang-opentelemetry-otel 1.31.0-5
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 11,844 kB
  • sloc: makefile: 237; sh: 51
file content (86 lines) | stat: -rw-r--r-- 1,798 bytes parent folder | download | duplicates (2)
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
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package log

import (
	"testing"

	"github.com/stretchr/testify/assert"

	"go.opentelemetry.io/otel/log"
)

func verifyRing(t *testing.T, r *ring, N int, sum int) {
	// Length.
	assert.Equal(t, N, r.Len(), "r.Len()")

	// Iteration.
	var n, s int
	r.Do(func(v Record) {
		n++
		body := v.Body()
		if body.Kind() != log.KindEmpty {
			s += int(body.AsInt64())
		}
	})
	assert.Equal(t, N, n, "number of forward iterations")
	if sum >= 0 {
		assert.Equal(t, sum, s, "forward ring sum")
	}

	if r == nil {
		return
	}

	// Connections.
	if r.next != nil {
		var p *ring // previous element.
		for q := r; p == nil || q != r; q = q.next {
			if p != nil {
				assert.Equalf(t, p, q.prev, "prev = %p, expected q.prev = %p", p, q.prev)
			}
			p = q
		}
		assert.Equalf(t, p, r.prev, "prev = %p, expected r.prev = %p", p, r.prev)
	}

	// Next, Prev.
	assert.Equal(t, r.next, r.Next(), "r.Next() != r.next")
	assert.Equal(t, r.prev, r.Prev(), "r.Prev() != r.prev")
}

func TestNewRing(t *testing.T) {
	for i := 0; i < 10; i++ {
		// Empty value.
		r := newRing(i)
		verifyRing(t, r, i, -1)
	}

	for n := 0; n < 10; n++ {
		r := newRing(n)
		for i := 1; i <= n; i++ {
			var rec Record
			rec.SetBody(log.IntValue(i))
			r.Value = rec
			r = r.Next()
		}

		sum := (n*n + n) / 2
		verifyRing(t, r, n, sum)
	}
}

func TestEmptyRing(t *testing.T) {
	var rNext, rPrev ring
	verifyRing(t, rNext.Next(), 1, 0)
	verifyRing(t, rPrev.Prev(), 1, 0)

	var rLen, rDo *ring
	assert.Equal(t, 0, rLen.Len(), "Len()")
	rDo.Do(func(Record) { assert.Fail(t, "Do func arg called") })
}