deepthroat
Erfahrenes Mitglied
Hi.
http://www.ddj.com/cpp/184403804
Gruß
\edit: Zurück zum Thema. Ich hab mal einen kleinen Testtreiber geschrieben:
Ergebnis:
Wobei die FAILED Fälle wieder mal auf undefiniertes Verhalten hinauslaufen.
Gruß
Ernsthaft?Ich dachte auch schon darüber nach, die Funktionen mit der Ungarischen Notation zu benennen.
Warum mußt du dafür aber einen kryptischen Code verwenden? Benenne die Variablen doch einfach richtig.Warum ich die Ungarische Notation überhaupt anwende liegt meines Erachtens auf der Hand:
1. Ich habe ständig vor Augen was das für eine Variable is, was sie für einen Sinn hat und wofür ich sie brauche
Das verhinderst du nur wenn du die Variablen richtig typisierst, nicht indem du sie benennst. (wobei man es natürlich an dem Präfix-Code feststellen kann).2. Keine Type-Mismatching
Dafür ist der Compiler doch da. Du machst dir zuviel Arbeit.3. Compiler-Errors stören mich irgendwie, wenn sie wegen solchen Kleinigkeiten auftreten
Gut, wenn dir das wirklich hilft.4. Das Projekt ist transparenter, und ich kann mich besser wieder einfinden.
Allerdings.Aber ich glaube, über das Thema lässt sich ewig diskutieren.
http://www.ddj.com/cpp/184403804
Gruß
\edit: Zurück zum Thema. Ich hab mal einen kleinen Testtreiber geschrieben:
C++:
extern "C" {
#include "termcalc.h"
}
#include <cstdio>
int testnr = 1;
#define TEST_EVAL(expr) test_calc(#expr, (expr))
#define RED "\x1b[31m"
#define GREEN "\x1b[32m"
#define BOLD "\x1b[1m"
#define RESET "\x1b[0m"
void test_calc(char* str, double result) {
double r;
int code = 0;
printf("TEST %2d %15s ", testnr++, str);
r = calcString(str, &code);
if (code == 0) {
printf("= %# 9.4g %5s %s\n" RESET,
r, "...",
(r == result) ? (BOLD GREEN "PASS") : (BOLD RED "FAIL"));
} else {
printf(BOLD RED "%17s FAILED. (Error: %d)\n" RESET, "...", code);
}
}
void test_fail(char* str) {
double r;
int code;
printf("TEST %2d %15s", testnr++, str);
r = calcString(str, &code);
if (code == 0) {
printf(" = %# 9.4g %5s " BOLD RED "XPASS\n" RESET, r, "...");
} else {
printf(BOLD GREEN "%7s XFAIL\n" RESET, "...");
}
}
int main(int argc, char *argv[])
{
TEST_EVAL(3 + 3);
TEST_EVAL(5);
TEST_EVAL(33 - 5 * 4);
TEST_EVAL((3 - 4) * 5);
TEST_EVAL(64 / 8 + 1);
TEST_EVAL(-2 + 4);
TEST_EVAL(-2 + 4 / 2);
TEST_EVAL((-2) + 3);
TEST_EVAL(3 + (-2));
TEST_EVAL(3.5e11 + 33);
test_fail("(3 + 2");
test_fail("3 + ");
test_fail("3 # 5");
test_fail("");
}
Code:
TEST 1 3 + 3 = 6.000 ... PASS
TEST 2 5 = 5.000 ... PASS
TEST 3 33 - 5 * 4 = 13.00 ... PASS
TEST 4 (3 - 4) * 5 ... FAILED. (Error: 2)
TEST 5 64 / 8 + 1 = 9.000 ... PASS
TEST 6 -2 + 4 = 2.000 ... PASS
TEST 7 -2 + 4 / 2 = 0.0000 ... PASS
TEST 8 (-2) + 3 ... FAILED. (Error: 2)
TEST 9 3 + (-2) ... FAILED. (Error: 2)
TEST 10 3.5e11 + 33 = 3.500e+011 ... PASS
TEST 11 (3 + 2 = 2.000 ... XPASS
TEST 12 3 + = 3.000 ... XPASS
TEST 13 3 # 5 = 3.000 ... XPASS
TEST 14 = 0.0000 ... XPASS
Gruß
Zuletzt bearbeitet: