Updating script and formatting files

This commit is contained in:
Leonardo Vencovsky committed 2020-06-17 21:38:00 -03:00
1 parent c16ecd886c
commit f80b17ff82
9 files changed
+451 -284

No files matched your search

+306 -138
View File
@@ -1,47 +1,100 @@
# A script that automatically generates code for code coverage, updates tests # A script that automatically generates code for code coverage, updates tests
# and Makefiles, and creates necessary directories # and Makefiles, and creates necessary directories
import argparse
import os import os
import sys
import re import re
import shutil
import subprocess import subprocess
import sys
from typing import List, Text
# Make sure we have the specified directory # Config Script Configuration
def assert_dir(dir): # Directories Names for directories
if not os.path.exists(dir): # Output Where the outputted code is to be put
os.makedirs(dir) # Build Where the build objects are to be located
# Compiler Compiler Configurations
# Compilation Tests, code coverage and flags
# Macro Expansion Configuration for the code expansion
# Collections All collections
#
# Variables marked as const are to not be modified
# Compiler settings # Directories
# Output directory
# In this directory it is assumed that the following files and directories are
# included: main.c, unt folder
OUTPUT_DIR = './tests'
# All libraries
ALL_LIBS = ['CMC', 'SAC', 'TSC']
# Directory mapping
DIR_MAP = {'HEADER': 'include', 'SOURCE': 'src'}
# File extension mapping
EXT_MAP = {'HEADER': 'h', 'SOURCE': 'c'}
# Where compilation objects will be outputted
BUILD_DIR = f'{OUTPUT_DIR}/build'
# const
INCLUDE_DIR = f"{OUTPUT_DIR}/{DIR_MAP['HEADER']}"
# const
SRC_DIR = f"{OUTPUT_DIR}/{DIR_MAP['SOURCE']}"
# Where object files .o go
OBJ_DIR = f'{BUILD_DIR}/obj'
# The name of the main test executable
TEST_EXE = f'{OUTPUT_DIR}/main.exe'
# Compiler
# Compilation
CC = 'gcc' CC = 'gcc'
# Compilation Flags
CFLAGS = ['-Wall', '-Werror']
# Coverage Flags
CVFLAGS = ['--coverage', '-O0']
# Include to the main Library
# const
INCLUDE = '-I ./src' INCLUDE = '-I ./src'
# Include to the test file headers
# const
TINCLUDE = f'-I {INCLUDE_DIR}'
# Macro expansion
# -E Only preprocessor # -E Only preprocessor
# -P No linemarkers # -P No linemarkers
# -C Keep comments, except those inside macros (for UNIQUE_FLAG) # -C Keep comments, except those inside macros (for UNIQUE_FLAG)
FLAGS = '-E -P -C' # const
EXPAND_FLAGS = '-E -P -C'
# Used to delimiter where the actual code starts and ends # Used to delimiter where the actual code starts and ends. Used by regex.
# Used by regex # Needs to be a valid C comment.
# Needs to be a valid C comment
UNIQUE_FLAG = '// C_MACRO_COLLECTIONS_CODE' UNIQUE_FLAG = '// C_MACRO_COLLECTIONS_CODE'
# Temporary file used to expand the macros # Temporary file used to expand the macros
TMP_FILE = './main.c' TMP_FILE = './main.c'
# Output directory # Just a realy helpfull overview
# In this directory it is assumed that the following files and folders are CONFIG = f'''Directory Settings
# included: main.c, unt folder OUTPUT_DIR = {OUTPUT_DIR}
OUTPUT_DIR = './tests' ALL_LIBS = {ALL_LIBS}
DIR_MAP = {DIR_MAP}
EXT_MAP = {EXT_MAP}
BUILD_DIR = {BUILD_DIR}
INCLUDE_DIR = {INCLUDE_DIR}
SRC_DIR = {SRC_DIR}
OBJ_DIR = {OBJ_DIR}
Compiler Settings
CC = {CC}
CFLAGS = {CFLAGS}
CVFLAGS = {CVFLAGS}
INCLUDE = {INCLUDE}
TINCLUDE = {TINCLUDE}
Macro Expansion
EXPAND_FLAGS = {EXPAND_FLAGS}
UNIQUE_FLAG = {UNIQUE_FLAG}
TMP_FILE = {TMP_FILE}'''
# All libraries
ALL_LIBS = ['CMC', 'SAC', 'TSC']
# Directory mapping # All collections that can be used for testing
DIR_MAP = {'HEADER': 'include', 'SOURCE': 'src'} COLLECTIONS = [
# File extension mapping
EXT_MAP = {'HEADER': 'h', 'SOURCE': 'c'}
collections = [
# header, library, collection, pfx, sname, size, key, val # header, library, collection, pfx, sname, size, key, val
{'h': '"cmc/bitset.h"', 'LIB': 'CMC', 'COLLECTION': 'BITSET', 'PFX': 'bs', 'SNAME': 'bitset', 'SIZE': '', 'K': '', 'V': '' }, {'h': '"cmc/bitset.h"', 'LIB': 'CMC', 'COLLECTION': 'BITSET', 'PFX': 'bs', 'SNAME': 'bitset', 'SIZE': '', 'K': '', 'V': '' },
{'h': '"cmc/deque.h"', 'LIB': 'CMC', 'COLLECTION': 'DEQUE', 'PFX': 'd', 'SNAME': 'deque', 'SIZE': '', 'K': '', 'V': 'size_t'}, {'h': '"cmc/deque.h"', 'LIB': 'CMC', 'COLLECTION': 'DEQUE', 'PFX': 'd', 'SNAME': 'deque', 'SIZE': '', 'K': '', 'V': 'size_t'},
@@ -61,164 +114,279 @@ collections = [
{'h': '"cmc/treeset.h"', 'LIB': 'CMC', 'COLLECTION': 'TREESET', 'PFX': 'ts', 'SNAME': 'treeset', 'SIZE': '', 'K': '', 'V': 'size_t'} {'h': '"cmc/treeset.h"', 'LIB': 'CMC', 'COLLECTION': 'TREESET', 'PFX': 'ts', 'SNAME': 'treeset', 'SIZE': '', 'K': '', 'V': 'size_t'}
] ]
# Create output directory
assert_dir(OUTPUT_DIR)
# include and src def execute_command(commands: List[Text]):
for dir in DIR_MAP.values(): print(' '.join(commands))
assert_dir(f'{OUTPUT_DIR}/{dir}') subprocess.run(commands, shell=True)
# For each library, create a folder for include and src
for lib in ALL_LIBS: def assert_executable(program: Text):
'''
Asserts that a given program is installed and available in PATH
'''
if shutil.which(program) is None:
raise Exception(f'The required executable {program} was not found in your path')
def assert_dir(dir: Text):
'''
Given a string 'dir' that is a path to a directory, make sure that it exists.
'''
if not os.path.exists(dir):
os.makedirs(dir)
def assert_structure():
'''
Git might not commit some required directories. This function asserts that they exist.
'''
assert_dir(OUTPUT_DIR)
# include and src
for dir in DIR_MAP.values(): for dir in DIR_MAP.values():
assert_dir(f'{OUTPUT_DIR}/{dir}/{lib.lower()}') assert_dir(f'{OUTPUT_DIR}/{dir}')
# Generate Header and Source separately # For each library, create a directory for include and src
for ftype in ['HEADER', 'SOURCE']: for lib in ALL_LIBS:
for data in collections: for dir in DIR_MAP.values():
file = open(TMP_FILE, 'w') assert_dir(f'{OUTPUT_DIR}/{dir}/{lib.lower()}')
file.write( assert_dir(BUILD_DIR)
f''' assert_dir(OBJ_DIR)
#include "macro_collections.h"
{UNIQUE_FLAG} for lib in ALL_LIBS:
assert_dir(f'{OBJ_DIR}/{lib.lower()}')
C_MACRO_COLLECTIONS_ALL_{ftype}({data['LIB']}, {data['COLLECTION']}, ({', '.join([data['PFX'], data['SNAME'], data['SIZE'], data['K'], data['V']])}))
{UNIQUE_FLAG} def clean_build():
''') execute_command(['find', BUILD_DIR, '-type', 'f', '-delete'])
execute_command(['find', '.', '-iname', '*.gcov', '-type', 'f', '-delete'])
file.flush()
file.close()
result = subprocess.getoutput(f'{CC} {FLAGS} {INCLUDE} {TMP_FILE}') def expand_code():
# Generate Header and Source separately
for ftype in ['HEADER', 'SOURCE']:
for data in COLLECTIONS:
file = open(TMP_FILE, 'w')
# (?s) makes '.' match anything, even '\n'
match = re.search(fr'(?s){UNIQUE_FLAG}(?P<code>.+){UNIQUE_FLAG}', result)
if match is None:
os.remove(TMP_FILE)
print('Didn\'t match FLAG. Probably because compilation failed.', file=sys.stderr)
exit(1)
file = open(f'{OUTPUT_DIR}/{DIR_MAP[ftype]}/{data["LIB"].lower()}/{data["SNAME"]}.{EXT_MAP[ftype]}', 'w')
if ftype == 'HEADER':
file.write( file.write(
f''' f'''
#ifndef CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H
#define CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H
#include "macro_collections.h" #include "macro_collections.h"
{match.group('code')}
#endif /* CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H */ {UNIQUE_FLAG}
''')
else:
file.write(
f'''
#include {data["h"]}
{match.group("code")} C_MACRO_COLLECTIONS_ALL_{ftype}({data['LIB']}, {data['COLLECTION']}, ({', '.join([data['PFX'], data['SNAME'], data['SIZE'], data['K'], data['V']])}))
{UNIQUE_FLAG}
''') ''')
file.flush() file.flush()
file.close() file.close()
print(f'Generated {data["h"]: >20} -> {OUTPUT_DIR}/{DIR_MAP[ftype]}/{data["LIB"].lower()}/{data["SNAME"]}.{EXT_MAP[ftype]}') result = subprocess.getoutput(f'{CC} {EXPAND_FLAGS} {INCLUDE} {TMP_FILE}')
os.remove(TMP_FILE) # (?s) makes '.' match anything, even '\n'
match = re.search(fr'(?s){UNIQUE_FLAG}(?P<code>.+){UNIQUE_FLAG}', result)
# Format all files if match is None:
from shutil import which os.remove(TMP_FILE)
print('Didn\'t match FLAG. Probably because compilation failed.', file=sys.stderr)
exit(1)
if which('clang-format') is not None: file = open(f'{OUTPUT_DIR}/{DIR_MAP[ftype]}/{data["LIB"].lower()}/{data["SNAME"]}.{EXT_MAP[ftype]}', 'w')
print('clang-format found. Formating files...')
if ftype == 'HEADER':
file.write(
f'''
#ifndef CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H
#define CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H
#include "macro_collections.h"
{match.group('code')}
#endif /* CMC_{data['LIB']}_{data['COLLECTION']}_TEST_H */
''')
else:
file.write(
f'''
#include {data["h"]}
{match.group("code")}
''')
file.flush()
file.close()
print(f'Generated {data["h"]: >20} -> {OUTPUT_DIR}/{DIR_MAP[ftype]}/{data["LIB"].lower()}/{data["SNAME"]}.{EXT_MAP[ftype]}')
os.remove(TMP_FILE)
def format_expand():
cmd = ['clang-format', '--style=file', '--verbose', '-i'] cmd = ['clang-format', '--style=file', '--verbose', '-i']
dirs_to_format = [f'{OUTPUT_DIR}/{DIR_MAP[ftype]}/{lib.lower()}/*.{EXT_MAP[ftype]}' for ftype in DIR_MAP.keys() for lib in ALL_LIBS] dirs_to_format = [f'{OUTPUT_DIR}/{DIR_MAP[ftype]}/{lib.lower()}/*.{EXT_MAP[ftype]}' for ftype in DIR_MAP.keys() for lib in ALL_LIBS]
cmd.extend(dirs_to_format) cmd.extend(dirs_to_format)
subprocess.call(cmd) execute_command(cmd)
else:
print('clang-format not found. Skipping code formatting...')
# Makefile
# Contains many usefull things dealing with tests, code coverage and formatting
BUILD_DIR = f'{OUTPUT_DIR}/build'
OBJ_DIR = f'{BUILD_DIR}/obj'
INCLUDE_DIR = f"{OUTPUT_DIR}/{DIR_MAP['HEADER']}"
SRC_DIR = f"{OUTPUT_DIR}/{DIR_MAP['SOURCE']}"
assert_dir(BUILD_DIR) def format_code(source: bool, tests: bool):
assert_dir(OBJ_DIR) if source:
execute_command(['find', './src/', '-iname', '*.h', '|', 'xargs', 'clang-format', '--style=file', '--verbose', '-i'])
if tests:
execute_command(['find', './tests/', '-iname', '*.c', '-o', '-iname', '*.h', '|', 'xargs', 'clang-format', '--style=file', '--verbose', '-i'])
for lib in ALL_LIBS:
assert_dir(f'{OBJ_DIR}/{lib.lower()}')
print('Updating Makefile...') def build_tests(with_coverage: bool):
cflags = CFLAGS.copy()
file = open(f'Makefile', 'w') if with_coverage:
cflags += CVFLAGS
file.write(f'''# This file was generated by a Python script print("WIP")
CC = {CC}
CFLAGS = -std=c11 -Wall -Wextra
CFLAGS += -Wno-missing-braces -DCMC_TEST_COLOR
CVFLAGS = --coverage -O0 -g3
INCLUDE = {INCLUDE_DIR} -I src
# Runs the script to update tests, run all tests and code coverage
all: script coverage
tests: script build def run_tests():
\t{OUTPUT_DIR}/main.exe execute_command([TEST_EXE])
# Like build but with coverage
coverage: {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in collections])} {OBJ_DIR}/main.o
\t$(CC) $^ -o {OUTPUT_DIR}/main.exe $(CFLAGS) $(CVFLAGS)
\t{OUTPUT_DIR}/main.exe
\tgcov {OBJ_DIR}/main.o {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in collections])}
# Run without coverage def unused():
run: build # Makefile
\t{OUTPUT_DIR}/main.exe # Contains many usefull things dealing with tests, code coverage and formatting
script: print('Updating Makefile...')
\tpython autogen.py
clean: file = open(f'Makefile', 'w')
\tfind {BUILD_DIR} -type f -delete
\trm *.gcov
# No coverage build file.write(f'''# This file was generated by a Python script
build: {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in collections])} {OBJ_DIR}/main.o CC = {CC}
\t$(CC) $^ -o {OUTPUT_DIR}/main.exe $(CFLAGS) CFLAGS = -std=c11 -Wall -Wextra
CFLAGS += -Wno-missing-braces -DCMC_TEST_COLOR
CVFLAGS = --coverage -O0 -g3
INCLUDE = {INCLUDE_DIR} -I src
{OBJ_DIR}/main.o: {OUTPUT_DIR}/main.c # Runs the script to update tests, run all tests and code coverage
\t$(CC) -c $^ -o $@ -I $(INCLUDE) $(CFLAGS) all: script coverage
''')
# Code formatting tests: script build
file.write(''' \t{OUTPUT_DIR}/main.exe
fmt_all: fmt_src fmt_tests
fmt_src: FORCE # Like build but with coverage
find ./src/ -iname *.h | xargs clang-format --style=file --verbose -i coverage: {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in COLLECTIONS])} {OBJ_DIR}/main.o
\t$(CC) $^ -o {OUTPUT_DIR}/main.exe $(CFLAGS) $(CVFLAGS)
\t{OUTPUT_DIR}/main.exe
\tgcov {OBJ_DIR}/main.o {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in COLLECTIONS])}
fmt_tests: FORCE # Run without coverage
find ./tests/ -iname *.c -o -iname *.h | xargs clang-format --style=file --verbose -i run: build
\t{OUTPUT_DIR}/main.exe
.PHONY FORCE: script:
\tpython autogen.py
''') clean:
\tfind {BUILD_DIR} -type f -delete
\trm *.gcov
for data in collections: # No coverage build
file.write(f''' build: {' '.join([f'{OBJ_DIR}/{data["LIB"].lower()}/{data["SNAME"]}.o' for data in COLLECTIONS])} {OBJ_DIR}/main.o
{OBJ_DIR}/{data['LIB'].lower()}/{data['SNAME']}.o: {SRC_DIR}/{data['LIB'].lower()}/{data['SNAME']}.c {INCLUDE_DIR}/{data['LIB'].lower()}/{data['SNAME']}.h \t$(CC) $^ -o {OUTPUT_DIR}/main.exe $(CFLAGS)
\t$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)
''')
file.close() {OBJ_DIR}/main.o: {OUTPUT_DIR}/main.c
\t$(CC) -c $^ -o $@ -I $(INCLUDE) $(CFLAGS)
''')
print('\nDone') for data in COLLECTIONS:
file.write(f'''
{OBJ_DIR}/{data['LIB'].lower()}/{data['SNAME']}.o: {SRC_DIR}/{data['LIB'].lower()}/{data['SNAME']}.c {INCLUDE_DIR}/{data['LIB'].lower()}/{data['SNAME']}.h
\t$(CC) -c $< -o $@ -I $(INCLUDE) $(CFLAGS) $(CVFLAGS)
''')
file.close()
print('\nDone')
if __name__ == '__main__':
p = argparse.ArgumentParser('autogen.py', usage='%(prog)s [options]')
p.add_argument('-sc', '--show-config',
help='Displays the current configuration',
action='store_true',
dest='config')
tests = p.add_argument_group('tests', 'For dealing with tests')
tests.add_argument('-c', '--clean',
help='Cleans all build objects',
default=False,
action='store_true',
dest='clean')
tests.add_argument('-e', '--expand',
help='Expands the header and source files',
default=False,
action='store_true',
dest='expand')
tests.add_argument('-nf', '--no-format',
help='Does not format the output of expand. Can be used when you might not have clang-format',
default=False,
action='store_true',
dest='noformat')
tests.add_argument('-r', '--run',
help='Runs tests without code coverage',
default=False,
action='store_true',
dest='run')
tests.add_argument('-cv', '--coverage',
help='Compiles and runs tests with code coverage',
default=False,
action='store_true',
dest='coverage')
tests.add_argument('-rr', '--rerun',
help='Builds tests without code coverage and runs it',
default=False,
action='store_true',
dest='rerun')
source = p.add_argument_group('source', 'For dealing with the source files and formatting')
source.add_argument('-fs', '--format-source',
help='Format the source code',
default=False,
action='store_true',
dest='fmt_source')
source.add_argument('-ft', '--format-tests',
help='Format tests files',
default=False,
action='store_true',
dest='fmt_tests')
args = p.parse_args()
if args.config:
print(CONFIG)
exit(0)
if args.clean:
clean_build()
assert_structure()
assert_executable(CC)
if args.expand:
expand_code()
if not args.noformat:
assert_executable('clang-format')
format_expand()
if args.fmt_source or args.fmt_tests:
assert_executable('find')
assert_executable('xargs')
format_code(args.fmt_source, args.fmt_tests)
if args.rerun:
build_tests(False)
run_tests()
elif args.run:
run_tests()
elif args.coverage:
build_tests(True)
run_tests()
+4 -2
View File
@@ -323,7 +323,8 @@ static inline size_t cmc_float_hash(float e)
if (e == 0.0) if (e == 0.0)
e = 0.0; // if e == -0.0, now it is 0.0 e = 0.0; // if e == -0.0, now it is 0.0
union { union
{
float a; float a;
size_t b; size_t b;
} x; } x;
@@ -342,7 +343,8 @@ static inline size_t cmc_double_hash(double e)
if (e == 0.0) if (e == 0.0)
e = 0.0; // if e == -0.0, now it is 0.0 e = 0.0; // if e == -0.0, now it is 0.0
union { union
{
double a; double a;
size_t b; size_t b;
} x; } x;
+2 -2
View File
@@ -1,5 +1,5 @@
#include <stdio.h>
#include <inttypes.h> #include <inttypes.h>
#include <stdio.h>
#include "unt/cmc/bitset.h" #include "unt/cmc/bitset.h"
#include "unt/cmc/deque.h" #include "unt/cmc/deque.h"
@@ -20,8 +20,8 @@
#include "unt/utl/foreach.h" #include "unt/utl/foreach.h"
#include "utl/timer.h"
#include "utl/assert.h" #include "utl/assert.h"
#include "utl/timer.h"
#include "./unt/utl.h" #include "./unt/utl.h"
+2 -2
View File
@@ -277,7 +277,7 @@ size_t hm_get(struct hashmap *_map_, size_t key)
if (hm_empty(_map_)) if (hm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return (size_t){ 0 };
} }
struct hashmap_entry *entry = hm_impl_get_entry(_map_, key); struct hashmap_entry *entry = hm_impl_get_entry(_map_, key);
if (!entry) if (!entry)
@@ -296,7 +296,7 @@ size_t *hm_get_ref(struct hashmap *_map_, size_t key)
if (hm_empty(_map_)) if (hm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return ((void *)0);
} }
struct hashmap_entry *entry = hm_impl_get_entry(_map_, key); struct hashmap_entry *entry = hm_impl_get_entry(_map_, key);
if (!entry) if (!entry)
+2 -2
View File
@@ -423,7 +423,7 @@ size_t hmm_get(struct hashmultimap *_map_, size_t key)
if (hmm_empty(_map_)) if (hmm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return (size_t){ 0 };
} }
struct hashmultimap_entry *entry = hmm_impl_get_entry(_map_, key); struct hashmultimap_entry *entry = hmm_impl_get_entry(_map_, key);
if (!entry) if (!entry)
@@ -442,7 +442,7 @@ size_t *hmm_get_ref(struct hashmultimap *_map_, size_t key)
if (hmm_empty(_map_)) if (hmm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return ((void *)0);
} }
struct hashmultimap_entry *entry = hmm_impl_get_entry(_map_, key); struct hashmultimap_entry *entry = hmm_impl_get_entry(_map_, key);
if (!entry) if (!entry)
+2 -2
View File
@@ -339,7 +339,7 @@ size_t tm_get(struct treemap *_map_, size_t key)
if (tm_empty(_map_)) if (tm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return (size_t){ 0 };
} }
struct treemap_node *node = tm_impl_get_node(_map_, key); struct treemap_node *node = tm_impl_get_node(_map_, key);
if (!node) if (!node)
@@ -358,7 +358,7 @@ size_t *tm_get_ref(struct treemap *_map_, size_t key)
if (tm_empty(_map_)) if (tm_empty(_map_))
{ {
_map_->flag = CMC_FLAG_EMPTY; _map_->flag = CMC_FLAG_EMPTY;
return 0; return ((void *)0);
} }
struct treemap_node *node = tm_impl_get_node(_map_, key); struct treemap_node *node = tm_impl_get_node(_map_, key);
if (!node) if (!node)
+129 -128
View File
@@ -17,142 +17,143 @@ typedef enum enum_e
NONE = 0 NONE = 0
} enum_t; } enum_t;
typedef union union_u { typedef union union_u
{
enum enum_e a; enum enum_e a;
struct struct_s b; struct struct_s b;
double c; double c;
char *d; char *d;
} union_t; } union_t;
typedef int (func_t)(int, double, char *); typedef int(func_t)(int, double, char *);
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d0, deque0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d0, deque0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm0, hashbidimap0, , struct_t *, struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm0, hashbidimap0, , struct_t *, struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm0, hashmap0, , struct_t *, struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm0, hashmap0, , struct_t *, struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm0, hashmultimap0, , struct_t *, struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm0, hashmultimap0, , struct_t *, struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms0, hashmultiset0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms0, hashmultiset0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs0, hashset0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs0, hashset0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h0, heap0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h0, heap0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih0, intervalheap0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih0, intervalheap0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll0, linkedlist0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll0, linkedlist0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l0, list0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l0, list0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q0, queue0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q0, queue0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl0, sortedlist0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl0, sortedlist0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s0, stack0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s0, stack0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm0, treemap0, , struct_t *, struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm0, treemap0, , struct_t *, struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts0, treeset0, , , struct_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts0, treeset0, , , struct_t *))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d1, deque1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d1, deque1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm1, hashbidimap1, , struct_t, struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm1, hashbidimap1, , struct_t, struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm1, hashmap1, , struct_t, struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm1, hashmap1, , struct_t, struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm1, hashmultimap1, , struct_t, struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm1, hashmultimap1, , struct_t, struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms1, hashmultiset1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms1, hashmultiset1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs1, hashset1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs1, hashset1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h1, heap1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h1, heap1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih1, intervalheap1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih1, intervalheap1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll1, linkedlist1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll1, linkedlist1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l1, list1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l1, list1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q1, queue1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q1, queue1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl1, sortedlist1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl1, sortedlist1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s1, stack1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s1, stack1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm1, treemap1, , struct_t, struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm1, treemap1, , struct_t, struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts1, treeset1, , , struct_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts1, treeset1, , , struct_t))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d2, deque2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d2, deque2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm2, hashbidimap2, , int, int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm2, hashbidimap2, , int, int))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm2, hashmap2, , int, int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm2, hashmap2, , int, int))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm2, hashmultimap2, , int, int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm2, hashmultimap2, , int, int))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms2, hashmultiset2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms2, hashmultiset2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs2, hashset2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs2, hashset2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h2, heap2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h2, heap2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih2, intervalheap2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih2, intervalheap2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll2, linkedlist2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll2, linkedlist2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l2, list2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l2, list2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q2, queue2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q2, queue2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl2, sortedlist2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl2, sortedlist2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s2, stack2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s2, stack2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm2, treemap2, , int, int)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm2, treemap2, , int, int))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts2, treeset2, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts2, treeset2, , , int))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d3, deque3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d3, deque3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm3, hashbidimap3, , int *, int *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm3, hashbidimap3, , int *, int *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm3, hashmap3, , int *, int *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm3, hashmap3, , int *, int *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm3, hashmultimap3, , int *, int *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm3, hashmultimap3, , int *, int *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms3, hashmultiset3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms3, hashmultiset3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs3, hashset3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs3, hashset3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h3, heap3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h3, heap3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih3, intervalheap3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih3, intervalheap3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll3, linkedlist3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll3, linkedlist3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l3, list3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l3, list3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q3, queue3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q3, queue3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl3, sortedlist3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl3, sortedlist3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s3, stack3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s3, stack3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm3, treemap3, , int *, int *)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm3, treemap3, , int *, int *))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts3, treeset3, , , int *)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts3, treeset3, , , int *))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d4, deque4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d4, deque4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm4, hashbidimap4, , enum_t, enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm4, hashbidimap4, , enum_t, enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm4, hashmap4, , enum_t, enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm4, hashmap4, , enum_t, enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm4, hashmultimap4, , enum_t, enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm4, hashmultimap4, , enum_t, enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms4, hashmultiset4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms4, hashmultiset4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs4, hashset4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs4, hashset4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h4, heap4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h4, heap4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih4, intervalheap4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih4, intervalheap4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll4, linkedlist4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll4, linkedlist4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l4, list4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l4, list4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q4, queue4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q4, queue4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl4, sortedlist4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl4, sortedlist4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s4, stack4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s4, stack4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm4, treemap4, , enum_t, enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm4, treemap4, , enum_t, enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts4, treeset4, , , enum_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts4, treeset4, , , enum_t))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d5, deque5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d5, deque5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm5, hashbidimap5, , enum_t *, enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm5, hashbidimap5, , enum_t *, enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm5, hashmap5, , enum_t *, enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm5, hashmap5, , enum_t *, enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm5, hashmultimap5, , enum_t *, enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm5, hashmultimap5, , enum_t *, enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms5, hashmultiset5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms5, hashmultiset5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs5, hashset5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs5, hashset5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h5, heap5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h5, heap5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih5, intervalheap5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih5, intervalheap5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll5, linkedlist5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll5, linkedlist5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l5, list5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l5, list5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q5, queue5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q5, queue5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl5, sortedlist5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl5, sortedlist5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s5, stack5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s5, stack5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm5, treemap5, , enum_t *, enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm5, treemap5, , enum_t *, enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts5, treeset5, , , enum_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts5, treeset5, , , enum_t *))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d6, deque6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d6, deque6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm6, hashbidimap6, , union_t, union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm6, hashbidimap6, , union_t, union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm6, hashmap6, , union_t, union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm6, hashmap6, , union_t, union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm6, hashmultimap6, , union_t, union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm6, hashmultimap6, , union_t, union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms6, hashmultiset6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms6, hashmultiset6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs6, hashset6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs6, hashset6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h6, heap6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h6, heap6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih6, intervalheap6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih6, intervalheap6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll6, linkedlist6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll6, linkedlist6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l6, list6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l6, list6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q6, queue6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q6, queue6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl6, sortedlist6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl6, sortedlist6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s6, stack6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s6, stack6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm6, treemap6, , union_t, union_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm6, treemap6, , union_t, union_t))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts6, treeset6, , , union_t)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts6, treeset6, , , union_t))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d7, deque7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d7, deque7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm7, hashbidimap7, , union_t *, union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm7, hashbidimap7, , union_t *, union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm7, hashmap7, , union_t *, union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm7, hashmap7, , union_t *, union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm7, hashmultimap7, , union_t *, union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm7, hashmultimap7, , union_t *, union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms7, hashmultiset7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms7, hashmultiset7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs7, hashset7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs7, hashset7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h7, heap7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h7, heap7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih7, intervalheap7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih7, intervalheap7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll7, linkedlist7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll7, linkedlist7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l7, list7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l7, list7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q7, queue7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q7, queue7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl7, sortedlist7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl7, sortedlist7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s7, stack7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s7, stack7, , , union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm7, treemap7, , union_t *, union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm7, treemap7, , union_t *, union_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts7, treeset7, , , union_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts7, treeset7, , , union_t *))
// C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d8, deque8, , , func_t)) // C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d8, deque8, , , func_t))
// C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm8, hashbidimap8, , func_t, func_t)) // C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm8, hashbidimap8, , func_t, func_t))
@@ -170,21 +171,21 @@ C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts7, treeset7, , , un
// C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm8, treemap8, , func_t, func_t)) // C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm8, treemap8, , func_t, func_t))
// C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts8, treeset8, , , func_t)) // C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts8, treeset8, , , func_t))
C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d9, deque9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, (d9, deque9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm9, hashbidimap9, , func_t *, func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm9, hashbidimap9, , func_t *, func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm9, hashmap9, , func_t *, func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, (hm9, hashmap9, , func_t *, func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm9, hashmultimap9, , func_t *, func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTIMAP, (hmm9, hashmultimap9, , func_t *, func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms9, hashmultiset9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMULTISET, (hms9, hashmultiset9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, ( hs9, hashset9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HASHSET, (hs9, hashset9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, HEAP, ( h9, heap9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, HEAP, (h9, heap9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, ( ih9, intervalheap9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, INTERVALHEAP, (ih9, intervalheap9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, ( ll9, linkedlist9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LINKEDLIST, (ll9, linkedlist9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, LIST, ( l9, list9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, LIST, (l9, list9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, ( q9, queue9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, QUEUE, (q9, queue9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, ( sl9, sortedlist9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, SORTEDLIST, (sl9, sortedlist9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, STACK, ( s9, stack9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, STACK, (s9, stack9, , , func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, ( tm9, treemap9, , func_t *, func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREEMAP, (tm9, treemap9, , func_t *, func_t *))
C_MACRO_COLLECTIONS_ALL(CMC, TREESET, ( ts9, treeset9, , , func_t *)) C_MACRO_COLLECTIONS_ALL(CMC, TREESET, (ts9, treeset9, , , func_t *))
int main(void) int main(void)
{ {
+2 -4
View File
@@ -110,8 +110,7 @@ CMC_CREATE_UNIT(CMCDeque, true, {
}); });
CMC_CREATE_TEST(PFX##_init_custom(), { CMC_CREATE_TEST(PFX##_init_custom(), {
struct deque d = struct deque d = d_init_custom(1000000, d_fval, d_alloc_node, callbacks);
d_init_custom(1000000, d_fval, d_alloc_node, callbacks);
cmc_assert_not_equals(ptr, NULL, d.buffer); cmc_assert_not_equals(ptr, NULL, d.buffer);
cmc_assert_equals(size_t, 1000000, d.capacity); cmc_assert_equals(size_t, 1000000, d.capacity);
@@ -247,8 +246,7 @@ CMC_CREATE_UNIT(CMCDeque, true, {
cmc_assert_equals(size_t, 1000, d_count(&d)); cmc_assert_equals(size_t, 1000, d_count(&d));
size_t sum = 0; size_t sum = 0;
for (size_t i = d.front, j = 0; j < d.count; for (size_t i = d.front, j = 0; j < d.count; i = (i + 1) % d.capacity, j++)
i = (i + 1) % d.capacity, j++)
sum += d.buffer[i]; sum += d.buffer[i];
cmc_assert_equals(size_t, 500500, sum); cmc_assert_equals(size_t, 500500, sum);
+2 -4
View File
@@ -130,8 +130,7 @@ CMC_CREATE_UNIT(CMCHashMap, true, {
}); });
CMC_CREATE_TEST(PFX##_init_custom(), { CMC_CREATE_TEST(PFX##_init_custom(), {
struct hashmap map = hm_init_custom(943722, 0.6, hm_fkey, hm_fval, struct hashmap map = hm_init_custom(943722, 0.6, hm_fkey, hm_fval, hm_alloc_node, callbacks);
hm_alloc_node, callbacks);
cmc_assert_not_equals(ptr, NULL, map.buffer); cmc_assert_not_equals(ptr, NULL, map.buffer);
cmc_assert_equals(size_t, 0, map.count); cmc_assert_equals(size_t, 0, map.count);
@@ -227,8 +226,7 @@ CMC_CREATE_UNIT(CMCHashMap, true, {
CMC_CREATE_TEST(PFX##_release(), { CMC_CREATE_TEST(PFX##_release(), {
k_total_free = 0; k_total_free = 0;
v_total_free = 0; v_total_free = 0;
struct hashmap map = struct hashmap map = hm_init(100, 0.6, hm_fkey_counter, hm_fval_counter);
hm_init(100, 0.6, hm_fkey_counter, hm_fval_counter);
cmc_assert_not_equals(ptr, NULL, map.buffer); cmc_assert_not_equals(ptr, NULL, map.buffer);