1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* BSD 3-Clause License
*
* Copyright (c) 2019-2020, InterlockLedger Network
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
//! This module contains functions that can be used to create sample values
//! to be used in tests.
use AddAssign;
/// Fills the mutable slice with the specified value.
///
/// Arguments:
/// - `target`: The slice to be filled;
/// - `value`: The value;
/// Fills the mutable slice with a sequence of values.
///
/// Arguments:
/// - `target`: The slice to be filled;
/// - `initial`: The initial value;
/// - `inc`: The increment;
/// Fills the mutable slice with a sequence of values generated by a generetor
/// function.
///
/// This function receives the current value and must return the next value of the
/// sequence.
///
/// ```
/// let mut v: [u32; 6] = [0; 6];
/// // Using a generator based on the Collatz conjecture.
/// fill_with_seq_gen(&mut v, 5, |v| if v % 2 == 0 { v / 2 } else { 3 * v + 1 });
/// let exp: [u32; 6] = [5, 16, 8, 4, 2, 1];
/// assert_eq!(&v, &exp);
/// ```
///
/// Arguments:
/// - `target`: The slice to be filled;
/// - `initial`: The initial value;
/// - `gen`: The function used to generate the next state;
/// Fills the mutable slice with a sequence of values generated by a generetor.
/// This function extracts the next value form the generator.
///
/// ```
/// struct Gen(u32, u32);
/// let mut v: [u32; 6] = [0; 6];
/// let mut g: Gen = Gen { 0: 0, 1: 1 };
///
/// // Using Fibonacci generator
/// fill_with_generator(&mut v, &mut g, |g| {
/// let r = g.0;
/// g.0 = g.1;
/// g.1 += r;
/// r
/// });
/// let exp: [u32; 6] = [0, 1, 1, 2, 3, 5];
/// assert_eq!(&v, &exp);
/// ```
///
/// Arguments:
/// - `target`: The slice to be filled;
/// - `generator`: The generator;
/// - `next`: The function used to extract the next value from the generator;