Skip to content

Commit 96d71ef

Browse files
committed
fixed a bug causing incorrect reconstructions of very short sequences
1 parent b3da9d4 commit 96d71ef

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

python/tests/test_range_coder.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -138,26 +138,27 @@ def test_range_decoder():
138138

139139
def test_range_encoder_decoder():
140140
"""
141-
Additional tests whether RangeDecoder reproduces symbols encoded by RangeEncoder.
141+
Additional tests to check whether RangeDecoder reproduces symbols encoded by RangeEncoder.
142142
"""
143143

144144
random.seed(0)
145145

146146
filepath = mkstemp()[1]
147147

148-
cumFreq = [0.25, 0.25, 0.5]
148+
for _ in range(20):
149+
numSymbols = np.random.randint(1, 6)
150+
cumFreq = [0] + np.cumsum(np.random.randint(1, 10, size=numSymbols)).tolist()
151+
data = np.random.randint(numSymbols, size=np.random.randint(20)).tolist()
149152

150-
data = [0, 1, 2]
151-
152-
encoder = RangeEncoder(filepath)
153-
encoder.encode(data, cumFreq)
154-
encoder.close()
153+
encoder = RangeEncoder(filepath)
154+
encoder.encode(data, cumFreq)
155+
encoder.close()
155156

156-
decoder = RangeDecoder(filepath)
157-
dataRec = decoder.decode(len(data), cumFreq)
158-
decoder.close()
157+
decoder = RangeDecoder(filepath)
158+
dataRec = decoder.decode(len(data), cumFreq)
159+
decoder.close()
159160

160-
assert data == dataRec
161+
assert data == dataRec
161162

162163
os.remove(filepath)
163164

range_coder.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,11 @@ template <class Iter> class rc_encoder_t : public rc_type_t {
101101
}
102102

103103
void final() {
104-
*iter++ = buffer;
105-
for (; carryN != 0; carryN--) {
106-
*iter++ = 0xFF;
104+
if (!start) {
105+
*iter++ = buffer;
106+
for (; carryN != 0; carryN--) {
107+
*iter++ = 0xFF;
108+
}
107109
}
108110

109111
uint t = L + R;

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="range_coder",
5-
version="1.0",
5+
version="1.1",
66
description="A fast implementation of a range coder",
77
packages=["range_coder"],
88
package_dir={"range_coder": "python"},

0 commit comments

Comments
 (0)