Skip to content

Commit ead86bd

Browse files
committed
PySequence: add missing tests
1 parent 8083c1c commit ead86bd

File tree

1 file changed

+79
-19
lines changed

1 file changed

+79
-19
lines changed

src/types/sequence.rs

Lines changed: 79 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -340,14 +340,14 @@ impl<'v> PyTryFrom<'v> for PySequence {
340340

341341
#[cfg(test)]
342342
mod tests {
343-
use crate::types::PySequence;
343+
use crate::types::{PyList, PySequence};
344344
use crate::AsPyPointer;
345345
use crate::Python;
346346
use crate::{PyObject, PyTryFrom, ToPyObject};
347347

348348
fn get_object() -> PyObject {
349349
// Convenience function for getting a single unique object
350-
Python::with_gil(|py| -> PyObject {
350+
Python::with_gil(|py| {
351351
let obj = py.eval("object()", None, None).unwrap();
352352

353353
obj.to_object(py)
@@ -382,6 +382,19 @@ mod tests {
382382
});
383383
}
384384

385+
#[test]
386+
fn test_seq_is_empty() {
387+
Python::with_gil(|py| {
388+
let list = vec![1].to_object(py);
389+
let seq = list.cast_as::<PySequence>(py).unwrap();
390+
assert!(!seq.is_empty().unwrap());
391+
let vec: Vec<u32> = Vec::new();
392+
let empty_list = vec.to_object(py);
393+
let empty_seq = empty_list.cast_as::<PySequence>(py).unwrap();
394+
assert!(empty_seq.is_empty().unwrap());
395+
});
396+
}
397+
385398
#[test]
386399
fn test_seq_contains() {
387400
Python::with_gil(|py| {
@@ -417,10 +430,6 @@ mod tests {
417430
});
418431
}
419432

420-
// fn test_get_slice() {}
421-
// fn test_set_slice() {}
422-
// fn test_del_slice() {}
423-
424433
#[test]
425434
fn test_seq_del_item() {
426435
Python::with_gil(|py| {
@@ -474,6 +483,54 @@ mod tests {
474483
});
475484
}
476485

486+
#[test]
487+
fn test_seq_get_slice() {
488+
Python::with_gil(|py| {
489+
let v: Vec<i32> = vec![1, 1, 2, 3, 5, 8];
490+
let ob = v.to_object(py);
491+
let seq = ob.cast_as::<PySequence>(py).unwrap();
492+
assert_eq!(
493+
[1, 2, 3],
494+
seq.get_slice(1, 4).unwrap().extract::<[i32; 3]>().unwrap()
495+
);
496+
assert_eq!(
497+
[3, 5, 8],
498+
seq.get_slice(3, 100)
499+
.unwrap()
500+
.extract::<[i32; 3]>()
501+
.unwrap()
502+
);
503+
});
504+
}
505+
506+
#[test]
507+
fn test_set_slice() {
508+
Python::with_gil(|py| {
509+
let v: Vec<i32> = vec![1, 1, 2, 3, 5, 8];
510+
let w: Vec<i32> = vec![7, 4];
511+
let ob = v.to_object(py);
512+
let seq = ob.cast_as::<PySequence>(py).unwrap();
513+
let ins = w.to_object(py);
514+
seq.set_slice(1, 4, ins.as_ref(py)).unwrap();
515+
assert_eq!([1, 7, 4, 5, 8], seq.extract::<[i32; 5]>().unwrap());
516+
seq.set_slice(3, 100, PyList::empty(py)).unwrap();
517+
assert_eq!([1, 7, 4], seq.extract::<[i32; 3]>().unwrap());
518+
});
519+
}
520+
521+
#[test]
522+
fn test_del_slice() {
523+
Python::with_gil(|py| {
524+
let v: Vec<i32> = vec![1, 1, 2, 3, 5, 8];
525+
let ob = v.to_object(py);
526+
let seq = ob.cast_as::<PySequence>(py).unwrap();
527+
seq.del_slice(1, 4).unwrap();
528+
assert_eq!([1, 5, 8], seq.extract::<[i32; 3]>().unwrap());
529+
seq.del_slice(1, 100).unwrap();
530+
assert_eq!([1], seq.extract::<[i32; 1]>().unwrap());
531+
});
532+
}
533+
477534
#[test]
478535
fn test_seq_index() {
479536
Python::with_gil(|py| {
@@ -580,6 +637,22 @@ mod tests {
580637
});
581638
}
582639

640+
#[test]
641+
fn test_seq_inplace() {
642+
Python::with_gil(|py| {
643+
let v = vec!["foo", "bar"];
644+
let ob = v.to_object(py);
645+
let seq = ob.cast_as::<PySequence>(py).unwrap();
646+
let rep_seq = seq.in_place_repeat(3).unwrap();
647+
assert_eq!(6, seq.len().unwrap());
648+
assert_eq!(seq, rep_seq);
649+
650+
let conc_seq = seq.in_place_concat(seq).unwrap();
651+
assert_eq!(12, seq.len().unwrap());
652+
assert_eq!(seq, conc_seq);
653+
});
654+
}
655+
583656
#[test]
584657
fn test_list_coercion() {
585658
Python::with_gil(|py| {
@@ -663,17 +736,4 @@ mod tests {
663736
assert!(seq_from.list().is_ok());
664737
});
665738
}
666-
667-
#[test]
668-
fn test_is_empty() {
669-
Python::with_gil(|py| {
670-
let list = vec![1].to_object(py);
671-
let seq = list.cast_as::<PySequence>(py).unwrap();
672-
assert!(!seq.is_empty().unwrap());
673-
let vec: Vec<u32> = Vec::new();
674-
let empty_list = vec.to_object(py);
675-
let empty_seq = empty_list.cast_as::<PySequence>(py).unwrap();
676-
assert!(empty_seq.is_empty().unwrap());
677-
});
678-
}
679739
}

0 commit comments

Comments
 (0)