Added analysis.
This commit is contained in:
parent
2bbde0ee8b
commit
f5321397f4
192
.clang-format
Normal file
192
.clang-format
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -2
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignArrayOfStructures: None
|
||||||
|
AlignConsecutiveMacros: None
|
||||||
|
AlignConsecutiveAssignments: None
|
||||||
|
AlignConsecutiveBitFields: None
|
||||||
|
AlignConsecutiveDeclarations: None
|
||||||
|
AlignEscapedNewlines: Right
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: Never
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: MultiLine
|
||||||
|
AttributeMacros:
|
||||||
|
- __capability
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeConceptDeclarations: true
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 140
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
QualifierAlignment: Leave
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
DisableFormat: false
|
||||||
|
EmptyLineAfterAccessModifier: Never
|
||||||
|
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
PackConstructorInitializers: BinPack
|
||||||
|
BasedOnStyle: ''
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IfMacros:
|
||||||
|
- KJ_IF_MAYBE
|
||||||
|
IncludeBlocks: Preserve
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
|
Priority: 2
|
||||||
|
SortPriority: 0
|
||||||
|
CaseSensitive: false
|
||||||
|
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||||
|
Priority: 3
|
||||||
|
SortPriority: 0
|
||||||
|
CaseSensitive: false
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
CaseSensitive: false
|
||||||
|
IncludeIsMainRegex: '(Test)?$'
|
||||||
|
IncludeIsMainSourceRegex: ''
|
||||||
|
IndentAccessModifiers: false
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentRequires: false
|
||||||
|
IndentWidth: 4
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: None
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
LambdaBodyIndentation: Signature
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Auto
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakOpenParenthesis: 0
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
|
PenaltyIndentedWhitespace: 0
|
||||||
|
PointerAlignment: Right
|
||||||
|
PPIndentWidth: -1
|
||||||
|
ReferenceAlignment: Pointer
|
||||||
|
ReflowComments: true
|
||||||
|
RemoveBracesLLVM: false
|
||||||
|
SeparateDefinitionBlocks: Leave
|
||||||
|
ShortNamespaceLines: 1
|
||||||
|
SortIncludes: CaseSensitive
|
||||||
|
SortJavaStaticImport: Before
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCaseColon: false
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeParensOptions:
|
||||||
|
AfterControlStatements: true
|
||||||
|
AfterForeachMacros: true
|
||||||
|
AfterFunctionDefinitionName: false
|
||||||
|
AfterFunctionDeclarationName: false
|
||||||
|
AfterIfMacros: true
|
||||||
|
AfterOverloadedOperator: false
|
||||||
|
BeforeNonEmptyParentheses: false
|
||||||
|
SpaceAroundPointerQualifiers: Default
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: Never
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInLineCommentPrefix:
|
||||||
|
Minimum: 1
|
||||||
|
Maximum: -1
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
BitFieldColonSpacing: Both
|
||||||
|
Standard: Latest
|
||||||
|
StatementAttributeLikeMacros:
|
||||||
|
- Q_EMIT
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
TabWidth: 8
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Never
|
||||||
|
WhitespaceSensitiveMacros:
|
||||||
|
- STRINGIZE
|
||||||
|
- PP_STRINGIZE
|
||||||
|
- BOOST_PP_STRINGIZE
|
||||||
|
- NS_SWIFT_NAME
|
||||||
|
- CF_SWIFT_NAME
|
||||||
|
...
|
||||||
|
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.backup*
|
@ -20,6 +20,10 @@ There are three ways to install the package:
|
|||||||
```bash
|
```bash
|
||||||
./rd
|
./rd
|
||||||
```
|
```
|
||||||
|
# Some interesting stats
|
||||||
|
Especially if you know the the data.
|
||||||
|
![stats](analysis.png)
|
||||||
|
|
||||||
|
|
||||||
# Example output:
|
# Example output:
|
||||||
```bash
|
```bash
|
||||||
|
BIN
analysis.png
Normal file
BIN
analysis.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 121 KiB |
31
build.py
Normal file
31
build.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def format():
|
||||||
|
"""
|
||||||
|
Formats source code.
|
||||||
|
"""
|
||||||
|
system("clang-format -i *.c")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def publish():
|
||||||
|
"""
|
||||||
|
Publish binary to molodetz.nl package manager.
|
||||||
|
"""
|
||||||
|
system("publish rd")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def build():
|
||||||
|
"""
|
||||||
|
Formats and builds rd executable.
|
||||||
|
"""
|
||||||
|
format()
|
||||||
|
system("gcc -o rd rd.c -Ofast -Werror -Wall -pedantic -Wextra")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def run():
|
||||||
|
"""
|
||||||
|
Format, build and run rd.
|
||||||
|
"""
|
||||||
|
build()
|
||||||
|
os.system("./rd")
|
192
rd.c
Normal file
192
rd.c
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
/*
|
||||||
|
Written by retoor@molodetz.nl
|
||||||
|
|
||||||
|
This C program generates random characters, integers, and tokens and outputs them in different formats based on command-line arguments. The
|
||||||
|
program continuously generates data, which can be useful for testing data streams or simulating input.
|
||||||
|
|
||||||
|
This source code uses the following non-standard library includes:
|
||||||
|
- <string.h> for handling string operations.
|
||||||
|
- <time.h> for random seed initialization.
|
||||||
|
- <stdlib.h> for memory allocation and random functions.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
Permission is hereby granted, free of charge,
|
||||||
|
to any person obtaining a copy of this software and associated documentation files(the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions : The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS",
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
char *chars = "abcdefghijklmnopqrstuvwxyz123456789";
|
||||||
|
int char_index = 0;
|
||||||
|
|
||||||
|
unsigned char byte = 0;
|
||||||
|
unsigned char next_byte() {
|
||||||
|
byte = (byte + 1) % 254;
|
||||||
|
return byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
char get_char() {
|
||||||
|
char c = chars[char_index];
|
||||||
|
char_index = (char_index + 1) % strlen(chars);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int current_int = 0;
|
||||||
|
unsigned int bytes_written = 0;
|
||||||
|
|
||||||
|
unsigned randoms[10000];
|
||||||
|
unsigned randoms_index = 0;
|
||||||
|
unsigned int get_next_random() {
|
||||||
|
randoms_index = (randoms_index ^ 254) % (sizeof(randoms) / sizeof(int));
|
||||||
|
randoms_index = (randoms_index ^ 33) % randoms_index;
|
||||||
|
if (randoms_index % 3)
|
||||||
|
randoms_index ^= 1337;
|
||||||
|
return randoms[randoms_index] ^ randoms_index ^ 1337 ^ rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int get_int(int max) {
|
||||||
|
current_int = (current_int + 1) % max;
|
||||||
|
current_int = (get_next_random() + current_int) % max;
|
||||||
|
return current_int;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *get_random_token() {
|
||||||
|
const char *tokens[] = {"OR",
|
||||||
|
"30",
|
||||||
|
"\xF0\x9F\x98\x8D",
|
||||||
|
"\xF0\x9F\x98\x98",
|
||||||
|
"42",
|
||||||
|
"420",
|
||||||
|
"\xF0\x9F\x98\x88",
|
||||||
|
"\xF0\x9F\x98\x82",
|
||||||
|
"19",
|
||||||
|
"16",
|
||||||
|
"\xF0\x9F\x99\x89",
|
||||||
|
"\xF0\x9F\x98\x86",
|
||||||
|
"71",
|
||||||
|
"\xF0\x9F\x98\x9E",
|
||||||
|
"83",
|
||||||
|
"\xF0\x9F\x98\x8A",
|
||||||
|
"\xF0\x9F\x98\x82",
|
||||||
|
"\xF0\x9F\x98\xB0",
|
||||||
|
"\xF0\x9F\x98\x92",
|
||||||
|
"RE",
|
||||||
|
"\xF0\x9F\x99\x88",
|
||||||
|
"1",
|
||||||
|
"\xF0\x9F\x98\x9C",
|
||||||
|
"37",
|
||||||
|
"\xF0\x9F\x98\xA8",
|
||||||
|
"90",
|
||||||
|
"51",
|
||||||
|
"\xF0\x9F\x98\xB1",
|
||||||
|
"93",
|
||||||
|
"58",
|
||||||
|
"\xF0\x9F\x98\x81",
|
||||||
|
"04",
|
||||||
|
"84",
|
||||||
|
"TO",
|
||||||
|
"84",
|
||||||
|
"27",
|
||||||
|
"10",
|
||||||
|
"0",
|
||||||
|
"\xF0\x9F\x98\xA9",
|
||||||
|
"6",
|
||||||
|
"\xF0\x9F\x99\x8A",
|
||||||
|
"\xF0\x9F\x98\x84",
|
||||||
|
"+3",
|
||||||
|
"13"};
|
||||||
|
|
||||||
|
size_t count = sizeof(tokens) / sizeof(tokens[0]);
|
||||||
|
int random_index = get_int(count);
|
||||||
|
bytes_written++;
|
||||||
|
return tokens[random_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
char *create_batch(int batch_size) {
|
||||||
|
static char buffer[1024 * 10] = {0};
|
||||||
|
while ((int)strlen(buffer) < batch_size) {
|
||||||
|
strcat(buffer, get_random_token());
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void utf8() {
|
||||||
|
for (;;) {
|
||||||
|
printf("%s", get_random_token());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void chunked(int size) {
|
||||||
|
for (;;) {
|
||||||
|
char *b = create_batch(size);
|
||||||
|
printf("%s", b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lines(int size) {
|
||||||
|
for (;;) {
|
||||||
|
char *b = create_batch(size);
|
||||||
|
printf("%s\r\n", b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ints() {
|
||||||
|
const int random_cipher = 1337;
|
||||||
|
for (;;) {
|
||||||
|
printf("%u", get_int(random_cipher));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void intsc() {
|
||||||
|
const int random_cipher = 42;
|
||||||
|
for (;;) {
|
||||||
|
printf("%u,", get_int(random_cipher));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
setbuf(stdout, NULL);
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
|
||||||
|
for (size_t i = 0; i < sizeof(randoms) / sizeof(int); i++) {
|
||||||
|
randoms[i] = rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
if (strstr(argv[i], "utf8")) {
|
||||||
|
utf8();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strstr(argv[i], "utf8c")) {
|
||||||
|
const int chunk_size = 1024;
|
||||||
|
chunked(chunk_size);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strstr(argv[i], "utf8l")) {
|
||||||
|
const int length = 50;
|
||||||
|
lines(length);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strstr(argv[i], "ints")) {
|
||||||
|
ints();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (strstr(argv[i], "intsc")) {
|
||||||
|
intsc();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
utf8();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user