Skip to content

Comments

std.range.package - add asserts/static asserts for unused variables in unittests#5635

Merged
dlang-bot merged 1 commit intodlang:masterfrom
RazvanN7:Unused_Variables_range_package
Jul 24, 2017
Merged

std.range.package - add asserts/static asserts for unused variables in unittests#5635
dlang-bot merged 1 commit intodlang:masterfrom
RazvanN7:Unused_Variables_range_package

Conversation

@RazvanN7
Copy link
Collaborator

@RazvanN7 RazvanN7 commented Jul 20, 2017

Most likely I missed some.

@dlang-bot
Copy link
Contributor

Thanks for your pull request, @RazvanN7! We are looking forward to reviewing it, and you should be hearing from a maintainer soon.

Some tips to help speed things up:

  • smaller, focused PRs are easier to review than big ones

  • try not to mix up refactoring or style changes with bug fixes or feature enhancements

  • provide helpful commit messages explaining the rationale behind each change

Bear in mind that large or tricky changes may require multiple rounds of review and revision.

Please see CONTRIBUTING.md for more information.

Bugzilla references

Your PR doesn't reference any Bugzilla issue.

If your PR contains non-trivial changes, please reference a Bugzilla issue or create a manual changelog.

@wilzbach
Copy link
Contributor

Most likely I missed some.

Yes, that's why tooling wins.
Just open .dscanner.ini and remove std.range from the unused_variable blacklist.
With your PR:

std/range/package.d(702:12)[warn]: Variable testArr is never used.
std/range/package.d(716:14)[warn]: Variable unused is never used.
std/range/package.d(770:21)[warn]: Variable immi is never used.
std/range/package.d(1253:14)[warn]: Variable s1 is never used.
std/range/package.d(1255:14)[warn]: Variable s2 is never used.
std/range/package.d(1293:21)[warn]: Variable immi is never used.
std/range/package.d(1294:23)[warn]: Variable immf is never used.
std/range/package.d(1344:22)[warn]: Variable a is never used.
std/range/package.d(1345:22)[warn]: Variable b is never used.
std/range/package.d(2233:15)[warn]: Variable myRepeat is never used.
std/range/package.d(2252:11)[warn]: Variable r1 is never used.
std/range/package.d(2253:18)[warn]: Variable t1 is never used.
std/range/package.d(2256:12)[warn]: Variable r2 is never used.
std/range/package.d(2257:17)[warn]: Variable t2 is never used.
std/range/package.d(2260:24)[warn]: Variable t3 is never used.
std/range/package.d(2277:10)[warn]: Variable s is never used.
std/range/package.d(3211:7)[warn]: Variable r2 is never used.
std/range/package.d(3241:21)[warn]: Variable A is never used.
std/range/package.d(3242:21)[warn]: Variable B is never used.
std/range/package.d(3743:21)[warn]: Variable immarr is never used.
std/range/package.d(3806:11)[warn]: Variable cConst is never used.
std/range/package.d(3827:24)[warn]: Variable j is never used.
std/range/package.d(4216:29)[warn]: Parameter from is never used.
std/range/package.d(4216:42)[warn]: Parameter to is never used.
std/range/package.d(4233:36)[warn]: Parameter n is never used.
std/range/package.d(4264:39)[warn]: Parameter n is never used.
std/range/package.d(4528:10)[warn]: Variable z is never used.
std/range/package.d(5169:10)[warn]: Variable y is never used.
std/range/package.d(5729:15)[warn]: Variable e is never used.
std/range/package.d(5730:15)[warn]: Variable f is never used.
std/range/package.d(5731:15)[warn]: Variable b is never used.
std/range/package.d(5732:15)[warn]: Variable i is never used.
std/range/package.d(5733:15)[warn]: Variable s1 is never used.
std/range/package.d(5734:15)[warn]: Variable s2 is never used.
std/range/package.d(5735:15)[warn]: Variable l is never used.
std/range/package.d(5747:15)[warn]: Variable e is never used.
std/range/package.d(5748:15)[warn]: Variable f is never used.
std/range/package.d(5749:15)[warn]: Variable b is never used.
std/range/package.d(5750:15)[warn]: Variable i is never used.
std/range/package.d(5751:15)[warn]: Variable s1 is never used.
std/range/package.d(5752:15)[warn]: Variable s2 is never used.
std/range/package.d(5753:15)[warn]: Variable l is never used.
std/range/package.d(5758:15)[warn]: Variable e is never used.
std/range/package.d(5759:15)[warn]: Variable f is never used.
std/range/package.d(5760:15)[warn]: Variable b is never used.
std/range/package.d(5761:15)[warn]: Variable i is never used.
std/range/package.d(5762:15)[warn]: Variable s1 is never used.
std/range/package.d(5763:15)[warn]: Variable s2 is never used.
std/range/package.d(5764:15)[warn]: Variable l is never used.
std/range/package.d(6902:14)[warn]: Variable r is never used.
std/range/package.d(8335:14)[warn]: Variable hasSliceToEnd is never used.
std/range/package.d(8562:37)[warn]: Parameter i is never used.
std/range/package.d(9803:10)[warn]: Variable r is never used.
std/range/package.d(9825:10)[warn]: Variable s is never used.
std/range/package.d(9927:14)[warn]: Variable b is never used.
std/range/package.d(9936:10)[warn]: Variable r is never used.
std/range/package.d(9948:14)[warn]: Variable r2 is never used.
std/range/package.d(9961:10)[warn]: Variable r is never used.
std/range/package.d(10017:32)[warn]: Parameter rhs is never used.
std/range/package.d(10039:44)[warn]: Parameter value is never used.
std/range/package.d(10167:43)[warn]: Parameter value is never used.
std/range/package.d(10200:47)[warn]: Parameter index is never used.
std/range/package.d(10203:47)[warn]: Parameter index is never used.
std/range/package.d(10286:33)[warn]: Parameter begin is never used.
std/range/package.d(10286:51)[warn]: Parameter end is never used.
std/range/package.d(10290:33)[warn]: Parameter begin is never used.
std/range/package.d(10290:51)[warn]: Parameter end is never used.
std/range/package.d(10301:33)[warn]: Parameter begin is never used.
std/range/package.d(10301:51)[warn]: Parameter end is never used.
std/range/package.d(10308:33)[warn]: Parameter begin is never used.
std/range/package.d(10308:51)[warn]: Parameter end is never used.
std/range/package.d(10410:14)[warn]: Variable p is never used.
std/range/package.d(10413:14)[warn]: Variable e is never used.
std/range/package.d(10415:14)[warn]: Variable s is never used.
std/range/package.d(10419:14)[warn]: Variable i is never used.
std/range/package.d(10423:14)[warn]: Variable l is never used.
std/range/package.d(10424:14)[warn]: Variable sl is never used.
std/range/package.d(10431:15)[warn]: Variable p is never used.
std/range/package.d(10432:15)[warn]: Variable f is never used.
std/range/package.d(10433:15)[warn]: Variable e is never used.
std/range/package.d(10434:15)[warn]: Variable s is never used.
std/range/package.d(10435:15)[warn]: Variable b is never used.
std/range/package.d(10436:15)[warn]: Variable i is never used.
std/range/package.d(10437:15)[warn]: Variable l is never used.
std/range/package.d(10438:15)[warn]: Variable sl is never used.
std/range/package.d(10445:14)[warn]: Variable p is never used.
std/range/package.d(10448:14)[warn]: Variable e is never used.
std/range/package.d(10450:14)[warn]: Variable s is never used.
std/range/package.d(10458:15)[warn]: Variable p is never used.
std/range/package.d(10471:14)[warn]: Variable p is never used.
std/range/package.d(10472:14)[warn]: Variable f is never used.
std/range/package.d(10473:14)[warn]: Variable e is never used.
std/range/package.d(10475:14)[warn]: Variable s is never used.
std/range/package.d(10476:14)[warn]: Variable b is never used.
std/range/package.d(10649:10)[warn]: Variable wrapper is never used.
std/range/package.d(10696:10)[warn]: Variable rr is never used.
std/range/package.d(10710:10)[warn]: Variable rr2 is never used.
std/range/package.d(11403:10)[warn]: Variable val is never used.
std/range/package.d(11533:28)[warn]: Parameter x is never used.
std/range/package.d(11534:20)[warn]: Parameter x is never used.
std/range/package.d(11536:10)[warn]: Variable r is never used.

