| Thread overview | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
March 19, 2017 exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
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
| ||||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ervin Bosenbacher | 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.
| |||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ervin Bosenbacher | 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
> $ ./app
So, 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
| |||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to cym13 | 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:
>> 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.
Thank you :) Maybe I need to rephrase. Is it normal to see the long trace output instead of just a failed unit test message?
| |||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ervin Bosenbacher | 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:
>> 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.
>
> Thank you :) Maybe I need to rephrase. Is it normal to see the long trace output instead of just a failed unit test message?
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)
| |||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ervin Bosenbacher | 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).
| |||
March 19, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | 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:
>> 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).
Thx Adam.
| |||
March 20, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ervin Bosenbacher | On 2017-03-20 00:49, Ervin Bosenbacher wrote: > 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: >>> 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). > > Thx Adam. 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 Carlborg | |||
March 20, 2017 Re: exceptions thrown when running app with failed unittests | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Monday, 20 March 2017 at 07:36:47 UTC, Jacob Carlborg wrote:
> On 2017-03-20 00:49, Ervin Bosenbacher wrote:
>> 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:
>>>> 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).
>>
>> Thx Adam.
>
> 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
That is really cool! Thx.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply