Comments (6)
Awesome. I've always been afraid these were subtly incorrect and I just didn't have a machine on which to test them.
from bitvec.
In my case (little-endian) bitvec! makes wrong initialization after 48th bit.
Probably completely different problem, just found this issue while searching for solution.
let bits = bitvec![0, 1, 0, 1, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 1, 0, 1, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
println!("{:?}", bits);
// BitVec<Lsb0, usize> [
// 0b0101101100000000110000000011000101011011000000001100000000110001,
// 0b000000,
//]
from bitvec.
Thank you @obeah for this issue report.
The behavior is now fixed on trunk. I will cherry-pick it down into a 0.17.3
patch release later today or this week.
from bitvec.
Some further debugging with a lot of printlns shows that it's store_le that's failing:
println!("0x1234u16.to_le_bytes()={:?}", 0x1234u16.to_le_bytes());
// 0x1234u16.to_le_bytes()=[52, 18]
let u16b = u16::from_ne_bytes(0x1234u16.to_le_bytes());
println!("u16b={:?}", u16b);
// u16b=13330
bytes[..16].store_le(u16b);
println!("bytes[..16]={:?}", bytes[..16]);
// ACTUAL: bytes[..16]=BitSlice<Lsb0, u8> [01001000, 00101100]
// EXPECTED: bytes[..16]=BitSlice<Lsb0, u8> [00101100, 01001000]
Now, I"m not sure if this is a real issue, or faulty assumptions during unittesting, since to_le_bytes()
properly switches the byteorder of the integer from big-endian to little-endian, and store_le
properly switches the byteorder again, assuming it's storing a big-endian value as little-endian.
from bitvec.
The more I look at this, the more I believe this is simply a logic bug in the testing suite. The following works, as expected:
let u16b = u16::from_ne_bytes(0x1234u16.to_ne_bytes());
bytes[..16].store_le(u16b);
assert_eq!(bytes[..16].load_le::<u16>(), 0x1234u16);
from bitvec.
On big-endian, one more issue:
let bits: &BitSlice<Local, usize> = bits![1, 0, 1, 1, 0, 1, 0, 0, 1, 0];
println!("bits={:?}", bits);
// bits=BitSlice<Msb0, usize> [0000000000]
The bits macro is therefore broken on big-endian architectures.
from bitvec.
Related Issues (20)
- Use #[track_caller] attribute HOT 2
- Dead documentation link HOT 4
- `to_bitvec` and related functions returning invalid values HOT 3
- `bitvec` contains unsound global state HOT 4
- `chunks_exact_mut()` occasionally doesn't return the last chunk when `step_by()` is involved
- Difference between `BitVec` and `BitVec<T, O>`? HOT 1
- `copy_within` panics on empty range
- `bitarr!` macro link incorrect
- Implement `BitStore` for signed integer types
- impl `TryFrom<BitVec>` for `BitArray`
- How to convert bitvec to slice? HOT 1
- Build for STM32 (no_std, thumbv7m-none-eabi) - no global memory allocator
- Regarding the safety of `chunks_mut(...).remove_alias()` HOT 1
- `BitSlice::shift_start` and `BitSlice::shift_end` argument bounds incorrectly documented
- Incorrect handling of end index in BitVec::extend_from_within
- Implement `Send` for `BitValIter`
- How to "not" an entire `BitVec` in place? HOT 1
- Example of zero-initialized BitVec?
- Cargo check failed with error: could not compile `bitvec` (lib) HOT 2
- crate doesnt compile on arduino HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bitvec.