Added auto counting of parameters for declaration and definition of fake functions for global use. Adjusted unit tests of global functions

This commit is contained in:
mj
2016-12-18 15:03:15 +01:00
parent daff1fb430
commit 0cf75a229e
6 changed files with 248 additions and 2213 deletions

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
build/
*~
*.sublime-project
*.sublime-workspace

View File

@@ -423,17 +423,6 @@ def output_macro_counting_shortcuts
#{generate_arg_sequence($MAX_ARGS - 1, '', true, ',')}
#define FAKE_VALUE_FUNC(...) \
FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define FUNC_VALUE_(N,...) \
FUNC_VALUE_N(N,__VA_ARGS__)
#define FUNC_VALUE_N(N,...) \
FAKE_VALUE_FUNC ## N(__VA_ARGS__)
#define PP_NARG_MINUS1(...) \
PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
@@ -446,6 +435,19 @@ def output_macro_counting_shortcuts
#{generate_arg_sequence($MAX_ARGS, '', true, ',')}
/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
#define FAKE_VALUE_FUNC(...) \
FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define FUNC_VALUE_(N,...) \
FUNC_VALUE_N(N,__VA_ARGS__)
#define FUNC_VALUE_N(N,...) \
FAKE_VALUE_FUNC ## N(__VA_ARGS__)
#define FAKE_VOID_FUNC(...) \
FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
@@ -475,6 +477,92 @@ def output_macro_counting_shortcuts
#define FUNC_VOID_VARARG_N(N,...) \
FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
#define DECLARE_FAKE_VALUE_FUNC(...) \
DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VALUE_(N,...) \
DEC_FUNC_VALUE_N(N,__VA_ARGS__)
#define DEC_FUNC_VALUE_N(N,...) \
DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
#define DECLARE_FAKE_VOID_FUNC(...) \
DEC_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VOID_(N,...) \
DEC_FUNC_VOID_N(N, __VA_ARGS__)
#define DEC_FUNC_VOID_N(N,...) \
DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__)
#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) \
DEC_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VALUE_VARARG_(N,...) \
DEC_FUNC_VALUE_VARARG_N(N, __VA_ARGS__)
#define DEC_FUNC_VALUE_VARARG_N(N,...) \
DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__)
#define DECLARE_FAKE_VOID_FUNC_VARARG(...) \
DEC_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VOID_VARARG_(N,...) \
DEC_FUNC_VOID_VARARG_N(N, __VA_ARGS__)
#define DEC_FUNC_VOID_VARARG_N(N,...) \
DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
#define DEFINE_FAKE_VALUE_FUNC(...) \
DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VALUE_(N,...) \
DEF_FUNC_VALUE_N(N,__VA_ARGS__)
#define DEF_FUNC_VALUE_N(N,...) \
DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
#define DEFINE_FAKE_VOID_FUNC(...) \
DEF_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VOID_(N,...) \
DEF_FUNC_VOID_N(N,__VA_ARGS__)
#define DEF_FUNC_VOID_N(N,...) \
DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__)
#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) \
DEF_FUNC_VALUE_VARARG(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VALUE_VARARG(N,...) \
DEF_FUNC_VALUE_VARARG_N(N,__VA_ARGS__)
#define DEF_FUNC_VALUE_VARARG_N(N,...) \
DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__)
#define DEFINE_FAKE_VOID_FUNC_VARARG(...) \
DEF_FUNC_VOID_VARARG(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VOID_VARARG(N,...) \
DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__)
#define DEF_FUNC_VOID_VARARG_N(N,...) \
DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
MACRO_COUNTING
end

2258
fff.h

File diff suppressed because it is too large Load Diff

50
ruby_test.rb Normal file
View File

