g-andrade/steady_vector
70.7
Strong · 17 September 2026
1.1k
lines of production code
Erlang
with Elixir
1
measurement over time
What this system is
This system is an Erlang/OTP library implementing a persistent vector data structure optimized for tail manipulation. It provides core collection operations such as appending, retrieving, setting, and removing elements, alongside functional utilities like mapping and filtering. The project includes a dedicated benchmarking suite to evaluate performance against standard Erlang data structures and utilizes Common Test for verification.
Features
Added benchmarking suite for SteadyVector
A new benchmarking suite has been added to the \steady\_vector\_bench\ project, allowing users to evaluate the performance of \steady\_vector\ against standard Erlang/Elixir data structures such as lists, maps, arrays, \gb\_trees\, and \dicts\. The suite includes benchmarks for building, shrinking, getting, setting, and folding data, with support for quick iteration modes and optional HTML report generation.
_steady\_vector\bench/bench · high confidence
Introduction of steady\_vector persistent vector library
The application now includes the \steady\_vector\ module, providing a persistent, array-like collection optimized for tail manipulation. Users can create and manipulate vectors using operations such as \append/2\, \get/2\, \set/3\, \remove\_last/1\, \foldl/3\, \foldr/3\, \map/2\, and \filter/2\. The implementation uses a 32-way branching tree structure with structural sharing, offering O(1) size lookup and O(log32(N)) for other operations. The API also includes utility functions like \from\_list/1\, \to\_list/1\, and \is\_steady\_vector/1\.
src · high confidence
Port to Erlang with ExDoc documentation and Common Test suite
The library has been ported from Elixir to Erlang (as \steady\_vector\), providing an Erlang/OTP persistent vector implementation. This change introduces EEP-48 native API documentation rendered via ExDoc, migrates the test suite from EUnit to Common Test, and updates the build tooling to use rebar3 with modern static analysis plugins (erlfmt, hank, elvis) and CI on GitHub Actions.
(repo-wide) · high confidence
Removals
Removal of PersistentVector module
The \PersistentVector\ module has been removed from the library. This deletion eliminates the custom array-like collection implementation that previously provided indexed access, structural sharing, and specific enumeration behaviors.
lib · high confidence
Removed legacy PersistentVector benchmark script
The \bench/bench.exs\ file, which previously contained a monolithic benchmark suite for comparing PersistentVector against Erlang arrays and lists, has been deleted. This change removes the old benchmarking infrastructure in favor of the newly introduced, more granular benchmark capabilities mentioned in the commit history.
bench · high confidence
Behavioural changes
Removed unused application configuration file
The \config/config.exs\ file has been deleted from the project. This file previously contained boilerplate comments and no active configuration settings for the \persistent\_vector\ application or its dependencies, so its removal has no impact on runtime behavior or application setup.
config · high confidence
Test coverage
Migrate tests from ExUnit to Common Test
The test suite has been migrated from the Elixir ExUnit framework to Erlang's Common Test framework. This change involves deleting the previous Elixir test files (\test/PersistentVector\_test.exs\ and \test/test\_helper.exs\) and introducing a new Common Test suite (\test/steady\_vector\_SUITE.erl\) that covers the same \steady\_vector\ functionality, including operations like appending, removing, setting, and converting to/from lists.
test · high confidence
Dependencies
Benchmarking project extracted from main library
The main project's dependency manifest (mix.exs) and lockfile (mix.lock) have been removed, while a new benchmarking application (steady\_vector\_bench) has been added with its own mix.exs and mix.lock. This new benchmark project pins specific versions for the benchmarking tools Benchee (0.11.0) and Benchee HTML (0.4), and explicitly includes the PersistentVector library (0.1.4) as a dependency to facilitate performance comparisons.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 71.
Lenses
- Code Health 98
- Architecture 69
- Maturity 66
- Readiness 72
- Security 90
Changes since last survey
- 116 commits — 106 feature/other, 10 fixes
By area
- (root) — 59 commits
- src/steady_vector.erl — 30 commits
- steady_vector_bench/bench — 12 commits
- .github/workflows — 6 commits
- src/steady_vector.app.src — 3 commits
- .circleci/config.yml — 2 commits
- (repo) — 1 commit
- .vscode/tasks.json — 1 commit
- config/config.exs — 1 commit
- doc/steady_vector.md — 1 commit
Notable commits
- fix: Circle CI: fix invoked command
- fix: Fix :remove_last/1 test case
- fix: Fix crash in :from_list/1
- fix: Fix crash when removing topmost tree level
- fix: Fix library version mentioned in documentation
- fix: Fix wrong iteration order on :foldl/3
- fix: Fixed bug in reduce_root: first call to Enumerable.reduce can be with {:halt, acc}
- fix: Fixed link to license
- fix: Revert "Add OTP 22.1 to Travis targets"
- fix: Travis CI: fix declaration of disabled OTP versions
- change: 3X speed up of enumeration
- change: Ability to run individual benchmarks
- change: Adapt PersistentVector's benchmarks to our use case
- change: Add :filter/2 and its test case
- change: Add :foldr/3 and its test case
- change: Add :foreach/2 and its test cases
- change: Add :from_list/1 and :to_list/1 test cases
- change: Add :is_steady_vector/1
- change: Add :map/2 and its test case
- change: Add OTP 20.2, 20.3, 21.0, 21.1 and 21.2 to Travis targets
- …and 96 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
g-andrade/steady_vector was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 17 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 4002422495d009da7f7cc840d9f522c1229a3598 — the exact code this score is about.
- Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.