Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Testcases
copy’n pasted das vor “return 0;” in der main.ccp, prüft ein paar basisfunktionalitäten
//Complex testing
{
//Constructor & Get/Set
cout<<"Test by Sheppy, use with care, no warranty !!!\n";
float a = 4;
float b = 2;
Complex* c1 = new Complex();
c1->setReal(a);
c1->setImag(b);
Complex *c2 = new Complex(a,b);
if(!(c1->getReal()==c2->getReal()&&c1->getImag()==c2->getImag())){
cout<<"Constructor(s), get(s) or set(s) broken\n";
exit(1);
}
//print
cout<<"Your print() output: ";
c1->print();
cout<<"Your '<<' op output: ";
cout<<*c1;
//operations
c1->add(*c2);
if(!(c1->getReal()==a*2&&c1->getImag()==b*2)){
cout<<"add broken\n"; exit(1);
}
cout<<"add ok\n";
c1->sub(*c1);
c1->sub(*c1);
if(!(c1->getReal()==0&&c1->getImag()==0)){
cout<<"sub broken\n"; exit(1);
}
cout<<"sub ok\n";
Complex* c3 = new Complex(8,2);
delete(c2);
c2 = new Complex(16,2);
c3->div(*c2);
if(!(c3->getReal()>0.5&&c3->getReal()<0.6&&c3->getImag()>0.06&&c3->getImag()<0.062)){
c3->print();
cout<<"div broken\n"; exit(1);
}
cout<<"div(!0) looks good\n";
delete(c3);
c2->setReal(8); c2->setImag(2);
Complex *c4 = new Complex(4,2);
c4->mult(*c2);
if(!(c4->getReal()==28&&c4->getImag()==24)){
c4->print();
cout<<"mult broken\n"; exit(1);
}
c4->conj();
if(c4->getImag()!=-24)
cout<<"conjugation broken\n";
//try same with operators
c1->setReal(a); c1->setImag(b);
c2->setReal(a); c2->setImag(b);
c3->setReal(8); c3->setImag(2);
cout<<"Checking Operator overloading (+=, -= ....)\n";
cout<<"WARNING: - operator will NOT be checked\n";
//--------------------------------------
*c1+=*c2;
if(!(c1->getReal()==a*2&&c1->getImag()==b*2)){
cout<<"add broken\n"; exit(1);
}
cout<<"add ok\n";
*c1-=*c2;
*c1-=*c2;
if(!(c1->getReal()==0&&c1->getImag()==0)){
cout<<"sub broken\n"; exit(1);
}
cout<<"sub ok\n";
delete(c2);
Complex *c5 = new Complex(16,2);
*c3/=*c5;
if(!(c3->getReal()>0.5&&c3->getReal()<0.6&&c3->getImag()>0.06&&c3->getImag()<0.062)){
cout<<"div(!0) broken\n"; exit(1);
}
cout<<"div(!0) ok\n";
delete(c3);
c5->setReal(8); c5->setImag(2);
Complex *c6 = new Complex(4,2);
*c6*=*c5;
if(!(c6->getReal()==28&&c6->getImag()==24)){
cout<<"mult broken\n"; exit(1);
}
cout<<"mult ok\n";
c1->setReal(a); c1->setImag(b);
c2->setReal(a); c2->setImag(b);
c3->setReal(8); c3->setImag(2);
cout<<"Checking Operator overloading (+,-,* ...)\n";
//----------------------------------------
*c1=*c1+*c2;
if(!(c1->getReal()==a*2&&c1->getImag()==b*2)){
cout<<"add broken\n"; exit(1);
}
cout<<"add ok\n";
*c1=*c1-*c2;
*c1=*c1-*c2;
if(!(c1->getReal()==0&&c1->getImag()==0)){
cout<<"sub broken\n"; exit(1);
}
cout<<"sub ok\n";
delete(c2);
Complex *c8 = new Complex(16,2);
*c3=*c3/ *c8;
if(!(c3->getReal()>0.5&&c3->getReal()<0.6&&c3->getImag()>0.06&&c3->getImag()<0.062)){
cout<<"div(!0) broken\n"; exit(1);
}
cout<<"div(!0) looks good\n";
delete(c3);
c8->setReal(8); c8->setImag(2);
Complex *c9 = new Complex(4,2);
*c9=*c9 * *c8;
if(!(c9->getReal()==28&&c9->getImag()==24)){
cout<<"mult broken\n"; exit(1);
}
cout<<"mult ok\n";
cout<<"Everything went ok'ish, pls note that this does not necessarily mean that your code is correct\n";
cout<<"Trying Division by zero \n: Should lead to something like this: A1: complex.cpp:XX: void Complex::div(const Complex&): Assertion 'XXXXXXXXXX' failed. Aborted.\n";
fflush(stdout);
Complex* c10 = new Complex(0,0);
c8->div(*c10);
cout<<"WARNING: Division by zero does not throw exception as expected! \n";
}
Abend, erstmal danke für den Test.
Die if-Abfrage muss in geschweifte Klammern,da sonst das exit(1) in jedem Fall ausgeführt wird, und das Programm abbricht.
Gruss
Edit: Bin anscheinend nicht in der Lage das farblich zu markieren…
[m][code]
[/m]Würde die sache sicherlich etwas lesbarer gestalten.
Farbige Markierung sollte mit
[m]
[color=< Farbe >]
[/m]gehen. Falls das in Quotes gewollt ist, dann muss dieser Befehl innerhalb der Quote-Marks notiert werden.
Hm, woran erinnert mich das?
Danke ich hatte mich schon gefragt wie man den code hier highlighten kann…
Und ihr habt natuerlich recht mit den exits die hatte ich so nachtraeglich in den code geschmissen und nicht mehr drüber nachgedacht/ausgeführt aber gestern war eh mein tag der retardeden fehler^^
Beginnt im originalen Code in Zeile 37.
An der Stelle haut er mich auch immer raus, aber liegt daran dass ich c3 / c2 teile und du c2 / c3.
Welche Version ist nun richtig?
deins, fix ich auch gleich
sieher hier: https://www.mathsisfun.com/numbers/complex-number-calculator.html
Müsste 2a+2bi - (a+bi) nicht a+bi ergeben?
(ähnlich in Z.89/90)
(4+2i)*(16+2i) = 60+40i
Output:
================================
Test by Sheppy, use with care, no warranty !!!
Your print() output: 4 + 2i
Your '<<' op output: 4 + 2i
add ok
sub ok
div(!0) looks good
Checking Operator overloading (+=, -= ....)
WARNING: - operator will NOT be checked
add ok
sub ok
div(!0) ok
mult ok
Checking Operator overloading (+,-,* ...)
add ok
sub ok
div(!0) looks good
mult ok
Everything went ok'ish, pls note that this does not necessarily mean that your code is correct
Trying Division by zero: Expected: A1: complex.cpp:62: void Complex::div(const Complex&): Assertion 'XXXXXXXXXX' failed. Aborted.
A1: complex.cpp:62: void Complex::div(const Complex&): Assertion `nenReal!=0' failed.
Aborted
ich denke jetzt stimmt es (endlich) danke fürs bugtracking ich hoffe es hilft noch jemanden
Eine kleine Anmerkung: In C++ muss man seine Objekte nicht mit [m]new[/m] erzeugen. Wenn man es doch macht (gibt verschiedene Gründe), dann sollte es auch immer ein entsprechendes [m]delete[/m] geben, damit es keinen Memoryleak gibt und hier in dem Fall der Destruktor auch aufgerufen und getestet wird.
Hier würde bspw. ein einfaches
...
Complex c2(a, b);
...
Complex c3(8, 2);
...
c3.div(c2);
ausreichen.
Gibt auch in /home/cip/adm/he29heri/pub/algoks noch ein paar AlgoKS-Testcases.