@@ -0,0 +1,50 @@
$MAX_ARGS = 20
#{ $MAX_ARGS.times {|arg_count| '_' + arg_count.to_s }
def generate_reverse_arg_sequence(args)
(0..args).flat_map {|i| ['_' + i.to_s]}.join(", ")
end
def generate_arg_sequence(args, prefix, do_reverse)
fmap = (0..args).flat_map {|i| [prefix + i.to_s]}
if do_reverse then fmap.reverse.join(", ") else fmap.join(", ") end
end
def output_macro_counting_shortcuts
puts <<-MACRO_COUNTING
#define PP_NARG_MINUS2(...) \
PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
#define PP_NARG_MINUS2_(...) \
PP_ARG_MINUS2_N(__VA_ARGS__)
#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, N, ...) N
#define PP_ARG_MINUS2_N(returnVal, #{ generate_arg_sequence($MAX_ARGS - 1, '_', false) }, N, ...) N
#define PP_RSEQ_N_MINUS2() \
19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
#define PP_RSEQ_N_MINUS2() \
#{ generate_arg_sequence($MAX_ARGS - 1, '', true) }
#define FAKE_VALUE_FUNC(...) \
FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define FUNC_VALUE_(N,...) \
FUNC_VALUE_N(N,__VA_ARGS__)
#define FUNC_VALUE_N(N,...) \
FAKE_VALUE_FUNC ## N(__VA_ARGS__)
MACRO_COUNTING
end
puts generate_arg_sequence($MAX_ARGS, '', false)
puts generate_arg_sequence($MAX_ARGS, '_', false)
puts generate_arg_sequence($MAX_ARGS, '', true)
puts generate_arg_sequence($MAX_ARGS, '_', true)
output_macro_counting_shortcuts

View File

@@ -1,15 +1,16 @@
#include "global_fakes.h"
#include <string.h> // for memcpy
DEFINE_FAKE_VOID_FUNC1(voidfunc1, int);
DEFINE_FAKE_VOID_FUNC2(voidfunc2, char, char);
DEFINE_FAKE_VOID_FUNC1(voidfunc1outparam, char *);
DEFINE_FAKE_VALUE_FUNC0(long, longfunc0);
DEFINE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
DEFINE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
DEFINE_FAKE_VOID_FUNC3_VARARG(voidfunc3var, const char *, int, ...);
DEFINE_FAKE_VALUE_FUNC3_VARARG(int, valuefunc3var, const char *, int, ...);
DEFINE_FAKE_VOID_FUNC(voidfunc1, int);
DEFINE_FAKE_VOID_FUNC(voidfunc2, char, char);
DEFINE_FAKE_VOID_FUNC(voidfunc1outparam, char *);
DEFINE_FAKE_VALUE_FUNC(long, longfunc0);
DEFINE_FAKE_VALUE_FUNC(enum MYBOOL, enumfunc0);
DEFINE_FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
DEFINE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
DEFINE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
#ifndef __cplusplus
DEFINE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
DEFINE_FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
#endif /* __cplusplus */
DEFINE_FAKE_VOID_FUNC20(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
DEFINE_FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);

View File

@@ -24,18 +24,18 @@ enum MYBOOL enumfunc();
struct MyStruct structfunc();
//// End Imaginary production code header file ///
DECLARE_FAKE_VOID_FUNC1(voidfunc1, int);
DECLARE_FAKE_VOID_FUNC2(voidfunc2, char, char);
DECLARE_FAKE_VOID_FUNC1(voidfunc1outparam, char *);
DECLARE_FAKE_VALUE_FUNC0(long, longfunc0);
DECLARE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
DECLARE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
DECLARE_FAKE_VOID_FUNC3_VARARG(voidfunc3var, const char *, int, ...);
DECLARE_FAKE_VALUE_FUNC3_VARARG(int, valuefunc3var, const char *, int, ...);
DECLARE_FAKE_VOID_FUNC20(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
DECLARE_FAKE_VOID_FUNC(voidfunc1, int);
DECLARE_FAKE_VOID_FUNC(voidfunc2, char, char);
DECLARE_FAKE_VOID_FUNC(voidfunc1outparam, char *);
DECLARE_FAKE_VALUE_FUNC(long, longfunc0);
DECLARE_FAKE_VALUE_FUNC(enum MYBOOL, enumfunc0);
DECLARE_FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
DECLARE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
DECLARE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
DECLARE_FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
#ifndef __cplusplus
int strlcpy3(char* const, const char* const, const size_t);
DECLARE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
DECLARE_FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
#endif /* __cplusplus */
#endif /* GLOBAL_FAKES_H_ */