Skip to content

Commit

Permalink
bam/record/data/field/value/array/values: Fix value count calculation
Browse files Browse the repository at this point in the history
Fixes #244.
  • Loading branch information
zaeleus committed Mar 12, 2024
1 parent b194d59 commit 51a824f
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 5 deletions.
9 changes: 9 additions & 0 deletions noodles-bam/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## Unreleased

### Fixed

* bam/record/data/field/value/array/values: Fix value count calculation
([#244]).

[#244]: https://github.com/zaeleus/noodles/issues/244

## 0.56.0 - 2024-02-15

### Changed
Expand Down
57 changes: 52 additions & 5 deletions noodles-bam/src/record/data/field/value/array/values.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ impl<'a> Values<'a, i16> {

impl<'a> sam::alignment::record::data::field::value::array::Values<'a, i16> for Values<'a, i16> {
fn len(&self) -> usize {
self.src.len() * mem::size_of::<i16>()
self.src.len() / mem::size_of::<i16>()
}

fn iter(&self) -> Box<dyn Iterator<Item = io::Result<i16>> + '_> {
Expand All @@ -88,7 +88,7 @@ impl<'a> Values<'a, u16> {

impl<'a> sam::alignment::record::data::field::value::array::Values<'a, u16> for Values<'a, u16> {
fn len(&self) -> usize {
self.src.len() * mem::size_of::<u16>()
self.src.len() / mem::size_of::<u16>()
}

fn iter(&self) -> Box<dyn Iterator<Item = io::Result<u16>> + '_> {
Expand All @@ -110,7 +110,7 @@ impl<'a> Values<'a, i32> {

impl<'a> sam::alignment::record::data::field::value::array::Values<'a, i32> for Values<'a, i32> {
fn len(&self) -> usize {
self.src.len() * mem::size_of::<i32>()
self.src.len() / mem::size_of::<i32>()
}

fn iter(&self) -> Box<dyn Iterator<Item = io::Result<i32>> + '_> {
Expand All @@ -132,7 +132,7 @@ impl<'a> Values<'a, u32> {

impl<'a> sam::alignment::record::data::field::value::array::Values<'a, u32> for Values<'a, u32> {
fn len(&self) -> usize {
self.src.len() * mem::size_of::<u32>()
self.src.len() / mem::size_of::<u32>()
}

fn iter(&self) -> Box<dyn Iterator<Item = io::Result<u32>> + '_> {
Expand All @@ -154,10 +154,57 @@ impl<'a> Values<'a, f32> {

impl<'a> sam::alignment::record::data::field::value::array::Values<'a, f32> for Values<'a, f32> {
fn len(&self) -> usize {
self.src.len() * mem::size_of::<f32>()
self.src.len() / mem::size_of::<f32>()
}

fn iter(&self) -> Box<dyn Iterator<Item = io::Result<f32>> + '_> {
Box::new(self.iter())
}
}

#[cfg(test)]
mod tests {
use noodles_sam::alignment::record::data::field::value::array::Values as _;

use super::*;

#[test]
fn test_len() {
assert_eq!(Values::<'_, i8>::new(&[]).len(), 0);
assert_eq!(Values::<'_, i8>::new(&[0x00]).len(), 1);
assert_eq!(Values::<'_, i8>::new(&[0x00, 0x00]).len(), 2);

assert_eq!(Values::<'_, u8>::new(&[]).len(), 0);
assert_eq!(Values::<'_, u8>::new(&[0x00]).len(), 1);
assert_eq!(Values::<'_, u8>::new(&[0x00, 0x00]).len(), 2);

assert_eq!(Values::<'_, i16>::new(&[]).len(), 0);
assert_eq!(Values::<'_, i16>::new(&[0x00, 0x00]).len(), 1);
assert_eq!(Values::<'_, i16>::new(&[0x00, 0x00, 0x00, 0x00]).len(), 2);

assert_eq!(Values::<'_, u16>::new(&[]).len(), 0);
assert_eq!(Values::<'_, u16>::new(&[0x00, 0x00]).len(), 1);
assert_eq!(Values::<'_, u16>::new(&[0x00, 0x00, 0x00, 0x00]).len(), 2);

assert_eq!(Values::<'_, i32>::new(&[]).len(), 0);
assert_eq!(Values::<'_, i32>::new(&[0x00, 0x00, 0x00, 0x00]).len(), 1);
assert_eq!(
Values::<'_, i32>::new(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]).len(),
2
);

assert_eq!(Values::<'_, u32>::new(&[]).len(), 0);
assert_eq!(Values::<'_, u32>::new(&[0x00, 0x00, 0x00, 0x00]).len(), 1);
assert_eq!(
Values::<'_, u32>::new(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]).len(),
2
);

assert_eq!(Values::<'_, f32>::new(&[]).len(), 0);
assert_eq!(Values::<'_, f32>::new(&[0x00, 0x00, 0x00, 0x00]).len(), 1);
assert_eq!(
Values::<'_, f32>::new(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]).len(),
2
);
}
}

0 comments on commit 51a824f

Please sign in to comment.