- High horse - 5 Updates
- how apply the default constructor without the sys call the destructor bug manualy call that destructor too - 12 Updates
- My C++ synchronization objects library for Windows and Linux was updated.. - 1 Update
- neoGFX The Ultimate C++ GUI Library .. Coming Soon - 1 Update
- Squfof function in C or C++ - 1 Update
- High horse - 1 Update
James Kuyper <jameskuyper@alumni.caltech.edu>: Jun 15 07:54PM -0400 On 06/15/2018 05:30 PM, Ian Collins wrote: > On 16/06/18 03:47, James Kuyper wrote: ... > make up the code for a feature they have requested. Functions are > tested with unit tests, features with acceptance tests. The latter are > the customer's true requirements. I suppose I am guilty of conflating them somewhat, but that's mainly because I see no distinction between them that matters for the point I was making. Whether you're testing a single function by calling it from a test driver, or testing an entire system that might involve cooperation between many different programs, and might involve real-time processing of inputs coming from a device (including user-operated devices as keyboards and mice), it's still a piece of software with inputs, processing that is performed on those inputs, outputs, and requirements that specify what the connection is supposed to be between those inputs and those outputs. I find it hard to imagine any piece of software for which a test procedure that could execute in an acceptable amount of time could be considered as imposing requirements semantically equivalent to the true requirements. I find it easier to imagine such software if it has only a small number of inputs, no more than 128 bits or so, and executes very quickly, which is why I tend to think of small functions rather than entire programs when I'm thinking about that possibility. The key problem, as I see it, is that for such an equivalence to exist, every case whose behavior would be defined by the English requirements documentation, if such a document did exist, must be tested, and it's only unusually small pieces of software for which it would be feasible for a test to execute the piece of software with each and every one of the possible inputs. I find it easier to imagine such software if it's only a small subroutine, and not an entire application. > snipped in my last response is in the business world (at last my parts > of it), most requirements written at a high user experience level. They > do not delve into the details of the code. Yes we could turn those into It's not the details of the code that matter - it's the details of the inputs to and outputs from the code. For all but the most trivial pieces of software, the set of all inputs for which the requirements specify what the outputs should be, is, in my experience, untestably large by many orders of magnitude - and only a test that did execute the code for every one of those possible inputs could justifiably be considered as imposing the same requirements as should properly be specified in a separate requirements document. But that might be due in part to the kinds of software I've been involved in writing. Most of my software has inputs that consist of files megabytes in length, and a large fraction of those bytes have values that play a role in determining what the required outputs should be. A typical high-level requirement for the code I've been involved in, it that is should calculate the estimated latitude and longitude and altitude of the ground position visible in each pixel of an image of satellite data, based upon what's known about the geometry of the imaging instrument, and the time at which the data was collected. That time, in turn, can be used to determine the orientation and position of the satellite, and the orientation of the the Earth. The algorithm to be used for calculating those outputs from those inputs is specified by the requirements document. How the code is broken up into sub-routines to achieve that goal is specified in other parts of the documentation, but at the highest level the requirements only specify how the calculated latitude, longitude and altitude should depend upon the input data. How would you set up an acceptance test semantically equivalent to such requirements? I'm not asking you give me something that requires you to understand what the algorithm is, or what format the input data is in, or what format the output data is required to be in. I just want to have some understanding how it would be feasible to create such an acceptance test. Our acceptance tests sampled a large sub-set of the possible inputs, that was still only an infinitesimal fraction of the set of all possible inputs, and checked to see that this sub-set was handled correctly - but passing those acceptance tests was NOT semantically equivalent to requiring that all possible inputs be handled correctly. |
legalize+jeeves@mail.xmission.com (Richard): Jun 16 12:36AM [Please do not mail me a copy of your followup] James Kuyper <jameskuyper@alumni.caltech.edu> spake the secret code >should do, but only for those inputs; such code would not satisfy the >English requirements, but would satisfy the requirement implicitly >specified by such a test. Interestingly enough, in TDD we do "fake it until you make it" where an intermediate state of the code is exactly as you describe above. It works for a small number of inputs and yet fails to meet the entire spec. Not meeting the entire spec is how we know we're "not done writing tests" because we haven't yet pushed the implementation to be the minimal thing that satisfies the requirements. -- "The Direct3D Graphics Pipeline" free book <http://tinyurl.com/d3d-pipeline> The Terminals Wiki <http://terminals-wiki.org> The Computer Graphics Museum <http://computergraphicsmuseum.org> Legalize Adulthood! (my blog) <http://legalizeadulthood.wordpress.com> |
legalize+jeeves@mail.xmission.com (Richard): Jun 16 12:39AM [Please do not mail me a copy of your followup] Ian Collins <ian-news@hotmail.com> spake the secret code >write formal requirements but they do know what they want when they see >it. This is why we encourage them to be involved with the acceptance >tests. FitNesse is a great tool for bridging this gap. Acceptance tests are written in a tabular form within a free-form wiki. The free-form wiki lets the stakeholder/customer/business analyst work in a form that let's them link together all kinds of relevant information that is useful to understand but not codified in the form of an acceptance test directly. The tabular data is what drives the acceptance test and this is a good bridge between people who "know the business" and people who "know the implementation". It serves as a good compromise between an executable acceptance test specification and an English prose description of the requirements. -- "The Direct3D Graphics Pipeline" free book <http://tinyurl.com/d3d-pipeline> The Terminals Wiki <http://terminals-wiki.org> The Computer Graphics Museum <http://computergraphicsmuseum.org> Legalize Adulthood! (my blog) <http://legalizeadulthood.wordpress.com> |
Ian Collins <ian-news@hotmail.com>: Jun 16 12:53PM +1200 On 16/06/18 12:36, Richard wrote: > spec. Not meeting the entire spec is how we know we're "not done > writing tests" because we haven't yet pushed the implementation to be > the minimal thing that satisfies the requirements. I have seen quite a few cases where the "fake" code goes into production because the customer realises what it does is good enough to meet current demand! This often happens when market demand changes and parts of the requirement that were deemed essential are no longer wanted... -- Ian |
Vir Campestris <vir.campestris@invalid.invalid>: Jun 16 11:09PM +0100 On 14/06/2018 12:12, Paavo Helde wrote: > Maybe I should have mentioned that I am a physicist by training. In > physics, every (non-integer) number has an error margin. And the numbers > 13.4 and 13.5 are equal if this error margin is at least 0.1. Ex-biologist here. To me that measured value I'm looking at is one on a population that's most likely on a normal distribution. So that error margin merely covers _most_ of the indistinguishable values - not all of them :( But back to TDD. The hard problems to test for are timing issues. I have no faith that any reasonable suite of tests will pick up complex races or deadlocks. (Though TSAN helps) Andy |
Rosario19 <Ros@invalid.invalid>: Jun 16 10:55AM +0200 On Fri, 15 Jun 2018 12:50:00 +0100, Chris Vine wrote: >Secondly and more importantly, you have already been given the answer, >namely to use placement new, which is specifically intended to deal >with this case, i not use new() operator only malloc() or malloc like functions the new() operator i have is not the new() library provide >form is this: > void* p = malloc(sizeof(T)); > T* tp = new (p) T; this line what would make? call new, pass it the pointer to void* p call the constructor in the address of p of the compatible T constructor? > ... do something with tp ... > tp->~T(); > free(tp); this above seems to me better free(p) >There is even a similar example on the link I gave you. Your approach >does not work and demonstrates sheer pig-headed stupidity in the face >of your attention having been drawn to the correct tool for the job. in the start of the class, that use the generic T type i could write something as "this is ok only if type T allow the existence of one element that has in it all memory 0" this is equvalent to the "call one constructor on the type when the memory exist" |
Rosario19 <Ros@invalid.invalid>: Jun 16 11:02AM +0200 On Thu, 14 Jun 2018 22:59:14 -0700 (PDT), 嘱 Tiib wrote: >question "how to do it?" here at the first place? >Every regular in this group knows how to do it but it is >pointless to answer that to you. this is not true, 80% of C++ is out of my know, so i need some answer to question as "how call one constructor in the memory return from malloc()?" |
Chris Vine <chris@cvine--nospam--.freeserve.co.uk>: Jun 16 12:37PM +0100 On Sat, 16 Jun 2018 10:55:02 +0200 > On Fri, 15 Jun 2018 12:50:00 +0100, Chris Vine wrote: > i not use new() operator only malloc() or malloc like functions > the new() operator i have is not the new() library provide No, you have got something completely wrong, although it is difficult to decipher your remarks to find out what. operator new() either allocates and returns raw memory, or (when it takes a second void* argument in connection with a placement new expression) does nothing. In many implementations, an allocating operator new() comprises no more than a call to malloc(). You seem to be confusing operator new() with the new expression, which is something different. operator new() returns raw uninitialized memory. The new expression constructs an object in that memory. > call new, pass it the pointer to void* p > call the constructor in the address of p of the compatible T > constructor? It constructs an object of type T, via T's constructor, in the memory pointed to by p, rather than calling allocating operator new() to obtain a dynamic memory allocation and constructing it there. > > tp->~T(); > > free(tp); > this above seems to me better free(p) No, it makes no difference. The value of p and tp is the same, but one is of type void* and the other of type T*. Since free() takes its argument by void* it makes zero difference. > in it all memory 0" > this is equvalent to the "call one constructor on the type when the > memory exist" This is unintelligible. Possibly you asked the wrong question and you are not interested in placement new. Possibly you want to install your own global operator new() for your program which always hands off to malloc() (although that is probably what your default global operator new() already does anyway), or possibly you want to override global operator new for a particular class. The latter is pretty common for types that you want to implement their own memory pools. You still use the new expression to construct objects of such classes, but when the new expression obtains new memory it calls the class specific version of operator new() instead of global operator new(). Try getting a decent book on C++. |
"Öö Tiib" <ootiib@hot.ee>: Jun 16 06:36AM -0700 On Saturday, 16 June 2018 11:57:39 UTC+3, Rosario19 wrote: > this is not true, 80% of C++ is out of my know, so i need some answer > to question as "how call one constructor in the memory return from > malloc()?" I see that Chris Vine already explained to you that with placement new. // allocate memory void* p = malloc(sizeof(T)); // check that allocation worked if (p == nullptr) return outOfMemory; // construct T into that memory T* tp = new (p) T(arguments, ofTs, constructor); // ... use tp, now it points at T object ... // destroy T tp->~T(); // construct other T into same memory T* tp = new (p) T(otherArguments, ofTs, constructor); // ... use tp, now it points at different T object in same memory ... // destroy T tp->~T(); // free the memory free(tp); |
Rosario19 <Ros@invalid.invalid>: Jun 16 06:50PM +0200 On Sat, 16 Jun 2018 12:37:23 +0100, Chris Vine wrote: >Try getting a decent book on C++. all yours example, in this compiler: not compile "T *pt=new(p)T;" or "T *pt=new(p)T();" or "T*pt=new(p)T(parameters);" ... possible this compiler it is a little old or i not link any standard sys new or delete... but the situation it is easier and clearer thand one all you propose The step for resolve the situation are 1) write in the source code of the dll one use void* _export operator new(size_t sz){return yourMalloc(sz);} void _export operator delete(void*p){yourfree(p);} 2) link that .dll and not some other has different new or delete write in your favorite code using memory your allocator return and free it. example template <class> i32 prova(T& a) {T *p; // this below i had seen //1) call yourMalloc() function with argument sizeof(T) //2) call the default void constructor inthat memory for type T to*p //3) assing to p the address return yourMalloc p=new T; *p=a; ooo<<"this is a:"<<*p<<"\n"; // this below i had seen // 1) apply to *p the destructor for T // 2) call yourfree(p) for free the memory delete p; } so no memory leak and memory it seems correct used ------------------------------- in the dll had seen too void * _export operator new[](size_t sz){return yourMalloc(sz);} void _export operator delete[](void* pv){yourFree(pv);} but i have some doubit they are wrong.... are these right or wrong? |
Rosario19 <Ros@invalid.invalid>: Jun 16 06:53PM +0200 On Sat, 16 Jun 2018 06:36:06 -0700 (PDT), 嘱 Tiib wrote: here this > // construct T into that memory > T* tp = new (p) T(arguments, ofTs, constructor); not compile the same "p=malloc(sizeof(T));T* tp=new(p)T();" not compile |
Rosario19 <Ros@invalid.invalid>: Jun 16 06:58PM +0200 On Sat, 16 Jun 2018 18:53:01 +0200, Rosario19 wrote: >not compile >the same "p=malloc(sizeof(T));T* tp=new(p)T();" >not compile "T *p=(T*)malloc(sizeof(T));T* tp=new(p)T();" not compile |
"Öö Tiib" <ootiib@hot.ee>: Jun 16 10:06AM -0700 On Saturday, 16 June 2018 19:54:29 UTC+3, Rosario19 wrote: > >not compile > "T *p=(T*)malloc(sizeof(T));T* tp=new(p)T();" > not compile But it has been in C++ for ages wher you got so old compiler? Oh, sorry, forgot to tell that you need to #include <new> Also it seems that the cppreference does not state that anywhere. No wonder that you were confused. Otherwise it shoud work in C++2003 at least. Demo here: http://coliru.stacked-crooked.com/a/0a4465d8d6d90e0b Compiles and runs. |
Rosario19 <Ros@invalid.invalid>: Jun 16 07:18PM +0200 On Sat, 16 Jun 2018 10:06:51 -0700 (PDT), 嘱 Tiib <ootiib@hot.ee> wrote: >> not compile >But it has been in C++ for ages wher you got so old compiler? >Oh, sorry, forgot to tell that you need to #include <new> yes i not include any "<new>" header it would be for this |
Chris Vine <chris@cvine--nospam--.freeserve.co.uk>: Jun 16 07:39PM +0100 On Sat, 16 Jun 2018 18:50:25 +0200 > "T *pt=new(p)T;" or "T *pt=new(p)T();" or "T*pt=new(p)T(parameters);" > ... possible this compiler it is a little old > or i not link any standard sys new or delete... As I said: "Try getting a decent book on C++." If you had done so, it would have told you to include the <new> header in order to use placement new. (Also include this header if you want to override global or class operator new()/delete() - see below.) > 1) write in the source code of the dll one use > void* _export operator new(size_t sz){return yourMalloc(sz);} > void _export operator delete(void*p){yourfree(p);} [More of the same elided] As I said: "Possibly you asked the wrong question and you are not interested in placement new. Possibly you want to install your own global operator new() for your program which always hands off to malloc() (although that is probably what your default global operator new() already does anyway), or possibly you want to override global operator new for a particular class." Instead of being a total dick and ignoring all the advice you have been given by at least two people who know what they are talking about, consider this: 1. Not everyone else is an idiot. Possibly you have it wrong and you are the idiot. 2. When someone gives you advice, think about it and read up about it, because you are probably wrong and they are probably right. 3. If you are a beginner, adopt a better attitude and you will learn more. |
Rosario19 <Ros@invalid.invalid>: Jun 16 09:14PM +0200 On Sat, 16 Jun 2018 18:50:25 +0200, Rosario19 wrote: >void _export operator delete[](void* pv){yourFree(pv);} >but i have some doubit they are wrong.... >are these right or wrong? no doubit i debugged these above, at last delete[], possible i'm not smart enought but for me they are really miracolous how correctly free all and call recursivly the destructors of subtypes... no leak nothing wrong...thank you C++, thank you to all... new and delete are not simple operators they seems something more, as one infrastructure one sys (they are not the code one see) i had seen in the debugger somehting as thisType *p; p=new thisType[10]; .... delete p; |
Rosario19 <Ros@invalid.invalid>: Jun 16 09:18PM +0200 On Sat, 16 Jun 2018 21:14:48 +0200, Rosario19 <Ros@invalid.invalid> wrote: >p=new thisType[10]; >.... >delete p; thisType *p; p=new thisType[10]; .... delete [] p; |
Sky89 <Sky89@sky68.com>: Jun 16 04:55PM -0400 Hello.. My C++ synchronization objects library for Windows and Linux was updated.. There was a bug in some of scalable Rwlock variants and i have corrected this bug and now i think that all my scalable RWLocks are working correctly. You can download my new updated C++ synchronization objects library from: https://sites.google.com/site/scalable68/c-synchronization-objects-library Thank you, Amine Moulay Ramdane. |
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Jun 16 01:59PM +0100 Screenshot "Black (Emoji Reprise)": https://i.imgur.com/Rq6s22t.png TV ad: https://www.youtube.com/watch?v=IXvKOwQ4mvY /Flibble -- "Suppose it's all true, and you walk up to the pearly gates, and are confronted by God," Bryne asked on his show The Meaning of Life. "What will Stephen Fry say to him, her, or it?" "I'd say, bone cancer in children? What's that about?" Fry replied. "How dare you? How dare you create a world to which there is such misery that is not our fault. It's not right, it's utterly, utterly evil." "Why should I respect a capricious, mean-minded, stupid God who creates a world that is so full of injustice and pain. That's what I would say." |
Rosario19 <Ros@invalid.invalid>: Jun 16 10:05AM +0200 On Fri, 15 Jun 2018 13:01:14 +0200, Rosario19 wrote: > res->a=res->b=res->c=res->dD=0; > r2=-f.b; > v=fr(&r, r2, f.c, f.dD); one error was here because the above should be something as "v=fr(&r, r2, f.c, sqrti64(f.dD))" > res->dD=r2-fc4*res->c; > R 0; >} i64 gcdi64(i64 u, i64 v) {i64 t; if(u==0||v==0) R 0; W(u>0){if(u<v){t=u; u=v; v=t;} u = u%v; } R v; } void print(i64& n) {char p[128]; *p=0; _i64toa(n, p, 10); P("%s", p); } #include <math.h> #define sqrti64(x) ((i64) sqrtl((long double) x) ) #define absi64(x) (x>=0?x:-x) class form{ i64 a; i64 b; i64 c; i32 IsReduced(void){i64 t, dD; dD=b*b-4*a*c;t=dD-2*absi64(a);R absi64(t)<b && b<dD;} form(){a=b=c=0;} form(i64& fa,i64& fb,i64& fc){a=fa; b=fb; c=fc;} void assign(i64& fa,i64& fb,i64& fc){a=fa; b=fb; c=fc;} friend ostream& operator<<(ostream& o,const form& x) {i64 dD=x.b*x.b-4*x.a*x.c; o<<"("<<(long double)x.a<<", "<<(long double)x.b<<", "<<(long double)x.c<<", "<<(long double)dD<<")"; R o; } friend i32 fr(i64* res, i64& xb, i64& xa, i64& xdD) {i64 a2,absa,r,k; if(res==0) R -1; *res=0; if(xa ==0) R -1; r=xb; a2=2*xa; absa=absi64(xa); if(absa==xdD)R -1; if(absa>xdD) {if(xa>0) k=((-xa-xb)/a2)+1; else k=(( xa-xb)/a2)-1; r=xb+k*a2; if(r> absa) r-=absi64(a2); //if(r> absa)R -1; //if(r<=-absa)R -1; } else {if(xa>0) k=((xdD-a2-xb)/a2)+1; else k=((xdD+a2-xb)/a2)-1; r=xb+k*a2; if(r> xdD) r-=absi64(a2); //if(r> xdD) R -1; //if(r<=xdD-2*absa) R -1; } *res=r; R 0; } friend i32 rhoF(form* res, form& f, i64& delta, i64& sqrtdelta) {i64 r, r2, fc4; i32 v; if(res== 0)R -1; if(f.c== 0)R -1; res->a=res->b=res->c=0; r2=-f.b; v=fr(&r, r2, f.c, sqrtdelta); if(v ==-1)R -1; res->a =f.c; res->b=r; r2=r*r; fc4=4*f.c; res->c =(r2-delta)/fc4; R 0; } // suppone che i numeri a esso passato nn siano primi // Ritorna -1 per errore, altrimenti ritorna il numero dei loop effettuati e in res, // un fattore di n friend i32 Squfof(i64* res, i64& n) {i64 xdD,xb,dd,t,x, m, bound, l, gx, b1, ve[512]; i32 r; u32 i,v; form f,g, h; Mset<i64> buf; if(n<=1||res==0)R -1; *res=0; dd=sqrti64(n); if(dd*dd==n){*res=dd; R 0;} if(n%4==1){xdD= n; m=1; xb=(dd-1)/2; xb=2*xb+1;} else {xdD=4*n; m=2;dd=sqrti64(xdD); xb= dd /2; xb=2*xb ;} f.a=1; f.b=xb; f.c=(xb*xb-xdD)/4; l=sqrti64(dd); bound=4*l; t=absi64( f.c ); if(t==0)R -1; gx=gcdi64(t,m); gx=t/gx; buf.assegnaMem(ve, 512); if(gx<=l) {r=buf.add1(gx); if(r==-1)R -1; } F(i=2;i<bound;++i) { r=rhoF(&g,f, xdD, dd);if(r==-1)R -1; f=g; t=absi64(f.c); if(i%2==0) {ooo<<"i="<<i<<" f="<<f<<"\n"; x=sqrti64(t); if(x<=1) R -1; if(x*x==t && !buf.is(x)) break; } gx=gcdi64(t,m); gx=t/gx; if(gx<=l){r=buf.add1(gx); if(r==-1) R -1; } } if(i>=bound) R -1; v=i; if(f.c>0) {h.a= x*f.a; h.b=-f.b; h.c=x;} else {h.a=-x*f.a; h.b=-f.b; h.c=x;} // h.dD=h.b*h.b-4*h.a*h.c= f.b^2-4*x^2*f.a r=rhoF(&g, h, xdD, dd);if(r==-1) R -1; i=0; la: b1=g.b; r=rhoF(&h, g, xdD, dd); if(i%2==0)ooo<<"i="<<i<<" g="<<g<<"\n"; if(r==-1) R -1; g=h;++i;if(b1!=g.b)G la; ooo<<"i="<<i<<" g="<<g<<"\n"; t=absi64(g.a); v+=i; if(t<=1) R -1; if(t%2==0) t=t/2; x=n/t; m=x>t?t:x; if(x*t!=n)R -1; *res=m; R v; } }; #undef sqrti64 #undef absi64 i32 main96() {i64 m1, m2, mm; u32 i,j; i32 r; u8 *pc; Mset<snum> bu; mm=633003781; r=Squfof(&m1, mm); if(r==-1) ooo<<"Error\n"; else ooo<<"loop Conter="<<r<<" res=";print(m1);P("\n"); R 0; } i=2 f=(-7125.000000, 17591.000000, 11353.000000, 633003781.000000) i=4 f=(-13363.000000, 21611.000000, 3105.000000, 633003781.000000) i=6 f=(-12495.000000, 3131.000000, 12469.000000, 633003781.000000) i=8 f=(-3157.000000, 22391.000000, 10425.000000, 633003781.000000) i=10 f=(-6239.000000, 18125.000000, 12201.000000, 633003781.000000) i=12 f=(-12163.000000, 18049.000000, 6315.000000, 633003781.000000) i=14 f=(-9475.000000, 18059.000000, 8097.000000, 633003781.000000) i=16 f=(-13205.000000, 12081.000000, 9221.000000, 633003781.000000) i=18 f=(-483.000000, 24463.000000, 17891.000000, 633003781.000000) i=20 f=(-7055.000000, 16901.000000, 12309.000000, 633003781.000000) i=22 f=(-11647.000000, 15577.000000, 8379.000000, 633003781.000000) i=24 f=(-9285.000000, 19201.000000, 7117.000000, 633003781.000000) i=26 f=(-2835.000000, 21859.000000, 13685.000000, 633003781.000000) i=28 f=(-11009.000000, 16507.000000, 8187.000000, 633003781.000000) i=30 f=(-11275.000000, 6309.000000, 13153.000000, 633003781.000000) i=32 f=(-4431.000000, 24313.000000, 2363.000000, 633003781.000000) i=34 f=(-11261.000000, 22097.000000, 3213.000000, 633003781.000000) i=36 f=(-8503.000000, 11127.000000, 14971.000000, 633003781.000000) i=38 f=(-4659.000000, 18457.000000, 15687.000000, 633003781.000000) i=40 f=(-7429.000000, 16799.000000, 11805.000000, 633003781.000000) i=42 f=(-12423.000000, 18035.000000, 6193.000000, 633003781.000000) i=44 f=(-10791.000000, 24041.000000, 1275.000000, 633003781.000000) i=46 f=(-7295.000000, 19361.000000, 8847.000000, 633003781.000000) i=48 f=(-10629.000000, 5231.000000, 14245.000000, 633003781.000000) i=50 f=(-1615.000000, 21961.000000, 23331.000000, 633003781.000000) i=52 f=(-245.000000, 24789.000000, 18887.000000, 633003781.000000) i=54 f=(-6147.000000, 23897.000000, 2519.000000, 633003781.000000) i=56 f=(-17181.000000, 12917.000000, 6783.000000, 633003781.000000) i=58 f=(-15883.000000, 17551.000000, 5115.000000, 633003781.000000) i=60 f=(-4247.000000, 19101.000000, 15785.000000, 633003781.000000) i=62 f=(-7563.000000, 17783.000000, 10471.000000, 633003781.000000) i=64 f=(-1245.000000, 23209.000000, 18945.000000, 633003781.000000) i=66 f=(-5509.000000, 18373.000000, 13407.000000, 633003781.000000) i=68 f=(-10475.000000, 12509.000000, 11373.000000, 633003781.000000) i=70 f=(-11611.000000, 12985.000000, 9999.000000, 633003781.000000) i=72 f=(-14597.000000, 22181.000000, 2415.000000, 633003781.000000) i=74 f=(-18611.000000, 15933.000000, 5093.000000, 633003781.000000) i=76 f=(-855.000000, 24779.000000, 5557.000000, 633003781.000000) i=78 f=(-11059.000000, 24559.000000, 675.000000, 633003781.000000) i=80 f=(-20383.000000, 16725.000000, 4333.000000, 633003781.000000) i=82 f=(-17955.000000, 17971.000000, 4317.000000, 633003781.000000) i=84 f=(-20767.000000, 24969.000000, 115.000000, 633003781.000000) i=86 f=(-23805.000000, 22669.000000, 1251.000000, 633003781.000000) i=88 f=(-2905.000000, 21611.000000, 14283.000000, 633003781.000000) i=90 f=(-10233.000000, 13511.000000, 11005.000000, 633003781.000000) i=92 f=(-12739.000000, 16979.000000, 6765.000000, 633003781.000000) i=94 f=(-2791.000000, 21045.000000, 17029.000000, 633003781.000000) i=96 f=(-6807.000000, 14215.000000, 15827.000000, 633003781.000000) i=98 f=(-5195.000000, 24121.000000, 2463.000000, 633003781.000000) i=100 f=(-105.000000, 25051.000000, 12979.000000, 633003781.000000) i=102 f=(-12177.000000, 23447.000000, 1709.000000, 633003781.000000) i=104 f=(-5471.000000, 19363.000000, 11793.000000, 633003781.000000) i=106 f=(-13041.000000, 21859.000000, 2975.000000, 633003781.000000) i=108 f=(-20279.000000, 20767.000000, 2487.000000, 633003781.000000) i=110 f=(-5735.000000, 21881.000000, 6723.000000, 633003781.000000) i=112 f=(-10871.000000, 25027.000000, 153.000000, 633003781.000000) i=114 f=(-211.000000, 25061.000000, 5865.000000, 633003781.000000) i=116 f=(-6615.000000, 17831.000000, 11907.000000, 633003781.000000) i=118 f=(-12539.000000, 19095.000000, 5351.000000, 633003781.000000) i=120 f=(-3303.000000, 22529.000000, 9495.000000, 633003781.000000) i=122 f=(-10381.000000, 5311.000000, 14565.000000, 633003781.000000) i=124 f=(-1127.000000, 23515.000000, 17757.000000, 633003781.000000) i=126 f=(-6885.000000, 15541.000000, 14215.000000, 633003781.000000) i=128 f=(-8211.000000, 19955.000000, 7149.000000, 633003781.000000) i=130 f=(-3735.000000, 21881.000000, 10323.000000, 633003781.000000) i=132 f=(-6205.000000, 17819.000000, 12711.000000, 633003781.000000) i=134 f=(-11313.000000, 15023.000000, 9001.000000, 633003781.000000) i=136 f=(-5355.000000, 21859.000000, 7245.000000, 633003781.000000) i=138 f=(-5727.000000, 24205.000000, 2057.000000, 633003781.000000) i=140 f=(-23085.000000, 25121.000000, 21.000000, 633003781.000000) i=142 f=(-3933.000000, 22043.000000, 9351.000000, 633003781.000000) i=144 f=(-10615.000000, 5869.000000, 14097.000000, 633003781.000000) i=146 f=(-2387.000000, 20641.000000, 21675.000000, 633003781.000000) i=148 f=(-1353.000000, 23293.000000, 16711.000000, 633003781.000000) i=150 f=(-7935.000000, 21611.000000, 5229.000000, 633003781.000000) i=152 f=(-10715.000000, 22639.000000, 2811.000000, 633003781.000000) i=154 f=(-11923.000000, 1509.000000, 13225.000000, 633003781.000000) i=156 f=(-207.000000, 25153.000000, 399.000000, 633003781.000000) i=158 f=(-1215.000000, 23479.000000, 16819.000000, 633003781.000000) i=160 f=(-7875.000000, 21341.000000, 5637.000000, 633003781.000000) i=162 f=(-3047.000000, 24997.000000, 669.000000, 633003781.000000) i=164 f=(-12075.000000, 23791.000000, 1387.000000, 633003781.000000) i=166 f=(-15679.000000, 7991.000000, 9075.000000, 633003781.000000) i=168 f=(-14595.000000, 19031.000000, 4639.000000, 633003781.000000) i=170 f=(-16495.000000, 14909.000000, 6225.000000, 633003781.000000) i=172 f=(-5197.000000, 19135.000000, 12837.000000, 633003781.000000) i=174 f=(-11495.000000, 16451.000000, 7881.000000, 633003781.000000) i=176 f=(-12873.000000, 10673.000000, 10081.000000, 633003781.000000) i=178 f=(-13465.000000, 17441.000000, 6105.000000, 633003781.000000) i=180 f=(-10843.000000, 24183.000000, 1111.000000, 633003781.000000) i=182 f=(-5145.000000, 16459.000000, 17595.000000, 633003781.000000) i=184 f=(-4009.000000, 21359.000000, 11025.000000, 633003781.000000) i=186 f=(-2627.000000, 24545.000000, 2907.000000, 633003781.000000) i=188 f=(-12939.000000, 3911.000000, 11935.000000, 633003781.000000) i=190 f=(-4915.000000, 19361.000000, 13131.000000, 633003781.000000) i=192 f=(-11145.000000, 15389.000000, 8887.000000, 633003781.000000) i=194 f=(-6375.000000, 18091.000000, 11989.000000, 633003781.000000) i=196 f=(-12477.000000, 19067.000000, 5399.000000, 633003781.000000) i=198 f=(-2361.000000, 23095.000000, 10549.000000, 633003781.000000) i=200 f=(-6355.000000, 19029.000000, 10657.000000, 633003781.000000) i=202 f=(-1785.000000, 22811.000000, 15779.000000, 633003781.000000) i=204 f=(-8817.000000, 8887.000000, 15709.000000, 633003781.000000) i=206 f=(-1995.000000, 21359.000000, 22155.000000, 633003781.000000) i=208 f=(-1199.000000, 25009.000000, 1575.000000, 633003781.000000) i=210 f=(-21959.000000, 21677.000000, 1857.000000, 633003781.000000) i=212 f=(-14675.000000, 6459.000000, 10073.000000, 633003781.000000) i=214 f=(-11061.000000, 8435.000000, 12699.000000, 633003781.000000) i=216 f=(-6797.000000, 23819.000000, 2415.000000, 633003781.000000) i=218 f=(-3487.000000, 24337.000000, 2919.000000, 633003781.000000) i=220 f=(-11367.000000, 23101.000000, 2185.000000, 633003781.000000) i=222 f=(-1093.000000, 23123.000000, 22491.000000, 633003781.000000) i=224 f=(-1725.000000, 22991.000000, 15133.000000, 633003781.000000) i=226 f=(-9583.000000, 11891.000000, 12825.000000, 633003781.000000) i=228 f=(-8649.000000, 20837.000000, 5747.000000, 633003781.000000) i=230 f=(-45.000000, 25081.000000, 21929.000000, 633003781.000000) i=232 f=(-3197.000000, 19587.000000, 19499.000000, 633003781.000000) i=234 f=(-3285.000000, 20009.000000, 17705.000000, 633003781.000000) i=236 f=(-5589.000000, 18133.000000, 13607.000000, 633003781.000000) i=238 f=(-10115.000000, 11149.000000, 12573.000000, 633003781.000000) i=240 f=(-8691.000000, 20767.000000, 5803.000000, 633003781.000000) i=242 f=(-18765.000000, 23479.000000, 1089.000000, 633003781.000000) i=0 g=(33.000000, 25129.000000, -11645.000000, 633003781.000000) i=2 g=(3711.000000, 23081.000000, -6755.000000, 633003781.000000) i=4 g=(12159.000000, 6869.000000, -12045.000000, 633003781.000000) i=6 g=(6983.000000, 24677.000000, -861.000000, 633003781.000000) i=8 g=(22915.000000, 22291.000000, -1485.000000, 633003781.000000) i=10 g=(23155.000000, 24051.000000, -589.000000, 633003781.000000) i=12 g=(19137.000000, 14027.000000, -5699.000000, 633003781.000000) i=14 g=(9927.000000, 19541.000000, -6325.000000, 633003781.000000) i=16 g=(11625.000000, 4841.000000, -13109.000000, 633003781.000000) i=18 g=(3357.000000, 18907.000000, -20519.000000, 633003781.000000) i=20 g=(1745.000000, 23239.000000, -13317.000000, 633003781.000000) i=22 g=(11667.000000, 19939.000000, -5045.000000, 633003781.000000) i=24 g=(10703.000000, 22391.000000, -3075.000000, 633003781.000000) i=26 g=(16765.000000, 12871.000000, -6969.000000, 633003781.000000) i=28 g=(14631.000000, 14257.000000, -7343.000000, 633003781.000000) i=30 g=(13773.000000, 12431.000000, -8685.000000, 633003781.000000) i=32 g=(3895.000000, 24431.000000, -2319.000000, 633003781.000000) i=34 g=(16305.000000, 10661.000000, -7963.000000, 633003781.000000) i=36 g=(5775.000000, 25009.000000, -327.000000, 633003781.000000) i=38 g=(17707.000000, 10719.000000, -7315.000000, 633003781.000000) i=40 g=(9885.000000, 20999.000000, -4857.000000, 633003781.000000) i=42 g=(16169.000000, 14481.000000, -6545.000000, 633003781.000000) i=44 g=(707.000000, 24701.000000, -8085.000000, 633003781.000000) i=46 g=(2045.000000, 21181.000000, -22539.000000, 633003781.000000) i=48 g=(687.000000, 24193.000000, -17359.000000, 633003781.000000) i=50 g=(7521.000000, 19559.000000, -8325.000000, 633003781.000000) i=52 g=(13339.000000, 12937.000000, -8727.000000, 633003781.000000) i=54 g=(4305.000000, 21079.000000, -10957.000000, 633003781.000000) i=56 g=(2635.000000, 24681.000000, -2263.000000, 633003781.000000) i=58 g=(303.000000, 24587.000000, -23501.000000, 633003781.000000) i=60 g=(1389.000000, 24811.000000, -3135.000000, 633003781.000000) i=62 g=(21451.000000, 23823.000000, -763.000000, 633003781.000000) i=64 g=(2475.000000, 24491.000000, -3353.000000, 633003781.000000) i=66 g=(9615.000000, 16009.000000, -9795.000000, 633003781.000000) i=68 g=(2453.000000, 20983.000000, -19641.000000, 633003781.000000) i=70 g=(3795.000000, 19651.000000, -16261.000000, 633003781.000000) i=72 g=(7185.000000, 15869.000000, -13263.000000, 633003781.000000) i=74 g=(9791.000000, 8925.000000, -14129.000000, 633003781.000000) i=76 g=(4587.000000, 17363.000000, -18069.000000, 633003781.000000) i=78 g=(3881.000000, 20035.000000, -14919.000000, 633003781.000000) i=80 g=(8997.000000, 8191.000000, -15725.000000, 633003781.000000) i=82 g=(1463.000000, 23557.000000, -13341.000000, 633003781.000000) i=84 g=(11679.000000, 20233.000000, -4787.000000, 633003781.000000) i=86 g=(16019.000000, 13975.000000, -6831.000000, 633003781.000000) i=88 g=(16645.000000, 19941.000000, -3535.000000, 633003781.000000) i=90 g=(9031.000000, 13645.000000, -12369.000000, 633003781.000000) i=92 g=(10307.000000, 9521.000000, -13155.000000, 633003781.000000) i=94 g=(6673.000000, 23249.000000, -3465.000000, 633003781.000000) i=96 g=(21427.000000, 24523.000000, -369.000000, 633003781.000000) i=98 g=(8027.000000, |
ram@zedat.fu-berlin.de (Stefan Ram): Jun 15 11:28PM >defining the same requirement that would be conveyed by a corresponding >English document that specifies what the code being tested is required >to do with every possible value of it's inputs. "Abstraction" is hard for some programmers or programming aspirants. They prefer "programming by example". For one - exaggerated - example: Some people cannot create a sentence like, "I want the program to remove every other letter.". Instead they come into a newsgroup and say: I want the input abcdef be mapped to ace . They expect other people to create the abstract wording "remove every other letter" for them from the example. However, there are infinitely many different specifications that would all yield "ace" for the above input. Therefore, examples can never replace a specification by rules. Writing tests must appeal to those people more than writing abstract specifications! But programming ultimately is about writing general rules. |
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page. To unsubscribe from this group and stop receiving emails from it send an email to comp.lang.c+++unsubscribe@googlegroups.com. |
No comments:
Post a Comment