Merge pull request #19 from usr42/master

Refactoring and bugfix
This commit is contained in:
Mike Long
2017-01-20 10:22:32 +01:00
committed by GitHub
9 changed files with 95 additions and 147 deletions

View File

@@ -408,6 +408,23 @@ def generate_arg_sequence(args, prefix, do_reverse, joinstr)
if do_reverse then fmap.reverse.join(joinstr) else fmap.join(", ") end if do_reverse then fmap.reverse.join(joinstr) else fmap.join(", ") end
end end
def counting_macro_instance(type, vararg = :non_vararg, prefix = "")
appendix = (vararg == :vararg) ? "_VARARG" : ""
minus_count = (type == :VOID) ? 1 : 2
<<-MACRO_COUNTING_INSTANCE
#define #{prefix}FAKE_#{type.to_s}_FUNC#{appendix}(...) \
#{prefix}FUNC_#{type.to_s}#{appendix}_(PP_NARG_MINUS#{minus_count}(__VA_ARGS__), __VA_ARGS__)
#define #{prefix}FUNC_#{type.to_s}#{appendix}_(N,...) \
#{prefix}FUNC_#{type.to_s}#{appendix}_N(N,__VA_ARGS__)
#define #{prefix}FUNC_#{type.to_s}#{appendix}_N(N,...) \
#{prefix}FAKE_#{type.to_s}_FUNC ## N#{" ## _VARARG" if vararg == :vararg}(__VA_ARGS__)
MACRO_COUNTING_INSTANCE
end
def output_macro_counting_shortcuts def output_macro_counting_shortcuts
putd <<-MACRO_COUNTING putd <<-MACRO_COUNTING
@@ -417,10 +434,10 @@ def output_macro_counting_shortcuts
#define PP_NARG_MINUS2_(...) \ #define PP_NARG_MINUS2_(...) \
PP_ARG_MINUS2_N(__VA_ARGS__) PP_ARG_MINUS2_N(__VA_ARGS__)
#define PP_ARG_MINUS2_N(returnVal, #{generate_arg_sequence($MAX_ARGS - 1, '_', false, ", ")}, N, ...) N #define PP_ARG_MINUS2_N(returnVal, #{generate_arg_sequence($MAX_ARGS, '_', false, ", ")}, N, ...) N
#define PP_RSEQ_N_MINUS2() \ #define PP_RSEQ_N_MINUS2() \
#{generate_arg_sequence($MAX_ARGS - 1, '', true, ',')} #{generate_arg_sequence($MAX_ARGS, '', true, ',')}
#define PP_NARG_MINUS1(...) \ #define PP_NARG_MINUS1(...) \
@@ -438,130 +455,24 @@ def output_macro_counting_shortcuts
/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
#define FAKE_VALUE_FUNC(...) \ #{counting_macro_instance(:VALUE)}
FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) #{counting_macro_instance(:VOID)}
#{counting_macro_instance(:VALUE, :vararg)}
#define FUNC_VALUE_(N,...) \ #{counting_macro_instance(:VOID, :vararg)}
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__)
#define FUNC_VOID_(N,...) \
FUNC_VOID_N(N,__VA_ARGS__)
#define FUNC_VOID_N(N,...) \
FAKE_VOID_FUNC ## N(__VA_ARGS__)
#define FAKE_VALUE_FUNC_VARARG(...) \
FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define FUNC_VALUE_VARARG_(N,...) \
FUNC_VALUE_VARARG_N(N,__VA_ARGS__)
#define FUNC_VALUE_VARARG_N(N,...) \
FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__)
#define FAKE_VOID_FUNC_VARARG(...) \
FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define FUNC_VOID_VARARG_(N,...) \
FUNC_VOID_VARARG_N(N,__VA_ARGS__)
#define FUNC_VOID_VARARG_N(N,...) \
FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */ /* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
#define DECLARE_FAKE_VALUE_FUNC(...) \ #{counting_macro_instance(:VALUE, :non_vararg, "DECLARE_")}
DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) #{counting_macro_instance(:VOID, :non_vararg, "DECLARE_")}
#{counting_macro_instance(:VALUE, :vararg, "DECLARE_")}
#define DEC_FUNC_VALUE_(N,...) \ #{counting_macro_instance(:VOID, :vararg, "DECLARE_")}
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 FAKE FUNCTIONS - PLACE IN SOURCE FILES */
#define DEFINE_FAKE_VALUE_FUNC(...) \ #{counting_macro_instance(:VALUE, :non_vararg, "DEFINE_")}
DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) #{counting_macro_instance(:VOID, :non_vararg, "DEFINE_")}
#{counting_macro_instance(:VALUE, :vararg, "DEFINE_")}
#define DEF_FUNC_VALUE_(N,...) \ #{counting_macro_instance(:VOID, :vararg, "DEFINE_")}
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 MACRO_COUNTING
end end

