2323#include <math.h>
2424#include <time.h>
2525
26- #define USE_PTHREADS // If your platform does not support pthread.h please change this line to #undef!
27- // #undef USE_PTHREADS
28-
2926#include "../mapcodelib/mapcoder.c"
3027#include "../mapcodelib/mapcode_countrynames_short.h"
3128#include "test_territories.c"
3229#include "decode_test.h"
3330
34- #ifdef USE_PTHREADS
35- #include <pthread.h>
36- #else
37- #define pthread_mutex_lock (ignore ) // Fake implementation of pthread.
31+ // If your platform does not support pthread.h, either add -DNO_POSIX_THREADS
32+ // to your compiler command-line, or uncomment the following line:
33+ // #define NO_POSIX_THREADS
34+
35+ #ifdef NO_POSIX_THREADS
36+
37+ // Fake implementation of pthread to not use threads at all:
38+ #define pthread_mutex_lock (ignore )
3839#define pthread_mutex_unlock(ignore)
3940#define pthread_mutex_t int
4041#define PTHREAD_MUTEX_INITIALIZER 0
4142#define pthread_t int
4243#define pthread_join (ignore1 , ignore2 ) 0
4344#define pthread_create (ignore1 , ignore2 , func , context ) func(context)
45+ #define MAX_THREADS 1
46+ #else
47+ #include <pthread.h>
48+ #define MAX_THREADS 16 // Optimal: not too much, approx. nr of cores * 2, better no more than 32.
4449#endif
4550
4651#define MAXLINESIZE 1024
47- #ifdef USE_PTHREADS
48- #define MAX_THREADS 16 // Optimal: not too much, approx. nr of cores * 2, better no more than 32.
49- #else
50- #define MAX_THREADS 1
51- #endif
5252
53- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER ;
54- int nrErrors = 0 ;
53+ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER ;
54+ static int nrErrors = 0 ;
55+
56+ #define LARGE_NUMBER 16000
5557
56- void found_error () {
58+ static void found_error (void ) {
5759 pthread_mutex_lock (& mutex );
5860 ++ nrErrors ;
5961 pthread_mutex_unlock (& mutex );
6062}
6163
6264// test the alphabet conversion routines
63- int alphabet_tests () {
65+ static int alphabet_tests (void ) {
6466 int nrTests = 0 ;
6567 int i , j ;
6668 const char * str , * expect ;
@@ -153,7 +155,7 @@ int alphabet_tests() {
153155}
154156
155157// Show progress.
156- void show_progress (int at , int max , int nrTests ) {
158+ static void show_progress (int at , int max , int nrTests ) {
157159 static clock_t prevTick = 0 ;
158160
159161 // No worries, clock() is a very fast call.
@@ -167,7 +169,7 @@ void show_progress(int at, int max, int nrTests) {
167169}
168170
169171//
170- void printGeneratedMapcodes (const char * title , const Mapcodes * mapcodes ) {
172+ static void printGeneratedMapcodes (const char * title , const Mapcodes * mapcodes ) {
171173 int i , nrresults = mapcodes -> count ;
172174 printf (" %s: %d results" , title , nrresults );
173175 for (i = 0 ; i < nrresults ; i ++ ) {
@@ -178,7 +180,7 @@ void printGeneratedMapcodes(const char *title, const Mapcodes *mapcodes) {
178180}
179181
180182// test encode x,y to M, decode M, re-encode back to M
181- int testEncodeAndDecode (const char * str , double y , double x , int localsolutions , int globalsolutions ) {
183+ static int testEncodeAndDecode (const char * str , double y , double x , int localsolutions , int globalsolutions ) {
182184 int nrTests = 0 ;
183185 char clean [MAX_MAPCODE_RESULT_LEN ];
184186 const char * p , * s ;
@@ -368,7 +370,7 @@ int testEncodeAndDecode(const char *str, double y, double x, int localsolutions,
368370}
369371
370372// test strings that are expected to FAIL a decode
371- int test_failing_decodes () {
373+ static int test_failing_decodes (void ) {
372374 int nrTests = 0 ;
373375 static const char * badcodes [] = {
374376
@@ -492,7 +494,7 @@ int test_territory(const char *alphaCode, int tc, int isAlias, int needsParent,
492494
493495
494496// test closely around a particular coordinate
495- int test_around (double y , double x ) {
497+ static int test_around (double y , double x ) {
496498 int nrTests = 0 ;
497499 nrTests += testEncodeAndDecode ("" , y + 0.00001 , x + 0.00001 , 0 , 0 );
498500 nrTests += testEncodeAndDecode ("" , y + 0.00001 , x , 0 , 0 );
@@ -516,7 +518,7 @@ struct context_test_around {
516518};
517519
518520
519- int join_threads (pthread_t * threads , struct context_test_around * contexts , int total ) {
521+ static int join_threads (pthread_t * threads , struct context_test_around * contexts , int total ) {
520522 int i = 0 ;
521523 int nrTests = 0 ;
522524 for (i = 0 ; i < total ; ++ i ) {
@@ -532,7 +534,7 @@ int join_threads(pthread_t *threads, struct context_test_around *contexts, int t
532534}
533535
534536// perform testEncodeAndDecode for all elements of encode_test[] (from decode_test.h)
535- int encode_decode_tests () {
537+ static int encode_decode_tests (void ) {
536538 int nrTests = 0 ;
537539 int i = 0 ;
538540 int nr = sizeof (encode_test ) / sizeof (encode_test_record ) - 1 ;
@@ -546,7 +548,7 @@ int encode_decode_tests() {
546548 return nrTests ;
547549}
548550
549- void * execute_test_around (void * context ) {
551+ static void * execute_test_around (void * context ) {
550552 int nrTests = 0 ;
551553 double y , x , midx , midy , thirdx ;
552554 struct context_test_around * c = (struct context_test_around * ) context ;
@@ -582,7 +584,7 @@ void *execute_test_around(void *context) {
582584
583585
584586// test around all centers and corners of all territory rectangles
585- int re_encode_tests () {
587+ static int re_encode_tests (void ) {
586588 int nrTests = 0 ;
587589 int ccode = 0 ;
588590 int m = 0 ;
@@ -623,7 +625,7 @@ int re_encode_tests() {
623625 return nrTests ;
624626}
625627
626- int distance_tests () {
628+ static int distance_tests (void ) {
627629 int nrTests = 0 ;
628630 if (strcmp (mapcode_cversion , "2.1.3" ) >= 0 ) {
629631 int i ;
@@ -662,7 +664,7 @@ int distance_tests() {
662664}
663665
664666
665- int test_territory_insides () {
667+ static int test_territory_insides (void ) {
666668 int nrTests = 0 ;
667669 if (strcmp (mapcode_cversion , "2.1.5" ) >= 0 ) {
668670 int i ;
@@ -724,7 +726,7 @@ int test_territory_insides() {
724726 return nrTests ;
725727}
726728
727- int territory_code_tests () {
729+ static int territory_code_tests (void ) {
728730 int nrTests = 0 ;
729731 int i ;
730732
@@ -772,7 +774,7 @@ int territory_code_tests() {
772774}
773775
774776
775- int check_incorrect_get_territory_code_test (char * tcAlpha ) {
777+ static int check_incorrect_get_territory_code_test (char * tcAlpha ) {
776778 int tc = getTerritoryCode (tcAlpha , 0 );
777779 if (tc >= 0 ) {
778780 found_error ();
@@ -782,11 +784,11 @@ int check_incorrect_get_territory_code_test(char *tcAlpha) {
782784}
783785
784786
785- int get_territory_robustness_tests () {
787+ static int get_territory_robustness_tests (void ) {
786788 int nrTests = 0 ;
787789 int i ;
788790 char s1 [1 ];
789- char s10k [ 10000 ];
791+ char largeString [ LARGE_NUMBER ];
790792
791793 nrTests += check_incorrect_get_territory_code_test ("UNKNOWN" );
792794 nrTests += check_incorrect_get_territory_code_test ("A" );
@@ -806,15 +808,15 @@ int get_territory_robustness_tests() {
806808 s1 [0 ] = 0 ;
807809 nrTests += check_incorrect_get_territory_code_test (s1 );
808810
809- for (i = 0 ; i < sizeof (s10k ); ++ i ) {
810- s10k [i ] = (char ) ((i % 223 ) + 32 );
811+ for (i = 0 ; i < sizeof (largeString ); ++ i ) {
812+ largeString [i ] = (char ) ((i % 223 ) + 32 );
811813 }
812- nrTests += check_incorrect_get_territory_code_test (s10k );
814+ nrTests += check_incorrect_get_territory_code_test (largeString );
813815 return nrTests ;
814816}
815817
816818
817- int check_incorrect_encode_test (double lat , double lon , int treatAsError ) {
819+ static int check_incorrect_encode_test (double lat , double lon , int treatAsError ) {
818820 int nrResults ;
819821 int nrTests = 0 ;
820822 Mapcodes mapcodes ;
@@ -831,7 +833,7 @@ int check_incorrect_encode_test(double lat, double lon, int treatAsError) {
831833}
832834
833835
834- int check_correct_encode_test (double lat , double lon , int treatAsError ) {
836+ static int check_correct_encode_test (double lat , double lon , int treatAsError ) {
835837 Mapcodes mapcodes ;
836838 int nrResults = encodeLatLonToMapcodes (& mapcodes , lat , lon , 0 , 0 );
837839 if (nrResults <= 0 ) {
@@ -845,7 +847,7 @@ int check_correct_encode_test(double lat, double lon, int treatAsError) {
845847}
846848
847849
848- int encode_robustness_tests () {
850+ static int encode_robustness_tests (void ) {
849851 int nrTests = 0 ;
850852 double d ;
851853 unsigned char * b = (unsigned char * ) & d ;
@@ -920,7 +922,7 @@ int encode_robustness_tests() {
920922}
921923
922924
923- int check_incorrect_decode_test (char * mc , int tc ) {
925+ static int check_incorrect_decode_test (char * mc , int tc ) {
924926 double lat ;
925927 double lon ;
926928 int rc = decodeMapcodeToLatLon (& lat , & lon , mc , tc );
@@ -932,7 +934,7 @@ int check_incorrect_decode_test(char *mc, int tc) {
932934}
933935
934936
935- int check_correct_decode_test (char * mc , int tc ) {
937+ static int check_correct_decode_test (char * mc , int tc ) {
936938 double lat ;
937939 double lon ;
938940 int rc = decodeMapcodeToLatLon (& lat , & lon , mc , tc );
@@ -944,11 +946,11 @@ int check_correct_decode_test(char *mc, int tc) {
944946}
945947
946948
947- int decode_robustness_tests () {
949+ static int decode_robustness_tests (void ) {
948950 int nrTests = 0 ;
949951 int i ;
950952 char s1 [1 ];
951- char s10k [ 10000 ];
953+ char largeString [ LARGE_NUMBER ];
952954
953955 int tc = getTerritoryCode ("NLD" , 0 );
954956 nrTests += check_incorrect_decode_test ("" , 0 );
@@ -965,16 +967,16 @@ int decode_robustness_tests() {
965967 nrTests += check_incorrect_decode_test (s1 , 0 );
966968 nrTests += check_incorrect_decode_test (s1 , tc );
967969
968- for (i = 0 ; i < sizeof (s10k ); ++ i ) {
969- s10k [i ] = (char ) ((i % 223 ) + 32 );
970+ for (i = 0 ; i < sizeof (largeString ); ++ i ) {
971+ largeString [i ] = (char ) ((i % 223 ) + 32 );
970972 }
971973 nrTests += check_incorrect_decode_test (s1 , 0 );
972974 nrTests += check_incorrect_decode_test (s1 , tc );
973975 return nrTests ;
974976}
975977
976978
977- int check_alphabet_assertion (char * msg , int condition , char * format , int a ) {
979+ static int check_alphabet_assertion (char * msg , int condition , char * format , int a ) {
978980 if (condition == 0 ) {
979981 found_error ();
980982 printf ("*** ERROR *** %s, " , msg );
@@ -985,20 +987,20 @@ int check_alphabet_assertion(char *msg, int condition, char *format, int a) {
985987}
986988
987989
988- int alphabet_robustness_tests () {
990+ static int alphabet_robustness_tests (void ) {
989991 int nrTests = 0 ;
990992 int i ;
991993 int a ;
992994 char s1 [1 ];
993- char s10k [ 10000 ];
995+ char largeString [ LARGE_NUMBER ];
994996 char * ps ;
995997 UWORD u1 [1 ];
996- UWORD u10k [ 10000 ];
998+ UWORD largeUnicodeString [ LARGE_NUMBER ];
997999 UWORD * pu ;
9981000
9991001 s1 [0 ] = 0 ;
1000- for (i = 0 ; i < sizeof (s10k ); ++ i ) {
1001- s10k [i ] = (char ) ((i % 223 ) + 32 );
1002+ for (i = 0 ; i < sizeof (largeString ); ++ i ) {
1003+ largeString [i ] = (char ) ((i % 223 ) + 32 );
10021004 }
10031005
10041006 for (a = 0 ; a < MAPCODE_ALPHABETS_TOTAL ; a ++ ) {
@@ -1011,19 +1013,18 @@ int alphabet_robustness_tests() {
10111013 nrTests += check_alphabet_assertion ("convertToRoman cannot return 0" , ps != 0 , "alphabet=%d" , a );
10121014 nrTests += check_alphabet_assertion ("convertToRoman must return empty string" , ps [0 ] == 0 , "alphabet=%d" , a );
10131015
1014- pu = convertToAlphabet (u10k , sizeof (u10k ), s10k , 0 );
1016+ pu = convertToAlphabet (largeUnicodeString , sizeof (largeUnicodeString ) / sizeof ( largeUnicodeString [ 0 ]), largeString , 0 );
10151017 nrTests += check_alphabet_assertion ("convertToAlphabet cannot return 0" , pu != 0 , "alphabet=%d" , a );
10161018
1017- ps = convertToRoman (s10k , sizeof (s10k ), pu );
1019+ ps = convertToRoman (largeString , sizeof (largeString ) / sizeof ( largeString [ 0 ] ), pu );
10181020 nrTests += check_alphabet_assertion ("convertToRoman cannot return 0" , ps != 0 , "alphabet=%d" , a );
1019- nrTests += check_alphabet_assertion ("convertToRoman must return size" , strlen (ps ) < sizeof (s10k ), "alphabet=%d" ,
1020- a );
1021+ nrTests += check_alphabet_assertion ("convertToRoman must return size" , strlen (ps ) < sizeof (largeString ), "alphabet=%d" , a );
10211022 }
10221023 return nrTests ;
10231024}
10241025
10251026
1026- int robustness_tests () {
1027+ static int robustness_tests (void ) {
10271028 int nrTests = 0 ;
10281029 nrTests += get_territory_robustness_tests ();
10291030 nrTests += encode_robustness_tests ();
@@ -1032,7 +1033,7 @@ int robustness_tests() {
10321033 return nrTests ;
10331034}
10341035
1035- int alphabet_per_territory_tests () {
1036+ static int alphabet_per_territory_tests (void ) {
10361037 int nrTests = 0 ;
10371038 int i , j ;
10381039 for (i = 0 ; i < MAX_CCODE ; i ++ ) {
@@ -1054,7 +1055,7 @@ int alphabet_per_territory_tests() {
10541055 return nrTests ;
10551056}
10561057
1057- int test_territories_csv () {
1058+ static int test_territories_csv (void ) {
10581059 int nrTests = 0 ;
10591060 int linesTested = 0 ;
10601061 const char * csvName = "territories.csv" ;
0 commit comments