---
name: "Test2::Compare::Base"
section: "3pm"
platform: "linux"
package: "libtest-simple-perl"
version: "1.302210-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Test2::Compare::Base/3pm"
---

# Test2::Compare::Base(3pm)

Base class for comparison classes.

## NAME

Test2::Compare::Base - Base class for comparison classes.

## DESCRIPTION

All comparison classes for Test2::Compare should inherit from this base class.

## SYNOPSIS

```
    package Test2::Compare::MyCheck;
    use strict;
    use warnings;
    use base 'Test2::Compare::Base';
    use Test2::Util::HashBase qw/stuff/;
    sub name { 'STUFF' }
    sub operator {
        my $self = shift;
        my ($got) = @_;
        return 'eq';
    }
    sub verify {
        my $self = shift;
        my $params = @_;
        # Always check if $got exists! This method must return false if no
        # value at all was received.
        return 0 unless $params{exists};
        my $got = $params{got};
        # Returns true if both values match. This includes undef, 0, and other
        # false-y values!
        return $got eq $self->stuff;
    }
```

## METHODS

Some of these must be overridden, others can be.

- $dclass = $check-\>delta\_class

  Returns the delta subclass that should be used. By default Test2::Compare::Delta is used.

- @deltas = $check-\>deltas(id =\> $id, exists =\> $bool, got =\> $got, convert =\> \\&convert, seen =\> \\%seen)

  Should return child deltas.

- @lines = $check-\>got\_lines($got)

  This is your chance to provide line numbers for errors in the `$got` structure.

- $op = $check-\>**operator()**

  - $op = $check-\>operator($got)

  Returns the operator that was used to compare the check with the received data in `$got`. If there was no value for got then there will be no arguments, undef will only be an argument if undef was seen in `$got`. This is how you can tell the difference between a missing value and an undefined one.

- $bool = $check-\>verify(id =\> $id, exists =\> $bool, got =\> $got, convert =\> \\&convert, seen =\> \\%seen)

  Return true if there is a shallow match, that is both items are arrayrefs, both items are the same string or same number, etc. This should not recurse, as deep checks are done in `"$check->deltas()"`.

- $name = $check-\>name

  Get the name of the check.

- $display = $check-\>render

  What should be displayed in a table for this check, usually the name or value.

- $delta = $check-\>run(id =\> $id, exists =\> $bool, got =\> $got, convert =\> \\&convert, seen =\> \\%seen)

  This is where the checking is done, first a shallow check using `"$check->verify"`, then checking `"$check->deltas()"`. `"\%seen"` is used to prevent cycles.

## SOURCE

The source code repository for Test2-Suite can be found at *https://github.com/Test-More/test-more/*.

## MAINTAINERS

- Chad Granum \<exodist@cpan.org\>

  ## AUTHORS

- Chad Granum \<exodist@cpan.org\>

  ## COPYRIGHT

Copyright Chad Granum \<exodist@cpan.org\>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See *http://dev.perl.org/licenses/*
