From: trevor_hansen Date: Mon, 24 May 2010 02:23:57 +0000 (+0000) Subject: These scripts (though I don't know what they do) seem to belong with the other test... X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=42689473d67ac51b42891c6cedfefa1beb5763ed;p=francis%2Fstp.git These scripts (though I don't know what they do) seem to belong with the other test generation scripts. git-svn-id: https://stp-fast-prover.svn.sourceforge.net/svnroot/stp-fast-prover/trunk/stp@787 e59a4935-1847-0410-ae03-e826735625c1 --- diff --git a/tests/generated_tests/random-tests/OptGen.java b/tests/generated_tests/random-tests/OptGen.java new file mode 100644 index 0000000..df25545 --- /dev/null +++ b/tests/generated_tests/random-tests/OptGen.java @@ -0,0 +1,34 @@ +import java.util.*; + +class OptGen{ + static Collection out; + static void fork(String opt, boolean del){ + Collection tmp = new LinkedList(); + for(String s:out){ + tmp.add(s+" -"+opt); + if(!del) + tmp.add(s); + } + out = tmp; + } + public static void main(String args[]){ + int num_opts = Integer.parseInt(args[0]); + String prog = args[1]; + String exclude = args[2]; + String include = args[3]; + + out = new LinkedList(); + out.add(prog); + for(int i=0;i +#include "c_interface.h" + +#include +#include +#include + +VC vc; +vector gen_forms; +vector gen_arrays; +vector gen_terms; + +//unsigned TERMS; +//unsigned FORMULAS; +bool o0,o1,o2,o3,o4,o5,o6,o7,o8; + +unsigned MIN; +unsigned MAX; + +using namespace BEEV; + +unsigned T; +int trand(){ + T++; + return rand(); +} + +Expr randconst(){ + return vc_bvConstExprFromInt(vc, 32, rand()); +} +#define BUF_LENGTH 63 +char buf[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; +void shufflebuf(){ + unsigned N = BUF_LENGTH; + unsigned i; + while(N--){ + i = trand()%BUF_LENGTH; + char c = buf[i]; + buf[i] = buf[N]; + buf[N] = c; + } +} + +void nonsense(){ + gen_arrays.push_back(NULL); +} + +char* rstr(unsigned len){ + char *ret = (char *)calloc(sizeof( char),len+1); + shufflebuf(); + unsigned i = 0; + while(len--){ + ret[i++] = buf[trand()%BUF_LENGTH]; + } + return ret; +} +Expr randvar(){ + char *rname = rstr(trand()%11+6); + + Expr e = vc_varExpr1(vc,rname,0,32); + free(rname); + return e; +} +bool isTerm(Expr e){ + return BEEV::BITVECTOR_TYPE == ((ASTNode*)e)->GetType(); +} +bool isFormula(Expr e){ + return BEEV::BOOLEAN_TYPE == ((ASTNode*)e)->GetType(); +} + +Expr selectTerm(){ + unsigned i = trand()%gen_terms.size(); + return gen_terms[i]; +} +Expr selectForm(){ + unsigned i = trand()%gen_forms.size(); + return gen_forms[i]; +} +Expr selectArray(){ + unsigned i = trand()%gen_arrays.size(); + return gen_arrays[i]; +} +Expr randarrayvar(){ + char *rname = rstr(trand()%11+6); + Expr e = vc_varExpr1(vc,rname,32,32); + free(rname); + return e; +} +Expr randarray(){ + unsigned r = trand()%11; + if(0 == gen_arrays.size()) + r = 0; + switch(r){ + case 0: + return randarrayvar(); + default: + return vc_writeExpr(vc,selectArray(),selectTerm(),selectTerm()); + } +} +Expr randbvterm(){ + unsigned r = trand()%11; + Expr expr, left, right; + + left = selectTerm(); + if(1 == r){ + right = left; + left = selectArray(); + }else if(r > 2 ){ + right = selectTerm(); + } + switch(r){ + case 0: + expr = vc_bvNotExpr(vc, left); + break; + case 1: + expr = vc_bvUMinusExpr(vc, left); + break; + case 2: + expr = vc_readExpr(vc, left, right); + break; + case 3: + expr = vc_bvPlusExpr(vc, 32, left, right); + break; + case 4: + expr = vc_bvMinusExpr(vc, 32, left, right); + break; + case 5: + expr = vc_bvModExpr(vc, 32, left, right); + break; + case 6: + expr = vc_sbvDivExpr(vc, 32, left, right); + break; + case 7: + expr = vc_sbvModExpr(vc, 32, left, right); + break; + case 8: + expr = vc_bvOrExpr(vc, left, right); + break; + case 9: + expr = vc_bvAndExpr(vc, left, right); + break; + case 10: + expr = vc_bvXorExpr(vc, left, right); + break; + default: + expr = NULL; + break; + } + return expr; +} +Expr randbvform(){ + unsigned r = trand()%10; + + Expr expr,left,right; + left = selectTerm(); + if(r > 0 ) + right = selectTerm(); + + switch(r){ + case 0: + expr = vc_bvBoolExtract(vc, left, rand()%(vc_getBVLength(vc,left))); + break; + case 1: + expr = vc_bvLeExpr(vc, left, right); + break; + case 2: + expr = vc_bvGtExpr(vc, left, right); + break; + case 3: + expr = vc_bvGeExpr(vc, left, right); + break; + case 4: + expr = vc_eqExpr(vc, left, right); + break; + case 5: + expr = vc_sbvLtExpr(vc, left, right); + break; + case 6: + expr = vc_sbvLeExpr(vc, left, right); + break; + case 7: + expr = vc_sbvGtExpr(vc, left, right); + break; + case 8: + expr = vc_sbvGeExpr(vc, left, right); + break; + case 9: + expr = vc_bvLtExpr(vc, left, right); + break; + default: + expr = NULL; + break; + } + return expr; +} +Expr randform(){ + unsigned r = rand()%6; + + Expr expr,left,right; + left = selectForm(); + if(r != 0){ + right = selectForm(); + } + + switch(r){ + case 0: + expr = vc_notExpr(vc, left); + break; + case 1: + expr = vc_andExpr(vc, left, right); + break; + case 2: + expr = vc_orExpr(vc, left, right); + break; + case 3: + expr = vc_impliesExpr(vc, left, right); + break; + case 4: + expr = vc_iffExpr(vc, left, right); + break; + case 5: + expr = vc_iteExpr(vc,selectForm(), left, right); + break; + default: + expr = NULL; + break; + } + return expr; +} +void printExpr(Expr x){ + ASTNode q = *((ASTNode*)x); + q.LispPrint(cout,0); +} +void printArray(vector& v){ + for( unsigned i=0;i& v){ + while(!v.empty()){ + Expr elem = v.back(); + v.pop_back(); + vc_DeleteExpr(elem); + } +} +void setUpAST(){ + unsigned N; + N = trand()%(MAX-MIN)+MIN; + for( unsigned i=0;i 32){ + gen_terms.push_back(vc_bvExtract(vc, e, 32, 0)); + }else if(32 > vc_getBVLength(vc,e)){ + gen_terms.push_back(vc_bv32LeftShiftExpr(vc, 0,e)); + } + } + } + + N = trand()%(MAX-MIN)+MIN; + for( unsigned i=0;i