digitalmars.D.learn - exceptions thrown when running app with failed unittests
- Ervin Bosenbacher (73/73) Mar 19 2017 Its my 2nd day into D, I am already in deep love (:D), and I
- cym13 (7/12) Mar 19 2017 Well, unittests can pass or fail and as the exception states
- Ervin Bosenbacher (3/17) Mar 19 2017 Thank you :) Maybe I need to rephrase. Is it normal to see the
- Ervin Bosenbacher (4/22) Mar 19 2017 If someone can just give me more clarifications that would be
- Adam D. Ruppe (3/5) Mar 19 2017 Yeah, it is normal, though IMO useless and ought to just be
- Ervin Bosenbacher (2/8) Mar 19 2017 Thx Adam.
- Jacob Carlborg (6/14) Mar 20 2017 You might want to look at using some unit test framework/library, as
- Ervin Bosenbacher (2/19) Mar 20 2017 That is really cool! Thx.
- =?UTF-8?Q?Ali_=c3=87ehreli?= (8/38) Mar 19 2017 Since there is no 5 in the array, that will return false and the
Its my 2nd day into D, I am already in deep love (:D), and I would like to understand whether this is normal behavior or something went terribly wrong, so all help is greatly appreciated. Following the book of The D Programming language I have the code below: bool binarySearch(T)(T[] input, T value) { while (!input.empty) { auto i = input.length / 2; auto mid = input[i]; if (mid > value) input = input[0 .. i]; else if (mid < value) input = input[i + 1 .. $]; else return true; } return false; } safe nothrow unittest { assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 6)); assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 5)); } void main() { bool s1 = binarySearch([1, 3, 6, 7, 9, 15], 6); bool s2 = binarySearch!(int)([1, 3, 6, 7, 9, 15], 5); writeln(s1, s2); } Then I compile using the command $ dmd source/app.d -unittest and execute as follows $ ./app Then the output core.exception.AssertError source/app.d(62): unittest failure ---------------- 4 app 0x000000010b18d1d0 _d_unittest + 152 5 app 0x000000010b183d1e void app.__unittest_fail(int) + 38 6 app 0x000000010b183df4 nothrow safe void app.__unittestL60_1() + 184 7 app 0x000000010b183ca0 void app.__modtest() + 8 8 app 0x000000010b18db54 int core.runtime.runModuleUnitTests().__foreachbody2(object.ModuleInfo*) + 44 9 app 0x000000010b186656 int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)).__lambda2(immutable(object.ModuleInfo*)) + 34 10 app 0x000000010b1a4471 int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))).__foreachbody2(ref rt.sections_osx_x86_64.SectionGroup) + 85 11 app 0x000000010b1a43fc int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))) + 32 12 app 0x000000010b18662d int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)) + 33 13 app 0x000000010b18da3e runModuleUnitTests + 126 14 app 0x000000010b19e312 void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() + 22 15 app 0x000000010b19e2ab void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) + 31 16 app 0x000000010b19e21e _d_run_main + 458 17 app 0x000000010b183d37 main + 15 18 libdyld.dylib 0x00007fff95f2d254 start + 0 19 ??? 0x0000000000000000 0x0 + 0 The compiles is DMD64 D Compiler v2.073.1 Copyright (c) 1999-2016 by Digital Mars written by Walter Bright and I am executing this on OSX 10.12
Mar 19 2017
On Sunday, 19 March 2017 at 22:13:21 UTC, Ervin Bosenbacher wrote:Its my 2nd day into D, I am already in deep love (:D), and I would like to understand whether this is normal behavior or something went terribly wrong, so all help is greatly appreciated. [...]Well, unittests can pass or fail and as the exception states there it failed. Binary search returns true if it found the element in the array, false otherwise. 5 is not an element of [1, 3, 6, 7, 9, 15] so binarySearch returned false. Assert throws an error if its argument is false to it threw. Nothing out of the ordinary except maybe a broken test.
Mar 19 2017
On Sunday, 19 March 2017 at 22:20:58 UTC, cym13 wrote:On Sunday, 19 March 2017 at 22:13:21 UTC, Ervin Bosenbacher wrote:Thank you :) Maybe I need to rephrase. Is it normal to see the long trace output instead of just a failed unit test message?Its my 2nd day into D, I am already in deep love (:D), and I would like to understand whether this is normal behavior or something went terribly wrong, so all help is greatly appreciated. [...]Well, unittests can pass or fail and as the exception states there it failed. Binary search returns true if it found the element in the array, false otherwise. 5 is not an element of [1, 3, 6, 7, 9, 15] so binarySearch returned false. Assert throws an error if its argument is false to it threw. Nothing out of the ordinary except maybe a broken test.
Mar 19 2017
On Sunday, 19 March 2017 at 22:33:26 UTC, Ervin Bosenbacher wrote:On Sunday, 19 March 2017 at 22:20:58 UTC, cym13 wrote:If someone can just give me more clarifications that would be greatly appreciated. (For some reason I did not think that to see the stack trace is normal)On Sunday, 19 March 2017 at 22:13:21 UTC, Ervin Bosenbacher wrote:Thank you :) Maybe I need to rephrase. Is it normal to see the long trace output instead of just a failed unit test message?Its my 2nd day into D, I am already in deep love (:D), and I would like to understand whether this is normal behavior or something went terribly wrong, so all help is greatly appreciated. [...]Well, unittests can pass or fail and as the exception states there it failed. Binary search returns true if it found the element in the array, false otherwise. 5 is not an element of [1, 3, 6, 7, 9, 15] so binarySearch returned false. Assert throws an error if its argument is false to it threw. Nothing out of the ordinary except maybe a broken test.
Mar 19 2017
On Sunday, 19 March 2017 at 22:33:26 UTC, Ervin Bosenbacher wrote:Is it normal to see the long trace output instead of just a failed unit test message?Yeah, it is normal, though IMO useless and ought to just be removed (or at least shortened to just the top few lines).
Mar 19 2017
On Sunday, 19 March 2017 at 23:23:48 UTC, Adam D. Ruppe wrote:On Sunday, 19 March 2017 at 22:33:26 UTC, Ervin Bosenbacher wrote:Thx Adam.Is it normal to see the long trace output instead of just a failed unit test message?Yeah, it is normal, though IMO useless and ought to just be removed (or at least shortened to just the top few lines).
Mar 19 2017
On 2017-03-20 00:49, Ervin Bosenbacher wrote:On Sunday, 19 March 2017 at 23:23:48 UTC, Adam D. Ruppe wrote:You might want to look at using some unit test framework/library, as unit-threaded [1], which might give you a better experience. [1] http://code.dlang.org/packages/unit-threaded -- /Jacob CarlborgOn Sunday, 19 March 2017 at 22:33:26 UTC, Ervin Bosenbacher wrote:Thx Adam.Is it normal to see the long trace output instead of just a failed unit test message?Yeah, it is normal, though IMO useless and ought to just be removed (or at least shortened to just the top few lines).
Mar 20 2017
On Monday, 20 March 2017 at 07:36:47 UTC, Jacob Carlborg wrote:On 2017-03-20 00:49, Ervin Bosenbacher wrote:That is really cool! Thx.On Sunday, 19 March 2017 at 23:23:48 UTC, Adam D. Ruppe wrote:You might want to look at using some unit test framework/library, as unit-threaded [1], which might give you a better experience. [1] http://code.dlang.org/packages/unit-threadedOn Sunday, 19 March 2017 at 22:33:26 UTC, Ervin Bosenbacher wrote:Thx Adam.Is it normal to see the long trace output instead of just a failed unit test message?Yeah, it is normal, though IMO useless and ought to just be removed (or at least shortened to just the top few lines).
Mar 20 2017
On 03/19/2017 03:13 PM, Ervin Bosenbacher wrote:Its my 2nd day into D, I am already in deep love (:D), and I would like to understand whether this is normal behavior or something went terribly wrong, so all help is greatly appreciated. Following the book of The D Programming language I have the code below: bool binarySearch(T)(T[] input, T value) { while (!input.empty) { auto i = input.length / 2; auto mid = input[i]; if (mid > value) input = input[0 .. i]; else if (mid < value) input = input[i + 1 .. $]; else return true; } return false; } safe nothrow unittest { assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 6));That should return true and the assertion will pass.assert(binarySearch([ 1, 3, 6, 7, 9, 15 ], 5));Since there is no 5 in the array, that will return false and the assertion will fail, which means that the tests failed.} void main() { bool s1 = binarySearch([1, 3, 6, 7, 9, 15], 6); bool s2 = binarySearch!(int)([1, 3, 6, 7, 9, 15], 5); writeln(s1, s2); } Then I compile using the command $ dmd source/app.d -unittest and execute as follows $ ./appSo, effectively you requested a unit test run and it failed.Then the output core.exception.AssertError source/app.d(62): unittest failure ----------------Unless I'm missing something in your question, that's exactly the expected outcome. :) Ali
Mar 19 2017