54
fff.h
View File

@@ -5816,9 +5816,9 @@ FFF_END_EXTERN_C \
#define PP_NARG_MINUS2_(...) PP_ARG_MINUS2_N(__VA_ARGS__) #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, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, 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() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
#define PP_NARG_MINUS1(...) PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1()) #define PP_NARG_MINUS1(...) PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
@@ -5864,63 +5864,65 @@ FFF_END_EXTERN_C \
/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */ /* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
#define DECLARE_FAKE_VALUE_FUNC(...) DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) #define DECLARE_FAKE_VALUE_FUNC(...) DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VALUE_(N,...) DEC_FUNC_VALUE_N(N,__VA_ARGS__) #define DECLARE_FUNC_VALUE_(N,...) DECLARE_FUNC_VALUE_N(N,__VA_ARGS__)
#define DEC_FUNC_VALUE_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) #define DECLARE_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 DECLARE_FAKE_VOID_FUNC(...) DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEC_FUNC_VOID_(N,...) DEC_FUNC_VOID_N(N, __VA_ARGS__) #define DECLARE_FUNC_VOID_(N,...) DECLARE_FUNC_VOID_N(N,__VA_ARGS__)
#define DEC_FUNC_VOID_N(N,...) DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__) #define DECLARE_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 DECLARE_FAKE_VALUE_FUNC_VARARG(...) DECLARE_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 DECLARE_FUNC_VALUE_VARARG_(N,...) DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__)
#define DEC_FUNC_VALUE_VARARG_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) #define DECLARE_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 DECLARE_FAKE_VOID_FUNC_VARARG(...) DECLARE_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 DECLARE_FUNC_VOID_VARARG_(N,...) DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__)
#define DEC_FUNC_VOID_VARARG_N(N,...) DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) #define DECLARE_FUNC_VOID_VARARG_N(N,...) DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */ /* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
#define DEFINE_FAKE_VALUE_FUNC(...) DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) #define DEFINE_FAKE_VALUE_FUNC(...) DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VALUE_(N,...) DEF_FUNC_VALUE_N(N,__VA_ARGS__) #define DEFINE_FUNC_VALUE_(N,...) DEFINE_FUNC_VALUE_N(N,__VA_ARGS__)
#define DEF_FUNC_VALUE_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) #define DEFINE_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 DEFINE_FAKE_VOID_FUNC(...) DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEF_FUNC_VOID_(N,...) DEF_FUNC_VOID_N(N,__VA_ARGS__) #define DEFINE_FUNC_VOID_(N,...) DEFINE_FUNC_VOID_N(N,__VA_ARGS__)
#define DEF_FUNC_VOID_N(N,...) DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) #define DEFINE_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 DEFINE_FAKE_VALUE_FUNC_VARARG(...) DEFINE_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 DEFINE_FUNC_VALUE_VARARG_(N,...) DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__)
#define DEF_FUNC_VALUE_VARARG_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) #define DEFINE_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 DEFINE_FAKE_VOID_FUNC_VARARG(...) DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
#define DEFINE_FUNC_VOID_VARARG_(N,...) DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__)
#define DEFINE_FUNC_VOID_VARARG_N(N,...) DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__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__)
#endif /* FAKE_FUNCTIONS */ #endif /* FAKE_FUNCTIONS */

View File

@@ -62,7 +62,7 @@ $(FFF_TEST_C_TARGET): $(FFF_TEST_C_OBJS)
$(FFF_TEST_GLOBAL_C_TARGET): $(FFF_TEST_GLOBAL_C_OBJS) $(FFF_TEST_GLOBAL_C_TARGET): $(FFF_TEST_GLOBAL_C_OBJS)
@echo 'Building target: $@' @echo 'Building target: $@'
@echo 'Invoking: GCC C++ Linker' @echo 'Invoking: GCC C++ Linker'
g++ -o "$(FFF_TEST_GLOBAL_C_TARGET)" $(FFF_TEST_GLOBAL_C_OBJS) $(LIBS) gcc -o "$(FFF_TEST_GLOBAL_C_TARGET)" $(FFF_TEST_GLOBAL_C_OBJS) $(LIBS) $(WRAP_LDFLAGS)
@echo 'Finished building target: $@' @echo 'Finished building target: $@'
@echo ' ' @echo ' '

View File

@@ -32,6 +32,7 @@ FAKE_VOID_FUNC_VARARG(voidfunc3var, char *, int, ...);
FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, char *, int, ...); FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, char *, int, ...);
FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t); FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
void setup() void setup()
{ {
@@ -104,6 +105,7 @@ int main()
RUN_TEST(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments); RUN_TEST(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments);
RUN_TEST(FFFTestSuite, can_capture_upto_20_arguments_correctly); RUN_TEST(FFFTestSuite, can_capture_upto_20_arguments_correctly);
RUN_TEST(FFFTestSuite, value_func_can_capture_upto_20_arguments_correctly);
printf("\n-------------\n"); printf("\n-------------\n");
printf("Complete\n"); printf("Complete\n");

View File

@@ -22,6 +22,7 @@ FAKE_VOID_FUNC(voidfunc2, char, char);
FAKE_VOID_FUNC(voidfunc1outparam, char *); FAKE_VOID_FUNC(voidfunc1outparam, char *);
FAKE_VALUE_FUNC(long, longfunc0); FAKE_VALUE_FUNC(long, longfunc0);
FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
class FFFTestSuite: public testing::Test class FFFTestSuite: public testing::Test
{ {

View File

@@ -70,6 +70,7 @@ int main()
RUN_TEST(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments); RUN_TEST(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments);
RUN_TEST(FFFTestSuite, can_capture_upto_20_arguments_correctly); RUN_TEST(FFFTestSuite, can_capture_upto_20_arguments_correctly);
RUN_TEST(FFFTestSuite, value_func_can_capture_upto_20_arguments_correctly);
printf("\n-------------\n"); printf("\n-------------\n");
printf("Complete\n"); printf("Complete\n");

View File

@@ -14,3 +14,4 @@ DEFINE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
DEFINE_FAKE_VALUE_FUNC(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 */ #endif /* __cplusplus */
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); 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);
DEFINE_FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);

View File

@@ -14,6 +14,7 @@ long longfunc0();
void voidfunc3var(const char *fmt, int argc, ...); void voidfunc3var(const char *fmt, int argc, ...);
int valuefunc3var(const char *fmt, int argc, ...); int valuefunc3var(const char *fmt, int argc, ...);
void voidfunc20(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int); void voidfunc20(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
int valuefunc20(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
enum MYBOOL { FALSE = 899, TRUE }; enum MYBOOL { FALSE = 899, TRUE };
struct MyStruct { struct MyStruct {
@@ -33,6 +34,7 @@ DECLARE_FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
DECLARE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...); DECLARE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
DECLARE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, 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); 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);
DECLARE_FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
#ifndef __cplusplus #ifndef __cplusplus
int strlcpy3(char* const, const char* const, const size_t); int strlcpy3(char* const, const char* const, const size_t);

View File

@@ -335,4 +335,32 @@ TEST_F(FFFTestSuite, can_capture_upto_20_arguments_correctly)
ASSERT_EQ(19, voidfunc20_fake.arg19_val); ASSERT_EQ(19, voidfunc20_fake.arg19_val);
} }
TEST_F(FFFTestSuite, value_func_can_capture_upto_20_arguments_correctly)
{
valuefunc20_fake.return_val = 42;
int return_val = valuefunc20(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);
ASSERT_EQ(42, return_val);
ASSERT_EQ(0, valuefunc20_fake.arg0_val);
ASSERT_EQ(1, valuefunc20_fake.arg1_val);
ASSERT_EQ(2, valuefunc20_fake.arg2_val);
ASSERT_EQ(3, valuefunc20_fake.arg3_val);
ASSERT_EQ(4, valuefunc20_fake.arg4_val);
ASSERT_EQ(5, valuefunc20_fake.arg5_val);
ASSERT_EQ(6, valuefunc20_fake.arg6_val);
ASSERT_EQ(7, valuefunc20_fake.arg7_val);
ASSERT_EQ(8, valuefunc20_fake.arg8_val);
ASSERT_EQ(9, valuefunc20_fake.arg9_val);
ASSERT_EQ(10, valuefunc20_fake.arg10_val);
ASSERT_EQ(11, valuefunc20_fake.arg11_val);
ASSERT_EQ(12, valuefunc20_fake.arg12_val);
ASSERT_EQ(13, valuefunc20_fake.arg13_val);
ASSERT_EQ(14, valuefunc20_fake.arg14_val);
ASSERT_EQ(15, valuefunc20_fake.arg15_val);
ASSERT_EQ(16, valuefunc20_fake.arg16_val);
ASSERT_EQ(17, valuefunc20_fake.arg17_val);
ASSERT_EQ(18, valuefunc20_fake.arg18_val);
ASSERT_EQ(19, valuefunc20_fake.arg19_val);
}