2026-01-30 19:48:28 +00:00
|
|
|
package process
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestRingBuffer(t *testing.T) {
|
|
|
|
|
t.Run("write and read", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(10)
|
|
|
|
|
|
|
|
|
|
n, err := rb.Write([]byte("hello"))
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
assert.Equal(t, 5, n)
|
|
|
|
|
assert.Equal(t, "hello", rb.String())
|
|
|
|
|
assert.Equal(t, 5, rb.Len())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("overflow wraps around", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(5)
|
|
|
|
|
|
feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)
Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.
Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00
|
|
|
_, _ = rb.Write([]byte("hello"))
|
2026-01-30 19:48:28 +00:00
|
|
|
assert.Equal(t, "hello", rb.String())
|
|
|
|
|
|
feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)
Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.
Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00
|
|
|
_, _ = rb.Write([]byte("world"))
|
2026-01-30 19:48:28 +00:00
|
|
|
// Should contain "world" (overwrote "hello")
|
|
|
|
|
assert.Equal(t, 5, rb.Len())
|
|
|
|
|
assert.Equal(t, "world", rb.String())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("partial overflow", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(10)
|
|
|
|
|
|
feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)
Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.
Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00
|
|
|
_, _ = rb.Write([]byte("hello"))
|
|
|
|
|
_, _ = rb.Write([]byte("worldx"))
|
2026-01-30 19:48:28 +00:00
|
|
|
// Should contain "lloworldx" (11 chars, buffer is 10)
|
|
|
|
|
assert.Equal(t, 10, rb.Len())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("empty buffer", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(10)
|
|
|
|
|
assert.Equal(t, "", rb.String())
|
|
|
|
|
assert.Equal(t, 0, rb.Len())
|
|
|
|
|
assert.Nil(t, rb.Bytes())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("reset", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(10)
|
feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)
Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.
Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00
|
|
|
_, _ = rb.Write([]byte("hello"))
|
2026-01-30 19:48:28 +00:00
|
|
|
rb.Reset()
|
|
|
|
|
assert.Equal(t, "", rb.String())
|
|
|
|
|
assert.Equal(t, 0, rb.Len())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("cap", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(42)
|
|
|
|
|
assert.Equal(t, 42, rb.Cap())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("bytes returns copy", func(t *testing.T) {
|
|
|
|
|
rb := NewRingBuffer(10)
|
feat: add collect, config, crypt, plugin packages and fix all lint issues
Add four new infrastructure packages with CLI commands:
- pkg/config: layered configuration (defaults → file → env → flags)
- pkg/crypt: crypto primitives (Argon2id, AES-GCM, ChaCha20, HMAC, checksums)
- pkg/plugin: plugin system with GitHub-based install/update/remove
- pkg/collect: collection subsystem (GitHub, BitcoinTalk, market, papers, excavate)
Fix all golangci-lint issues across the entire codebase (~100 errcheck,
staticcheck SA1012/SA1019/ST1005, unused, ineffassign fixes) so that
`core go qa` passes with 0 issues.
Closes #167, #168, #170, #250, #251, #252, #253, #254, #255, #256
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 11:32:41 +00:00
|
|
|
_, _ = rb.Write([]byte("hello"))
|
2026-01-30 19:48:28 +00:00
|
|
|
|
|
|
|
|
bytes := rb.Bytes()
|
|
|
|
|
assert.Equal(t, []byte("hello"), bytes)
|
|
|
|
|
|
|
|
|
|
// Modifying returned bytes shouldn't affect buffer
|
|
|
|
|
bytes[0] = 'x'
|
|
|
|
|
assert.Equal(t, "hello", rb.String())
|
|
|
|
|
})
|
|
|
|
|
}
|