From a1b09966feae8c15dd65bbbf11a84fdbfca196a4 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Fri, 17 Nov 2023 13:23:34 -0700 Subject: [PATCH] Add more tests, fix major crash --- .gitattributes | 2 +- legacy/StringTokenizer.cpp | 4 ++-- legacy/infiz.ncb | Bin 50176 -> 74752 bytes legacy/infiz.opt | Bin 61952 -> 61952 bytes legacy/tests.cpp | 34 ++++++++++++++++++++++++++++++---- legacy/tests/tests.plg | 33 +++++++++++++++++++++++++++------ 6 files changed, 60 insertions(+), 13 deletions(-) diff --git a/.gitattributes b/.gitattributes index c78e7b4..0d1bca0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,7 +6,7 @@ *.{cmd,[cC][mM][dD]} text eol=crlf *.{bat,[bB][aA][tT]} text eol=crlf *.{vcxproj,vcxproj.filters} text eol=crlf -/legacy/*.{cpp,hpp,h,dsp,dsw} text eol=crlf +/legacy/*.{cpp,hpp,h,dsp,dsw,plg} text eol=crlf ############################### # Git Large File System (LFS) # diff --git a/legacy/StringTokenizer.cpp b/legacy/StringTokenizer.cpp index badcbd7..b31f314 100644 --- a/legacy/StringTokenizer.cpp +++ b/legacy/StringTokenizer.cpp @@ -5,7 +5,7 @@ StringTokenizer::StringTokenizer(char * n_string) { - string = new char[strlen(n_string)]; + string = new char[strlen(n_string) + 1]; strcpy(string, n_string); stringLen = strlen(string); @@ -16,7 +16,7 @@ StringTokenizer::StringTokenizer(char * n_string) { StringTokenizer::~StringTokenizer() { - delete string; + delete [] string; } char * StringTokenizer::nextToken() diff --git a/legacy/infiz.ncb b/legacy/infiz.ncb index 207f5748db4dc1e7f0f0374aa0027d5d74beafea..8e0eca1782e2d1bf6e5dbd902ed00acfafa4bfcb 100644 GIT binary patch delta 2397 zcmchYUu;uV9LImX=d^3t0)tK0$p#%vyeLS)e}JMzhZJK>V^FHWI0+<;S zT11op!x&G2ome94X@|8S8UhdDeg&KYt6&`Ood(O$jlmJ44cY{!p<`f=k1~|RMIHkd z2vE+W14f~bgBCa>M~ncNH8qDkCRb~1fz7zT5#!7pv;t?XH66i)~UMW zpPIYDEOfWWyor1S_PIV!cNbm# zN3kfcRB%6k#MP^uqS1C84Y9hr(YED7Pailw|(-`2gd^Tq5iB0zt?Bq>fa{9 zd;09{r4AWxb%fnhI$%Igmez`Rt7A7EJ-f)D1%yK3mmT6)SC6*)l+4bELaHHCPxX|= z@Did3fT;`Uqj@?+A=)!f2PsJJ2XD{!lb~JuXFw?Fnoi}D+O*UoP^+*iVrcAr0jPIK9vnf-U z$0qG&jsG}O&P>|m=c~$vnMk!rCu=S(E+t7)1E2Qt|_Z{ zkj)wKcn}}JdK#L|*!ZUArJXZ=Hf0UEi8^S-9Zfmw$(FmA^2F9j1KXp5`Dqvs?41?? zd^QTJ0?tig%Uq*s?!PVub8_(O#)4%jtDF~w#0_<0bfG9D%c^|pRd_R;iPo9y35tPw zM@^w)ZVDZ9tsUIgF*k+YQBzFexhlqW%uS(VZVDZ9Q|OqRLhq<4u%p;eyUpt6J4MDFZo!7g#0rfo%8ddK1&@C1*enG3_cUqUAW_!VC|^7XM!Amxf&>x zy5!V$48%(j8EnBtPienQ;EsKzv_?4Z^z*S$KYJ|jkuZ6*-Cu|YecUMis>^U+7{D>g zeIaq-@W1wj82S+#rUtTssugHhEBwRZ`{@hZ7BX&MsCWziS6_%?AvbbZnAz>=Mtl$( z<{&h40GbVBf=%=+JvSG@D6OZBh~y^p1&-j-*}l->_Jx(yNe|O1dW1~c%n=;^yf=8S zhx)JQ@9j`O@}n+b_x7LM0uF#~0mn~X)CG*hF~S8r^X{>`oa?P_5slkLoJKgfh;(hj zE8?9~U#m^HMV!JsE@BwuBBp+xaEoXne4P3$-p8pAf}Hv)$f+L!IrX()Cb+qiW11N^ z_PNV?VK4S`sZZjCoca_VfXA6K!^DzJ;ErmsH2;%K;TVE#==P3@my8 delta 585 zcmZ9JF-RLx7{|YR@3l$M+N2IDl$b(F>mZ&&!Mdmv!K%Xz3O9CixWOTXPy^nWF?pB4 zp@ndWb~O1eC7>0TLa2h_aBy_Ypi~^%K$re6HX!Bh&+q%c?|mQNd(Ukuw;+pCeUp?j zh`w+rCOGMSmpZFBseX=nY1Jo*ZhK}xU*wmE=p`Ky(HYcZ8}T*t3yShHXoo*Rl%zp? z|9qMdyHx7cd9%*QSXBEIo1a5d(EVNu@b925xoZCw`YLW1UNt+;Y4?YGp->!Y+c*&! z&;KHx`Z-O^qbS;axzd|h(0enTAh-dIk^y$FwBk#Z`>fxj)V!=WJpjPU%%YD#< Zx9g$U02^rZ5NtO>!NK8*+%rcE^%stvsJ;LI diff --git a/legacy/infiz.opt b/legacy/infiz.opt index 5a633c70d89b07586efca137a915f3ae40c77eda..776d420ab53ab9cb1f84f2699027ef26ccfe0546 100644 GIT binary patch literal 61952 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 delta 1328 zcmcgsUr1A76#wq-z5C;w+g#1HK(CRsvWBTapaku1iD0wTXpj%Cnq=JEayKpL&ut6| zqCf2DdawtB5EBIPKJ}s!KKSB81S(})4?;tN3hXVgbMKr?*k1eK$N9eV=R3c1&$*wp zK}#F-OdCV7P|Z}aJ(D$39BwlmCZZ*TFo7TwFu#>K>?0WkcUu4gk_r>)D^+11IN;4ZiN8|pc)&vU88pptc8k47k>C;Wwh@XgRQ zv5+TROxi&TFj-zw6^u)#;HQ*PNFV`~4{|{wOQs@41>$P(SimJO2b#>lv6Y2AXGeI- zL@A?U%WR?D#r`LMQkN*Af~N{?KKNrWE{8wd|h+7RM7;wb7l#4AJuVMY4{ zfmO;HN307N^umB;9GI1gxn?P{%MFMi2)gCvmH;{qAnHqcFMNX?=|< z1)o?#?0BCc7w%U6J0~J1ajULec=zsbyKh7yFum$C#Lz*(`^4%~lakhkP$i75M?kX{ z$9_6sVkJmvck-07m=s4g`8kRYLY8_dz-pLca!laG*T)pSdwTZe0j1eJ4X@n;OG;7- zHYx9il2Mf~nf5|@#R1H>awtzdv?^~%#g2z6;Z4d9Khh4+rOV|%+D)c#zyDhkEmPmg M`9Rs8H|-bw57QWWY5)KL diff --git a/legacy/tests.cpp b/legacy/tests.cpp index 02cf4f1..54af179 100644 --- a/legacy/tests.cpp +++ b/legacy/tests.cpp @@ -18,13 +18,39 @@ void run_test(const char *input, RationalNumber expected) // then fix later! StringTokenizer st(const_cast(input)); - RationalNumber result = *evaluateExpression(&st); - assert(result.getDenominator() == expected.getDenominator()); - assert(result.getNumerator() == expected.getNumerator()); - std::cout << "PASS: input: " << input << " output: " << result.getNumerator() << '/' << result.getDenominator() << '\n'; + // these will have to change once I make the code correct without heap everywhere + + // why you used the heap: + // * stack was too small! (not right!) + // * that's just how we did it back then! (but that's still bad practice even then!) + // + // actual reasons: + // * I didn't understand copy constructors + // * I didn't use stdlib + // * I was learning Java also at that time + // * I don't recall professors ever discussing memory leaks or efficiency! + + RationalNumber *result = evaluateExpression(&st); + if (result->getDenominator() != expected.getDenominator() || + result->getNumerator() != expected.getNumerator()) { + std::cout << "FAIL: "; + } else { + std::cout << "PASS: "; + } + + std::cout << "input: " << input + << " expected: " << expected.getNumerator() << '/' << expected.getDenominator() + << " got: " << result->getNumerator() << '/' << result->getDenominator() << '\n'; } int main() { run_test("(3 + 2)", RationalNumber(5, 1)); + run_test("(3 / 2)", RationalNumber(3, 2)); + run_test("(4 / 2)", RationalNumber(4, 2)); + run_test("(4 / 2) * 5", RationalNumber(20, 2)); + + // we need to evaluate this for later, I don't think + // this is correct, but we're capturing the current state of things. + run_test("1 / 2 / 3", RationalNumber(3, 2)); return 0; } \ No newline at end of file diff --git a/legacy/tests/tests.plg b/legacy/tests/tests.plg index 463ef22..ad73ca0 100644 --- a/legacy/tests/tests.plg +++ b/legacy/tests/tests.plg @@ -3,22 +3,43 @@
 

Build Log

+--------------------Configuration: InfixEvaluator - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP31DC.tmp" with contents +[ +/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"Debug/InfixEvaluator.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\Users\Jason\Documents\GitHub\infiz\legacy\Evaluator.cpp" +"C:\Users\Jason\Documents\GitHub\infiz\legacy\RationalNumber.cpp" +"C:\Users\Jason\Documents\GitHub\infiz\legacy\Stack.cpp" +"C:\Users\Jason\Documents\GitHub\infiz\legacy\StringTokenizer.cpp" +] +Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSP31DC.tmp" +Creating command line "link.exe -lib /nologo /out:"Debug\InfixEvaluator.lib" .\Debug\Evaluator.obj .\Debug\RationalNumber.obj .\Debug\Stack.obj .\Debug\StringTokenizer.obj " +

Output Window

+Compiling... +Evaluator.cpp +RationalNumber.cpp +Stack.cpp +StringTokenizer.cpp +Creating library... +

--------------------Configuration: tests - Win32 Debug--------------------

Command Lines

-Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSPE6C6.tmp" with contents +Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP3306.tmp" with contents [ -/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/tests.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/tests.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c "C:\Users\Jason\Documents\GitHub\infiz\legacy\tests.cpp" ] -Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSPE6C6.tmp" -Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSPE6C7.tmp" with contents +Creating command line "cl.exe @C:\Users\Jason\AppData\Local\Temp\RSP3306.tmp" +Creating temporary file "C:\Users\Jason\AppData\Local\Temp\RSP3307.tmp" with contents [ -kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/tests.pdb" /debug /machine:I386 /out:"Debug/tests.exe" /pdbtype:sept +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/tests.pdb" /debug /machine:I386 /out:"Debug/tests.exe" /pdbtype:sept .\Debug\tests.obj \Users\Jason\Documents\GitHub\infiz\legacy\InfixEvaluator\Debug\InfixEvaluator.lib ] -Creating command line "link.exe @C:\Users\Jason\AppData\Local\Temp\RSPE6C7.tmp" +Creating command line "link.exe @C:\Users\Jason\AppData\Local\Temp\RSP3307.tmp"

Output Window

Compiling... tests.cpp