-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmutator_shortcuts.go
208 lines (188 loc) · 5.19 KB
/
mutator_shortcuts.go
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
// Archivo: easy.go
package mutator
import (
"math/rand"
)
// Función para crear un MutationType para un cambio de caso
func NewCaseChangeMutation(length int, prob float64) MutationType {
return MutationType{
Type: CaseChange,
Length: length,
MutationProb: prob,
Letters: true,
}
}
// Función para crear un MutationType para un cambio de vocales
func NewVowelChangeMutation(length int, prob float64) MutationType {
return MutationType{
Type: VowelChange,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para un palabras falsas
func NewFakeWordMutation(length int, prob float64) MutationType {
return MutationType{
Type: FakeWord,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para inserciones
func NewInsertMutation(length int, prob float64, kind string) MutationType {
letters, numbers, special := processKind(kind)
return MutationType{
Type: Insert,
Length: length,
MutationProb: prob,
Letters: letters,
Numbers: numbers,
Special: special,
}
}
// Función para crear un MutationType para inserciones
func NewDictionaryWord(length int, prob float64, dictionary string, wordslist []string) MutationType {
return MutationType{
Type: RandomWord,
Length: length,
MutationProb: prob,
Dictionary: dictionary,
Wordslist: wordslist,
}
}
// Función para crear un MutationType para reemplazos
func NewReplaceMutation(length int, prob float64, kind string) MutationType {
letters, numbers, special := processKind(kind)
return MutationType{
Type: Replace,
Length: length,
MutationProb: prob,
Letters: letters,
Numbers: numbers,
Special: special,
}
}
// Función para crear un MutationType para eliminaciones
func NewDeleteMutation(length int, prob float64, kind string) MutationType {
letters, numbers, special := processKind(kind)
return MutationType{
Type: Delete,
Length: length,
MutationProb: prob,
Letters: letters,
Numbers: numbers,
Special: special,
}
}
// Función para crear un MutationType para intercambios
func NewSwapMutation(length int, prob float64) MutationType {
return MutationType{
Type: Swap,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para duplicaciones
func NewDuplicateMutation(length int, prob float64) MutationType {
return MutationType{
Type: Duplicate,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para inversión
func NewReverseMutation(length int, prob float64) MutationType {
return MutationType{
Type: Reverse,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para selección de caracteres
func NewHtmlElement(length int, prob float64) MutationType {
return MutationType{
Type: HtmlElement,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para selección de caracteres
func NewPickMutation(length int, prob float64, kind string) MutationType {
letters, numbers, special := processKind(kind)
return MutationType{
Type: Pick,
Length: length,
MutationProb: prob,
Letters: letters,
Numbers: numbers,
Special: special,
}
}
// Función para crear un MutationType para testear limites de numeros
func NewBoundaryMutation(length int, prob float64) MutationType {
return MutationType{
Type: BoundaryValues,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para testear limites de numeros
func NewBoolMutation(length int, prob float64) MutationType {
return MutationType{
Type: Bool,
Length: length,
MutationProb: prob,
}
}
// Función para crear un MutationType para generar random jsons
func NewJSONMutation(length int, prob float64) MutationType {
return MutationType{
Type: RandomJSON,
Length: length,
MutationProb: prob,
}
}
// Función para crear un Config con configuraciones predeterminadas
func NewDefaultConfig(initialText string, mutations []MutationType) *Config {
return &Config{
InitialText: initialText,
MutationTypes: mutations,
CharSet: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()",
CharProbabilities: nil,
Prefix: "",
Suffix: "",
StaticText: "",
}
}
// Function to create a random MutationType with a random kind
func NewRandomMutation(length int, prob float64) MutationType {
// Define possible kinds
// kinds := []string{"letters", "numbers", "special", "all"}
// Randomly select a kind
randomKind := "all"
letters, numbers, special := processKind(randomKind)
actions := []MutationAction{
Replace,
Insert,
Delete,
Swap,
CaseChange,
Duplicate,
Reverse,
VowelChange,
Pick,
RandomWord,
FakeWord,
BoundaryValues,
}
// Randomly select a mutation action
randomAction := actions[rand.Intn(len(actions))]
return MutationType{
Type: randomAction,
Length: length,
MutationProb: prob,
Letters: letters,
Numbers: numbers,
Special: special,
}
}