@RazvanN7
Copy link
Collaborator Author

RazvanN7 commented Jul 20, 2017

@wilzbach many of those are used in traits compiles statements and static asserts. Looks like dscanner misses the case were variables are used at compile time tests.

@JackStouffer
Copy link
Contributor

I welcome the added equals checks, but what do the __traits(compiles) checks do that aren't already being done?

@RazvanN7
Copy link
Collaborator Author

@JackStouffer they get rid of useless assignments.

Copy link
Member

@andralex andralex left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static assert ain't bad but a better test also make sure the result of the compiled code is as expected.

int[4] testArr = [1,2,3,4];
//just checking it compiles
auto s = testArr[].stride(2);
static assert(__traits(compiles,testArr[].stride(2)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

better yet also assert it equals [1, 3].

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doing so may cause a GC allocation which makes the unittest drop the @nogc. Since the test is not public, maybe it would be better to leave it like this

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nogc unittest
{
    static immutable result = [1, 3];
    auto s = testArr[].stride(2);
    assert(s.equal(result));
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yah there's a solution to everything - just ask around and mess with things!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cool. thanks.

// Make sure bug 3311 is fixed. ChainImpl should compile even if not all
// elements are mutable.
auto c = chain( iota(0, 10), iota(0, 10) );
static assert(__traits(compiles, chain( iota(0, 10), iota(0, 10))));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here, assert not only it compiles but it yields a range as expected.

immutable(Foo)[] a;
immutable(Foo)[] b;
auto c = chain(a, b);
static assert(__traits(compiles, chain(a, b)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... throughout

@wilzbach
Copy link
Contributor

@wilzbach many of those are used in traits compiles statements and static asserts. Looks like dscanner misses the case were variables are used at compile time tests.

Yeah quite likely - there's no semantic phase at DScanner.
Feel free to report this as a bug: https://github.com/dlang-community/D-Scanner

@RazvanN7 RazvanN7 force-pushed the Unused_Variables_range_package branch 2 times, most recently from 20bbe87 to 07bb328 Compare July 21, 2017 08:14
@RazvanN7 RazvanN7 force-pushed the Unused_Variables_range_package branch from 07bb328 to 1e44763 Compare July 24, 2017 13:43
@RazvanN7
Copy link
Collaborator Author

@andralex I think this is good to go now

@dlang-bot dlang-bot merged commit da50204 into dlang:master Jul 24, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants