Fix non-standard test feature test collection. I.e. make the feature

collection no rely on implementioned defined behaviour. And fix check
program handling of no-expression invocations vs expression invocations.
This commit is contained in:
Rene Rivera
2015-06-29 18:49:33 -05:00
parent 83ff76d745
commit 0f113b0871
115 changed files with 483 additions and 565 deletions
+2 -71
View File
@@ -1,76 +1,7 @@
/*
Copyright Rene Rivera 2011-2012
Copyright Rene Rivera 2011-2015
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define BOOST_PREDEF_INTERNAL_GENERATE_TESTS
typedef struct predef_info
{
unsigned tag;
const char * name;
const char * description;
unsigned value;
} predef_info;
predef_info first_predef_info = { 0x43210DEF , "-" , "-" , 0xFFFFFFFF };
#define BOOST_PREDEF_DECLARE_TEST(x,s) \
predef_info x##_predef_info = { 0x67890DEF , #x , s , x };
#include <boost/predef.h>
predef_info last_predef_info = { 0xFFFFFFFF , "-" , "-" , 0x43210DEF };
int predef_info_compare(const void * a, const void * b)
{
const predef_info ** i = (const predef_info **)a;
const predef_info ** j = (const predef_info **)b;
return strcmp((*i)->name,(*j)->name);
}
int main()
{
unsigned x = 0;
predef_info ** predefs = 0;
unsigned predef_count = 0;
unsigned * i = &first_predef_info.tag;
unsigned * e = &last_predef_info.tag;
while (i < e)
{
i += 1;
if (*i == 0x67890DEF)
{
predef_count += 1;
predefs = (predef_info**)realloc(predefs,predef_count*sizeof(predef_info*));
predefs[predef_count-1] = (predef_info*)i;
}
}
qsort(predefs,predef_count,sizeof(predef_info*),predef_info_compare);
puts("** Detected **");
for (x = 0; x < predef_count; ++x)
{
if (predefs[x]->value > 0)
printf("%s = %u (%u,%u,%u) | %s\n",
predefs[x]->name,
predefs[x]->value,
(predefs[x]->value/10000000)%100,
(predefs[x]->value/100000)%100,
(predefs[x]->value)%100000,
predefs[x]->description);
}
puts("** Not Detected **");
for (x = 0; x < predef_count; ++x)
{
if (predefs[x]->value == 0)
printf("%s = %u | %s\n",
predefs[x]->name,
predefs[x]->value,
predefs[x]->description);
}
return 0;
}
#include "predef_info.h"
+2 -85
View File
@@ -1,90 +1,7 @@
/*
Copyright Rene Rivera 2011-2012
Copyright Rene Rivera 2011-2015
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
#include <string>
#include <iostream>
#include <set>
#define BOOST_PREDEF_INTERNAL_GENERATE_TESTS
namespace
{
struct predef_info
{
std::string name;
std::string description;
unsigned value;
predef_info(
std::string const & n,
std::string const & d,
unsigned v);
predef_info(
predef_info const & other)
: name(other.name)
, description(other.description)
, value(other.value)
{
}
bool operator < (predef_info const & other) const
{
return name < other.name;
}
};
std::set<predef_info> * predefs = 0;
predef_info::predef_info(
std::string const & n,
std::string const & d,
unsigned v)
: name(n)
, description(d)
, value(v)
{
if (!predefs)
{
predefs = new std::set<predef_info>();
}
predefs->insert(*this);
}
}
#define BOOST_PREDEF_DECLARE_TEST(x,s) \
namespace { \
predef_info x##_predef_init(#x,s,x); \
}
#include <boost/predef.h>
int main()
{
std::set<predef_info>::iterator i;
std::set<predef_info>::iterator e = predefs->end();
std::cout << "** Detected **" << std::endl;
for (i = predefs->begin(); i != e; ++i)
{
if (i->value > 0)
std::cout
<< i->name << " = "
<< i->value
<< " (" << (i->value/10000000)%100 << "," << (i->value/100000)%100 << "," << (i->value)%100000 << ") | "
<< i->description
<< std::endl;
}
std::cout << "** Not Detected **" << std::endl;
for (i = predefs->begin(); i != e; ++i)
{
if (i->value == 0)
std::cout
<< i->name << " = "
<< i->value << " | "
<< i->description
<< std::endl;
}
return 0;
}
#include "predef_info.h"
+2 -2
View File
@@ -1,7 +1,7 @@
/*
Copyright Rene Rivera 2011
Copyright Rene Rivera 2011-2015
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
#include "info_as_c.c"
#include "predef_info.h"
+2 -2
View File
@@ -1,7 +1,7 @@
/*
Copyright Rene Rivera 2011
Copyright Rene Rivera 2011-2015
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
#include "info_as_cpp.cpp"
#include "predef_info.h"
+46
View File
@@ -0,0 +1,46 @@
/*
Copyright Rene Rivera 2011-2015
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
#include <boost/predef/detail/test_def.h>
int main(int argc, const char ** argv)
{
unsigned x = 0;
create_predef_entries();
qsort(generated_predef_info,generated_predef_info_count,
sizeof(predef_info),predef_info_compare);
/*
for (x = 0; x < generated_predef_info_count; ++x)
{
printf("%s: %d\n", generated_predef_info[x].name, generated_predef_info[x].value);
}
*/
puts("** Detected **");
for (x = 0; x < generated_predef_info_count; ++x)
{
if (generated_predef_info[x].value > 0)
printf("%s = %u (%u,%u,%u) | %s\n",
generated_predef_info[x].name,
generated_predef_info[x].value,
(generated_predef_info[x].value/10000000)%100,
(generated_predef_info[x].value/100000)%100,
(generated_predef_info[x].value)%100000,
generated_predef_info[x].description);
}
puts("** Not Detected **");
for (x = 0; x < generated_predef_info_count; ++x)
{
if (generated_predef_info[x].value == 0)
printf("%s = %u | %s\n",
generated_predef_info[x].name,
generated_predef_info[x].value,
generated_predef_info[x].description);
}
if (generated_predef_info_count > 0)
return 0;
else
return 1;
}