@@ -6,6 +6,11 @@ import (
66)
77
88func TestParseHeader (t * testing.T ) {
9+ // Note: Endian indicator interpretation:
10+ // - "IM" = file created on little-endian system → use LittleEndian
11+ // - "MI" = file created on big-endian system → use BigEndian
12+ // This is because the 16-bit value 0x4D49 ("MI") is stored as [0x49, 0x4D]
13+ // on little-endian systems, which reads as "IM".
914 tests := []struct {
1015 name string
1116 header []byte
@@ -17,46 +22,46 @@ func TestParseHeader(t *testing.T) {
1722 }{
1823 {
1924 name : "valid little endian v5" ,
20- header : makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "MI " ),
25+ header : makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "IM " ),
2126 wantDesc : "MATLAB 5.0 MAT-file" ,
2227 wantVersion : 0x0100 ,
23- wantEndian : "MI " ,
28+ wantEndian : "IM " ,
2429 wantOrder : binary .LittleEndian ,
2530 wantErr : false ,
2631 },
2732 {
2833 name : "valid big endian v5" ,
29- header : makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "IM " ),
34+ header : makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "MI " ),
3035 wantDesc : "MATLAB 5.0 MAT-file" ,
3136 wantVersion : 0x0100 ,
32- wantEndian : "IM " ,
37+ wantEndian : "MI " ,
3338 wantOrder : binary .BigEndian ,
3439 wantErr : false ,
3540 },
3641 {
3742 name : "description with trailing nulls" ,
38- header : makeHeader ("Test file\x00 \x00 \x00 " , 0x0100 , "MI " ),
43+ header : makeHeader ("Test file\x00 \x00 \x00 " , 0x0100 , "IM " ),
3944 wantDesc : "Test file" ,
4045 wantVersion : 0x0100 ,
41- wantEndian : "MI " ,
46+ wantEndian : "IM " ,
4247 wantOrder : binary .LittleEndian ,
4348 wantErr : false ,
4449 },
4550 {
4651 name : "empty description" ,
47- header : makeHeader ("" , 0x0100 , "MI " ),
52+ header : makeHeader ("" , 0x0100 , "IM " ),
4853 wantDesc : "" ,
4954 wantVersion : 0x0100 ,
50- wantEndian : "MI " ,
55+ wantEndian : "IM " ,
5156 wantOrder : binary .LittleEndian ,
5257 wantErr : false ,
5358 },
5459 {
5560 name : "v7.2 format" ,
56- header : makeHeader ("MATLAB 7.0 MAT-file" , 0x0100 , "MI " ),
61+ header : makeHeader ("MATLAB 7.0 MAT-file" , 0x0100 , "IM " ),
5762 wantDesc : "MATLAB 7.0 MAT-file" ,
5863 wantVersion : 0x0100 ,
59- wantEndian : "MI " ,
64+ wantEndian : "IM " ,
6065 wantOrder : binary .LittleEndian ,
6166 wantErr : false ,
6267 },
@@ -107,6 +112,7 @@ func TestParseHeader(t *testing.T) {
107112// TestParseHeaderByteOrderVerification verifies that byte order is correctly detected
108113// and used for version number parsing.
109114func TestParseHeaderByteOrderVerification (t * testing.T ) {
115+ // Note: "IM" = little-endian, "MI" = big-endian
110116 tests := []struct {
111117 name string
112118 endian string
@@ -115,19 +121,19 @@ func TestParseHeaderByteOrderVerification(t *testing.T) {
115121 }{
116122 {
117123 name : "little endian version parsing" ,
118- endian : "MI " ,
124+ endian : "IM " ,
119125 version : 0x0100 ,
120126 wantVersion : 0x0100 ,
121127 },
122128 {
123129 name : "big endian version parsing" ,
124- endian : "IM " ,
130+ endian : "MI " ,
125131 version : 0x0100 ,
126132 wantVersion : 0x0100 ,
127133 },
128134 {
129135 name : "little endian different version" ,
130- endian : "MI " ,
136+ endian : "IM " ,
131137 version : 0x0200 ,
132138 wantVersion : 0x0200 ,
133139 },
@@ -146,11 +152,12 @@ func TestParseHeaderByteOrderVerification(t *testing.T) {
146152 }
147153
148154 // Verify byte order matches endian indicator
149- if tt .endian == "MI" && got .Order != binary .LittleEndian {
150- t .Error ("Expected LittleEndian for 'MI' indicator" )
155+ // "IM" = little-endian, "MI" = big-endian
156+ if tt .endian == "IM" && got .Order != binary .LittleEndian {
157+ t .Error ("Expected LittleEndian for 'IM' indicator" )
151158 }
152- if tt .endian == "IM " && got .Order != binary .BigEndian {
153- t .Error ("Expected BigEndian for 'IM ' indicator" )
159+ if tt .endian == "MI " && got .Order != binary .BigEndian {
160+ t .Error ("Expected BigEndian for 'MI ' indicator" )
154161 }
155162 })
156163 }
@@ -164,7 +171,7 @@ func TestParseHeaderLongDescription(t *testing.T) {
164171 longDesc = longDesc [:i ] + "A" + longDesc [i + 1 :]
165172 }
166173
167- header := makeHeader (longDesc , 0x0100 , "MI" )
174+ header := makeHeader (longDesc , 0x0100 , "IM" ) // Use "IM" for little-endian
168175 got , err := parseHeader (header )
169176 if err != nil {
170177 t .Fatalf ("parseHeader() unexpected error: %v" , err )
@@ -176,18 +183,20 @@ func TestParseHeaderLongDescription(t *testing.T) {
176183}
177184
178185// makeHeader creates a test MAT-file header (128 bytes).
186+ // Note: "IM" = little-endian, "MI" = big-endian.
179187func makeHeader (desc string , version uint16 , endian string ) []byte {
180188 header := make ([]byte , 128 )
181189
182190 // Description (bytes 0-115)
183191 copy (header , desc )
184192
185193 // Determine byte order from endian indicator
194+ // "IM" = little-endian, "MI" = big-endian
186195 var order binary.ByteOrder
187196 switch endian {
188- case "MI" :
189- order = binary .LittleEndian
190197 case "IM" :
198+ order = binary .LittleEndian
199+ case "MI" :
191200 order = binary .BigEndian
192201 default :
193202 // For invalid endian, use little endian but write invalid indicator
@@ -205,7 +214,7 @@ func makeHeader(desc string, version uint16, endian string) []byte {
205214
206215// BenchmarkParseHeader benchmarks header parsing performance.
207216func BenchmarkParseHeader (b * testing.B ) {
208- header := makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "MI" )
217+ header := makeHeader ("MATLAB 5.0 MAT-file" , 0x0100 , "IM" ) // Use "IM" for little-endian
209218
210219 b .ResetTimer ()
211220 for i := 0 ; i < b .N ; i ++ {
0 commit comments