Skip to content

Commit 2ed0c42

Browse files
authored
Merge pull request #9 from scigolib/hotfix/v0.3.5
test: improve coverage to 92.8% for awesome-go, update hdf5 to v0.13.7
2 parents d5d8678 + bc4ddaa commit 2ed0c42

File tree

15 files changed

+5312
-7
lines changed

15 files changed

+5312
-7
lines changed

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
## [0.3.5] - 2026-02-28
2+
3+
### Changed
4+
- **HDF5 dependency**: Updated from v0.13.5 to v0.13.7
5+
- **Test coverage**: Improved from 51% to 92.8% (awesome-go >= 90% requirement)
6+
- **README**: Added Codecov badge
7+
- No breaking changes
8+
9+
### Added
10+
- `internal/v5/parser_test.go` - 35 roundtrip and error path tests for v5 parser
11+
- `internal/v5/compressed_test.go` - 5 tests for zlib decompression
12+
- `internal/v73/adapter_test.go` - 9 tests for HDF5-to-MATLAB conversion
13+
- `internal/v73/parser_test.go` - 8 tests for v73 reader path
14+
- `types/array_test.go` - 8 tests for NumericArray and CharArray
15+
16+
### Quality
17+
- Tests: 228 passing, 5 skipped (known HDF5 library limitations)
18+
- Coverage by package: v5 98.5%, types 100%, root 95.8%, v73 76.1%
19+
- Combined library coverage: 92.8%
20+
21+
---
22+
123
## [0.3.4] - 2026-02-02
224

325
### Changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
[![Go Version](https://img.shields.io/badge/Go-1.25%2B-00ADD8?style=flat-square&logo=go)](https://go.dev/dl/)
77
[![Go Reference](https://pkg.go.dev/badge/github.com/scigolib/matlab.svg)](https://pkg.go.dev/github.com/scigolib/matlab)
88
[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/scigolib/matlab/test.yml?branch=main&style=flat-square&logo=github-actions&label=CI)](https://github.com/scigolib/matlab/actions)
9+
[![Codecov](https://img.shields.io/codecov/c/github/scigolib/matlab?style=flat-square&logo=codecov)](https://codecov.io/gh/scigolib/matlab)
910
[![Go Report Card](https://goreportcard.com/badge/github.com/scigolib/matlab?style=flat-square)](https://goreportcard.com/report/github.com/scigolib/matlab)
1011
[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)
1112
[![GitHub Stars](https://img.shields.io/github/stars/scigolib/matlab?style=flat-square&logo=github)](https://github.com/scigolib/matlab/stargazers)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/scigolib/matlab
33
go 1.25
44

55
require (
6-
github.com/scigolib/hdf5 v0.13.5
6+
github.com/scigolib/hdf5 v0.13.7
77
github.com/stretchr/testify v1.11.1
88
)
99

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
44
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5-
github.com/scigolib/hdf5 v0.13.5 h1:XH1WnkD/CWOBOiBlX8iHGKHWsD4AHaKqgIsgXv+SP8Y=
6-
github.com/scigolib/hdf5 v0.13.5/go.mod h1:7KLvpsidPPQjmd83dKH8RazoKXdbCO+FItz7ksezhrY=
5+
github.com/scigolib/hdf5 v0.13.7 h1:gtexEHF5qDz7QS312dlxPIqJmATQmgHN1j6EGft2+Rw=
6+
github.com/scigolib/hdf5 v0.13.7/go.mod h1:7KLvpsidPPQjmd83dKH8RazoKXdbCO+FItz7ksezhrY=
77
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
88
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
99
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

internal/v5/compressed_test.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package v5
2+
3+
import (
4+
"bytes"
5+
"compress/zlib"
6+
"testing"
7+
)
8+
9+
// TestDecompress_ValidData compresses data with zlib, then decompresses and verifies.
10+
func TestDecompress_ValidData(t *testing.T) {
11+
// Prepare test data
12+
original := []byte("Hello, this is test data for zlib compression in MAT-file v5 format!")
13+
14+
// Compress with zlib
15+
var compressedBuf bytes.Buffer
16+
zlibWriter := zlib.NewWriter(&compressedBuf)
17+
if _, err := zlibWriter.Write(original); err != nil {
18+
t.Fatalf("zlib.Write() error: %v", err)
19+
}
20+
if err := zlibWriter.Close(); err != nil {
21+
t.Fatalf("zlib.Close() error: %v", err)
22+
}
23+
compressed := compressedBuf.Bytes()
24+
25+
// Decompress using our function
26+
reader := bytes.NewReader(compressed)
27+
result, err := decompress(reader, uint32(len(compressed)))
28+
if err != nil {
29+
t.Fatalf("decompress() unexpected error: %v", err)
30+
}
31+
32+
if !bytes.Equal(result, original) {
33+
t.Errorf("decompress() = %q, want %q", result, original)
34+
}
35+
}
36+
37+
// TestDecompress_InvalidZlib tests that garbage bytes produce an error.
38+
func TestDecompress_InvalidZlib(t *testing.T) {
39+
garbage := []byte{0xDE, 0xAD, 0xBE, 0xEF, 0x01, 0x02, 0x03, 0x04}
40+
reader := bytes.NewReader(garbage)
41+
_, err := decompress(reader, uint32(len(garbage)))
42+
if err == nil {
43+
t.Error("decompress() expected error for invalid zlib data, got nil")
44+
}
45+
}
46+
47+
// TestDecompress_EmptyInput tests that an empty reader produces an error.
48+
func TestDecompress_EmptyInput(t *testing.T) {
49+
// compressedSize > 0 but empty reader => io.ReadFull should fail
50+
reader := bytes.NewReader([]byte{})
51+
_, err := decompress(reader, 10)
52+
if err == nil {
53+
t.Error("decompress() expected error for empty input, got nil")
54+
}
55+
}
56+
57+
// TestDecompress_CorruptedData tests that a valid zlib header with corrupted body produces an error.
58+
func TestDecompress_CorruptedData(t *testing.T) {
59+
// First, create valid compressed data
60+
original := []byte("some data to compress")
61+
var compressedBuf bytes.Buffer
62+
zlibWriter := zlib.NewWriter(&compressedBuf)
63+
if _, err := zlibWriter.Write(original); err != nil {
64+
t.Fatalf("zlib.Write() error: %v", err)
65+
}
66+
if err := zlibWriter.Close(); err != nil {
67+
t.Fatalf("zlib.Close() error: %v", err)
68+
}
69+
compressed := compressedBuf.Bytes()
70+
71+
// Corrupt the body (keep first 2 bytes which are the zlib header)
72+
if len(compressed) > 4 {
73+
for i := 2; i < len(compressed); i++ {
74+
compressed[i] = 0xFF
75+
}
76+
}
77+
78+
reader := bytes.NewReader(compressed)
79+
_, err := decompress(reader, uint32(len(compressed)))
80+
if err == nil {
81+
t.Error("decompress() expected error for corrupted zlib data, got nil")
82+
}
83+
}
84+
85+
// TestDecompress_TruncatedReader tests that a reader shorter than compressedSize produces an error.
86+
func TestDecompress_TruncatedReader(t *testing.T) {
87+
// Provide only 3 bytes but claim size is 100
88+
reader := bytes.NewReader([]byte{0x78, 0x9C, 0x00})
89+
_, err := decompress(reader, 100)
90+
if err == nil {
91+
t.Error("decompress() expected error for truncated reader, got nil")
92+
}
93+
}

0 commit comments

Comments
 (0)