📄 test.run.cc
字号:
// test.run.cc INCLUDE file// W.Langdon cs.ucl.ac.uk $Revision: 1.27 $//Modifications (reverse order):// WBL 15 Apr 1997 Make compatible with Alpha C++ (forbids varible arraysizes)// WBL 29 Oct 1995 Remove display of CPU time// WBL 17 Oct 1995 Support hurdle// WBL 16 Oct 1995 Invert logic of scoreq_ and scorneq_// WBL 28 Sep 1995 Restore displaying Memory_errors// WBL 24 Sep 1995 Support scoreq_ and scorneq_// Remove STORE_FIT by always using 6 args on update_score // WBL 26 May 1995 Ensure seed is buffered ie avoid changing arg1// WBL 14 May 1995 Use arg1 as seed for clearing test data at start of test// WBL 12 May 1995 Add displaying Memory_errors// WBL 3 May 1995 Add STORE_FIT// WBL 1 May 1995 Add TRACE_RUN// WBL 20 Apr 1995 Add TIMINGS// WBL 6 Apr 1995 Add support for ARG1 and ARG2 etc// WBL 16 Feb 1995 Add partial matching of print buffer// WBL 15 Feb 1995 Add display pre-pass// WBL 14 Feb 1995 Bugfix Ensure tree_return_value is used correctly// WBL 14 Feb 1995 Move calling update_score and incrementing passes// to break_test and ensure test_passed cannot be set true// if as test (in the same sub sequence) has already failed.// Add sub_test_start.// WBL 11 Feb 1995 new file (based on test.cc version 1.2)int passes = 0;#ifdef DISPLAYint local_tests = 0;#endifint i = first_test;int sub_test_start = first_test;BOOL test_passed = TRUE;scoretype sub_seq_score = 1;BOOL stop_tests = FALSE;assert(tests[i].op==start_test);retval dynamic_data[10+1];//last is hole for junkdo {#ifdef DISPLAYwrite_test(i,chrome->probl,cout);cout<<"\t";#endifint seed = 0;//keep DEC compiler happyswitch(tests[i].op) { case start_test: seed = tests[i].arg1; clear(seed);#ifdef TRACE_RUN#ifdef DISPLAY ThisTrace->clear();#endif#endif memset(dynamic_data,0,sizeof(dynamic_data)); break; case scoreq: {#ifdef DISPLAY local_tests++;#endif if (Data(tests[i].arg1, dynamic_data) != Data(tests[i].arg2, dynamic_data) ) { test_passed = FALSE; sub_seq_score = 0;#ifdef DISPLAY cout<<"scoreq FAILED " <<Data(tests[i].arg1, dynamic_data)<<" " <<Data(tests[i].arg2, dynamic_data);#endif } break; } case scoreq_: {#ifdef DISPLAY local_tests++;#endif if (Data(tests[i].arg1, dynamic_data) != 0) { test_passed = FALSE; sub_seq_score = 0;#ifdef DISPLAY cout<<"scoreq_ FAILED " <<Data(tests[i].arg1, dynamic_data);#endif } else if(test_passed) { sub_seq_score += scoretype(tests[i].arg2) - 1; } break; } case scorneq_: {#ifdef DISPLAY local_tests++;#endif if (Data(tests[i].arg1, dynamic_data) == 0) { test_passed = FALSE; sub_seq_score = 0;#ifdef DISPLAY cout<<"scorneq_ FAILED " <<Data(tests[i].arg1, dynamic_data);#endif } else if(test_passed) { sub_seq_score += scoretype(tests[i].arg2) - 1; } break; } case hurdle: { hurdle_passes = tests[i].arg1; break; } case scorep: {#ifdef DISPLAY local_tests++;#endif// retval buffer [tests[i].arg1]; retval* buffer = new retval [tests[i].arg1]; {retval* p = tests[i].print; for(int j=0; j<tests[i].arg1;j++,p++) buffer[j] = Data(*p, dynamic_data);} BOOL exact = FALSE; float pm = print_match(tests[i].arg1, buffer, exact); sub_seq_score *= pm; if (!exact) { test_passed = FALSE;#ifdef DISPLAY cout<<"print match "<<pm<<flush; cout<<"scorep FAILED "<<tests[i].arg1; for(int j=0; j<tests[i].arg1;j++) cout<<" "<<buffer[j];#endif } delete[] buffer; break;} case scorneq: {#ifdef DISPLAY local_tests++;#endif// retval buffer [tests[i].arg1]; retval* buffer = new retval [tests[i].arg1]; {retval* p = tests[i].print; for(int j=0; j<tests[i].arg1;j++,p++) buffer[j] = Data(*p, dynamic_data);} {for(int j=0; j<tests[i].arg1;j++) { for(int k=0; k<j;k++) { if(buffer[j] == buffer[k]) goto not_unique;}}} //finished loop delete[] buffer; break; not_unique: { test_passed = FALSE; sub_seq_score = 0;#ifdef DISPLAY cout<<"scorneq FAILED "<<tests[i].arg1; for(int j=0; j<tests[i].arg1;j++) cout<<" "<<buffer[j];#endif } delete[] buffer; break;} case break_test:#ifndef PREPASS#ifndef DISPLAY update_score(chrome, sequence, sub_test_start, i, sub_seq_score, test_passed);#endif#endif if ((Primitive_error&stop_mask)!=0) { stop_tests = TRUE; } if(test_passed) { passes ++;#ifdef PREPASS update_passed(passed,sub_test_start, i);#endif#ifdef TRACE_RUN ThisTrace->trace_passed();#endif } else {#ifdef TRACE_RUN ThisTrace->trace_failed();#endif if ((stop_mask & stop_on_error)!=0) { stop_tests = TRUE; } }//endif test_passed test_passed = TRUE; //reset for next sub sequence of tests sub_seq_score = 1; sub_test_start = i; sub_test_start++; break; case end_test: stop_tests = TRUE; break; default: {// assert(tests[i].op<NUM_TREES); //optimise tests_run++;#ifdef ADF memset(calls,0,sizeof(calls)); calls [tests[i].op ] = 1;#endif print_clear(); iterate_count = 0; inner_loop_value = 0; Primitive_error = 0; Arg1 = Data(tests[i].arg1, dynamic_data); Arg2 = Data(tests[i].arg2, dynamic_data); ARG1 = Data(tests[i].arg1, dynamic_data); ARG2 = Data(tests[i].arg2, dynamic_data);#ifdef DISPLAY cout<<"Test "<<i<<" "; cout<<(passed[i]? "p " : "f ")<<flush;#endif#ifdef TIMINGS ThisTimmer->base_time( tests[i].op );#endif#ifdef TRACE_RUN ThisTrace->trace( tests[i].op );#endif dynamic_data[tests[i].res] = chrome->evalAll ( tests[i].op );#ifdef DISPLAY chrome->probl->WriteTreeName(tests[i].op); cout<<" ( "<<Arg1<<" , "<<Arg2<<" )= " <<dynamic_data[tests[i].res]<<"; " <<Primitive_error<<" " <<Memory_errors<<" "<<flush;#ifdef TIMINGS// cout<<ThisTimmer->timmer()<<" "<<flush;#endif ::write(); print_write();#ifdef STACK_PRIM write_stack();#endif#endif break; };//end default };#ifdef DISPLAYcout<<endl;#endifi++;} while (stop_tests==FALSE); //end loop#ifdef DISPLAYcout<<"Passed "<<passes<<" composite tests of " <<local_tests<<" individual tests run.\n\n";#ifdef TRACE_RUNcout<<*ThisTrace;write_not_run(chrome->nfitness, sequence, cout);#endif#endifreturn passes;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -