⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.run.cc

📁 标准的GP源代码,由Andy Singleton维护
💻 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 + -