eloquent / php-lcs

An implementation of the 'longest common subsequence' algorithm for PHP.
MIT License
16 stars 3 forks source link

Add Hack type definitions #2

Open jesseschalken opened 7 years ago

jesseschalken commented 7 years ago

For usage with Hack, a .hhi file containing this somewhere in the repo should suffice:

<?hh // decl

namespace Eloquent\Lcs;

interface LcsSolverInterface<T> {
  public function longestCommonSubsequence(
    array<T> $sequenceA,
    array<T> $sequenceB,
  ): array<T>;
}

class LcsSolver<T> implements LcsSolverInterface<T> {
  public function __construct(?(function(T, T): bool) $comparator = null);
  public function comparator(): (function(T, T): bool);
  public function longestCommonSubsequence(
    array<T> $sequenceA,
    array<T> $sequenceB,
  ): array<T>;
}
ezzatron commented 7 years ago

That's pretty cool! Do you know if there's any way to write an automated test that checks that this definition is correct? I don't have any experience with Hack, but I'm happy to update the HHVM Travis build for this repo.

jesseschalken commented 7 years ago

I suppose you could write a unit test in Hack that passes the type checker using the .hhi file and also runs correctly on HHVM against the PHP code. That would effectively test that the type definition and PHP code correspond.