1. ```
/// Calculate the differences between elements of `values` offset by `offset`,
```
2. ```
/// wrapping around from the end of `values` to the beginning.
```
3. ```
///
```
4. ```
/// Element `n` of the result is `values[(n+offset)%len] - values[n]`.
```
5. ```
fn offset_differences(offset: usize, values: Vec<i32>) -> Vec<i32> {
```
6. ```
let a = (&values).into_iter();
```
7. ```
let b = (&values).into_iter().cycle().skip(offset);
```
8. ```
a.zip(b).map(|(a, b)| *b - *a).collect()
```
9. ```
}
```
11. ```
#[test]
```
12. ```
fn test_offset_one() {
```
13. ```
assert_eq!(offset_differences(1, vec![1, 3, 5, 7]), vec![2, 2, 2, -6]);
```
14. ```
assert_eq!(offset_differences(1, vec![1, 3, 5]), vec![2, 2, -4]);
```
15. ```
assert_eq!(offset_differences(1, vec![1, 3]), vec![2, -2]);
```
16. ```
}
```
18. ```
#[test]
```
19. ```
fn test_larger_offsets() {
```
20. ```
assert_eq!(offset_differences(2, vec![1, 3, 5, 7]), vec![4, 4, -4, -4]);
```
21. ```
assert_eq!(offset_differences(3, vec![1, 3, 5, 7]), vec![6, -2, -2, -2]);
```
22. ```
assert_eq!(offset_differences(4, vec![1, 3, 5, 7]), vec![0, 0, 0, 0]);
```
23. ```
assert_eq!(offset_differences(5, vec![1, 3, 5, 7]), vec![2, 2, 2, -6]);
```
24. ```
}
```
26. ```
#[test]
```
27. ```
fn test_degenerate_cases() {
```
28. ```
assert_eq!(offset_differences(1, vec![0]), vec![0]);
```
29. ```
assert_eq!(offset_differences(1, vec![1]), vec![0]);
```
30. ```
let empty: Vec<i32> = vec![];
```
31. ```
assert_eq!(offset_differences(1, empty), vec![]);
```
32. ```
}
```
34. ```
fn main() {}
```