Fix naming and improve test name (#353)

This commit is contained in:
Zeex 2018-09-29 06:59:12 +06:00
parent bc04b2ef04
commit aabd3a5d5d
5 changed files with 88 additions and 88 deletions

View File

@ -489,24 +489,24 @@ static int levenshtein_distance(const char *s,const char*t)
return distance;
}
static int get_maxdist(const char *name)
static int get_max_dist(const char *name)
{
int maxdist=strlen(name)/2; /* for short names, allow only a single edit */
if (maxdist>MAX_EDIT_DIST)
maxdist=MAX_EDIT_DIST;
return maxdist;
int max_dist=strlen(name)/2; /* for short names, allow only a single edit */
if (max_dist>MAX_EDIT_DIST)
max_dist=MAX_EDIT_DIST;
return max_dist;
}
static int find_closestsymbol_table(const char *name,const symbol *root,int symboltype,symbol **closestsym)
static int find_closest_symbol_table(const char *name,const symbol *root,int symboltype,symbol **closest_sym)
{
int dist,maxdist,closestdist=INT_MAX;
int dist,max_dist,closest_dist=INT_MAX;
char symname[2*sNAMEMAX+16];
symbol *sym;
int ident;
assert(closestsym!=NULL);
*closestsym=NULL;
assert(closest_sym!=NULL);
*closest_sym =NULL;
assert(name!=NULL);
maxdist=get_maxdist(name);
max_dist=get_max_dist(name);
for (sym=root->next; sym!=NULL; sym=sym->next) {
if (sym->fnumber!=-1 && sym->fnumber!=fcurrent)
continue;
@ -532,17 +532,17 @@ static int find_closestsymbol_table(const char *name,const symbol *root,int symb
} /* if */
funcdisplayname(symname,sym->name);
dist=levenshtein_distance(name,symname);
if (dist>maxdist || dist>=closestdist)
if (dist>max_dist || dist>=closest_dist)
continue;
*closestsym=sym;
closestdist=dist;
if (closestdist<=1)
*closest_sym =sym;
closest_dist=dist;
if (closest_dist<=1)
break;
} /* for */
return closestdist;
return closest_dist;
}
static symbol *find_closestsymbol(const char *name,int symboltype)
static symbol *find_closest_symbol(const char *name,int symboltype)
{
symbol *symloc,*symglb;
int distloc,distglb;
@ -552,70 +552,70 @@ static symbol *find_closestsymbol(const char *name,int symboltype)
assert(name!=NULL);
if (name[0]=='\0')
return NULL;
distloc=find_closestsymbol_table(name,&loctab,symboltype,&symloc);
distloc=find_closest_symbol_table(name,&loctab,symboltype,&symloc);
if (distloc<=1)
distglb=INT_MAX; /* don't bother searching in the global table */
else
distglb=find_closestsymbol_table(name,&glbtab,symboltype,&symglb);
distglb=find_closest_symbol_table(name,&glbtab,symboltype,&symglb);
return (distglb<distloc) ? symglb : symloc;
}
static constvalue *find_closestautomaton(const char *name)
static constvalue *find_closest_automaton(const char *name)
{
constvalue *ptr=sc_automaton_tab.first;
constvalue *closestmatch=NULL;
int dist,maxdist,closestdist=INT_MAX;
constvalue *closest_match=NULL;
int dist,max_dist,closest_dist=INT_MAX;
assert(name!=NULL);
maxdist=get_maxdist(name);
max_dist=get_max_dist(name);
while (ptr!=NULL) {
if (ptr->name[0]!='\0') {
dist=levenshtein_distance(name,ptr->name);
if (dist<closestdist && dist<=maxdist) {
closestmatch=ptr;
closestdist=dist;
if (closestdist<=1)
if (dist<closest_dist && dist<=max_dist) {
closest_match=ptr;
closest_dist=dist;
if (closest_dist<=1)
break;
} /* if */
} /* if */
ptr=ptr->next;
} /* while */
return closestmatch;
return closest_match;
}
static constvalue *find_closeststate(const char *name,int fsa)
static constvalue *find_closest_state(const char *name,int fsa)
{
constvalue *ptr=sc_state_tab.first;
constvalue *closestmatch=NULL;
int dist,maxdist,closestdist=INT_MAX;
constvalue *closest_match=NULL;
int dist,max_dist,closest_dist=INT_MAX;
assert(name!=NULL);
maxdist=get_maxdist(name);
max_dist=get_max_dist(name);
while (ptr!=NULL) {
if (ptr->index==fsa && ptr->name[0]!='\0') {
dist=levenshtein_distance(name,ptr->name);
if (dist<closestdist && dist<=maxdist) {
closestmatch=ptr;
closestdist=dist;
if (closestdist<=1)
if (dist<closest_dist && dist<=max_dist) {
closest_match=ptr;
closest_dist=dist;
if (closest_dist<=1)
break;
} /* if */
} /* if */
ptr=ptr->next;
} /* while */
return closestmatch;
return closest_match;
}
static constvalue *findclosest_automaton_for_state(const char *statename,int fsa)
static constvalue *find_closest_automaton_for_state(const char *statename,int fsa)
{
constvalue *ptr=sc_state_tab.first;
constvalue *closestmatch=NULL;
constvalue *closest_match=NULL;
constvalue *automaton;
const char *fsaname;
int dist,maxdist,closestdist=INT_MAX;
int dist,max_dist,closest_dist=INT_MAX;
assert(statename!=NULL);
maxdist=get_maxdist(statename);
max_dist=get_max_dist(statename);
automaton=automaton_findid(ptr->index);
assert(automaton!=NULL);
fsaname=automaton->name;
@ -624,22 +624,22 @@ static constvalue *findclosest_automaton_for_state(const char *statename,int fsa
automaton=automaton_findid(ptr->index);
assert(automaton!=NULL);
dist=levenshtein_distance(fsaname,automaton->name);
if (dist<closestdist && dist<=maxdist) {
closestmatch=automaton;
closestdist=dist;
if (closestdist<=1)
if (dist<closest_dist && dist<=max_dist) {
closest_match=automaton;
closest_dist=dist;
if (closest_dist<=1)
break;
} /* if */
} /* if */
ptr=ptr->next;
} /* while */
return closestmatch;
return closest_match;
}
SC_FUNC int error_suggest(int number,const char *name,const char *name2,int type,int subtype)
{
char string[sNAMEMAX*2+2]; /* for "<automaton>:<state>" */
const char *closestname=NULL;
const char *closest_name=NULL;
/* don't bother finding the closest names on errors
* that aren't going to be shown on the 1'st pass
@ -648,40 +648,40 @@ SC_FUNC int error_suggest(int number,const char *name,const char *name2,int type
return 0;
if (type==estSYMBOL || (type==estNONSYMBOL && tMIDDLE<subtype && subtype<=tLAST)) {
symbol *closestsym;
symbol *closest_sym;
if (type!=estSYMBOL) {
extern char *sc_tokens[];
name=sc_tokens[subtype-tFIRST];
subtype=essVARCONST;
} /* if */
closestsym=find_closestsymbol(name,subtype);
if (closestsym!=NULL)
closestname=closestsym->name;
closest_sym =find_closest_symbol(name,subtype);
if (closest_sym !=NULL)
closest_name= closest_sym->name;
} else if (type==estAUTOMATON) {
constvalue *closestautomaton=find_closestautomaton(name);
if (closestautomaton!=NULL)
closestname=closestautomaton->name;
constvalue *closest_automaton=find_closest_automaton(name);
if (closest_automaton!=NULL)
closest_name=closest_automaton->name;
} else if (type==estSTATE) {
constvalue *closeststate=find_closeststate(name,subtype);
if (closeststate!=NULL) {
closestname=closeststate->name;
constvalue *closest_state=find_closest_state(name,subtype);
if (closest_state !=NULL) {
closest_name=closest_state->name;
} else {
constvalue *closestautomaton=findclosest_automaton_for_state(name,subtype);
if (closestautomaton!=NULL) {
sprintf(string,"%s:%s",closestautomaton->name,name);
closestname=string;
constvalue *closest_automaton=find_closest_automaton_for_state(name,subtype);
if (closest_automaton !=NULL) {
sprintf(string,"%s:%s", closest_automaton->name,name);
closest_name=string;
} /* if */
} /* if */
} else {
assert(0);
} /* if */
if (closestname==NULL) {
if (closest_name==NULL) {
error(number,name,name2);
} else if (name2!=NULL) {
error(makelong(number,1),name,name2,closestname);
error(makelong(number,1),name,name2,closest_name);
} else {
error(makelong(number,1),name,closestname);
error(makelong(number,1),name,closest_name);
} /* if */
return 0;
}

View File

@ -1,24 +0,0 @@
{
'test_type': 'output_check',
'errors': """
gh_353.pwn(12) : error 017: undefined symbol "abcxyz"
gh_353.pwn(20) : error 017: undefined symbol "length"
gh_353.pwn(30) : error 017: undefined symbol "float"
gh_353.pwn(40) : error 017: undefined symbol "ab"
gh_353.pwn(41) : error 017: undefined symbol "ab"
gh_353.pwn(50) : error 017: undefined symbol "staticval"
gh_353.pwn(58) : error 017: undefined symbol "val"; did you mean "var"?
gh_353.pwn(62) : error 017: undefined symbol "celmax"; did you mean "cellmax"?
gh_353.pwn(66) : error 017: undefined symbol "strcaf"; did you mean "strcat"?
gh_353.pwn(69) : error 017: undefined symbol "test_e17"; did you mean "test_e017"?
gh_353.pwn(78) : error 019: not a label: "lb"; did you mean "lbl"?
gh_353.pwn(85) : error 020: invalid symbol name "assert"; did you mean "asset"?
gh_353.pwn(96) : error 080: unknown symbol, or not a constant symbol (symbol "idx"); did you mean "id"?
gh_353.pwn(107) : error 086: unknown automaton "automaton1"; did you mean "automaton_1"?
gh_353.pwn(107) : error 036: empty statement
gh_353.pwn(114) : error 087: unknown state "BEING1" for automaton "automaton_2"; did you mean "BEING_1"?
gh_353.pwn(114) : error 036: empty statement
gh_353.pwn(117) : error 087: unknown state "STATE_1" for automaton "automaton_2"; did you mean "automaton_1:STATE_1"?
gh_353.pwn(117) : error 036: empty statement
"""
}

View File

@ -0,0 +1,24 @@
{
'test_type': 'output_check',
'errors': """
gh_353_symbol_suggestions.pwn(12) : error 017: undefined symbol "abcxyz"
gh_353_symbol_suggestions.pwn(20) : error 017: undefined symbol "length"
gh_353_symbol_suggestions.pwn(30) : error 017: undefined symbol "float"
gh_353_symbol_suggestions.pwn(40) : error 017: undefined symbol "ab"
gh_353_symbol_suggestions.pwn(41) : error 017: undefined symbol "ab"
gh_353_symbol_suggestions.pwn(50) : error 017: undefined symbol "staticval"
gh_353_symbol_suggestions.pwn(58) : error 017: undefined symbol "val"; did you mean "var"?
gh_353_symbol_suggestions.pwn(62) : error 017: undefined symbol "celmax"; did you mean "cellmax"?
gh_353_symbol_suggestions.pwn(66) : error 017: undefined symbol "strcaf"; did you mean "strcat"?
gh_353_symbol_suggestions.pwn(69) : error 017: undefined symbol "test_e17"; did you mean "test_e017"?
gh_353_symbol_suggestions.pwn(78) : error 019: not a label: "lb"; did you mean "lbl"?
gh_353_symbol_suggestions.pwn(85) : error 020: invalid symbol name "assert"; did you mean "asset"?
gh_353_symbol_suggestions.pwn(96) : error 080: unknown symbol, or not a constant symbol (symbol "idx"); did you mean "id"?
gh_353_symbol_suggestions.pwn(107) : error 086: unknown automaton "automaton1"; did you mean "automaton_1"?
gh_353_symbol_suggestions.pwn(107) : error 036: empty statement
gh_353_symbol_suggestions.pwn(114) : error 087: unknown state "BEING1" for automaton "automaton_2"; did you mean "BEING_1"?
gh_353_symbol_suggestions.pwn(114) : error 036: empty statement
gh_353_symbol_suggestions.pwn(117) : error 087: unknown state "STATE_1" for automaton "automaton_2"; did you mean "automaton_1:STATE_1"?
gh_353_symbol_suggestions.pwn(117) : error 036: empty statement
"""
}

View File

@ -1,7 +1,7 @@
#include <console>
#include <file>
#include <string>
#include "gh_353.inc"
#include "gh_353_symbol_suggestions.inc"
forward test_nosuggest1();
public test_nosuggest1()