--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+BEGIN {
+ use_ok('Algorithm::C3');
+}
+
+=pod
+
+This example is taken from the inheritance graph of DBIx::Class::Core in DBIx::Class v0.07002:
+(No ASCII art this time, this graph is insane)
+
+The xx:: prefixes are just to be sure these bogus declarations never stomp on real ones
+
+=cut
+
+{
+ package xx::DBIx::Class::Core;
+ our @ISA = qw/
+ xx::DBIx::Class::Serialize::Storable
+ xx::DBIx::Class::InflateColumn
+ xx::DBIx::Class::Relationship
+ xx::DBIx::Class::PK::Auto
+ xx::DBIx::Class::PK
+ xx::DBIx::Class::Row
+ xx::DBIx::Class::ResultSourceProxy::Table
+ xx::DBIx::Class::AccessorGroup
+ /;
+
+ package xx::DBIx::Class::InflateColumn;
+ our @ISA = qw/ xx::DBIx::Class::Row /;
+
+ package xx::DBIx::Class::Row;
+ our @ISA = qw/ xx::DBIx::Class /;
+
+ package xx::DBIx::Class;
+ our @ISA = qw/
+ xx::DBIx::Class::Componentised
+ xx::Class::Data::Accessor
+ /;
+
+ package xx::DBIx::Class::Relationship;
+ our @ISA = qw/
+ xx::DBIx::Class::Relationship::Helpers
+ xx::DBIx::Class::Relationship::Accessor
+ xx::DBIx::Class::Relationship::CascadeActions
+ xx::DBIx::Class::Relationship::ProxyMethods
+ xx::DBIx::Class::Relationship::Base
+ xx::DBIx::Class
+ /;
+
+ package xx::DBIx::Class::Relationship::Helpers;
+ our @ISA = qw/
+ xx::DBIx::Class::Relationship::HasMany
+ xx::DBIx::Class::Relationship::HasOne
+ xx::DBIx::Class::Relationship::BelongsTo xx::DBIx::Class::Relationship::ManyToMany
+ /;
+
+ package xx::DBIx::Class::Relationship::ProxyMethods;
+ our @ISA = qw/ xx::DBIx::Class /;
+
+ package xx::DBIx::Class::Relationship::Base;
+ our @ISA = qw/ xx::DBIx::Class /;
+
+ package xx::DBIx::Class::PK::Auto;
+ our @ISA = qw/ xx::DBIx::Class /;
+
+ package xx::DBIx::Class::PK;
+ our @ISA = qw/ xx::DBIx::Class::Row /;
+
+ package xx::DBIx::Class::ResultSourceProxy::Table;
+ our @ISA = qw/
+ xx::DBIx::Class::AccessorGroup
+ xx::DBIx::Class::ResultSourceProxy
+ /;
+
+ package xx::DBIx::Class::ResultSourceProxy;
+ our @ISA = qw/ xx::DBIx::Class /;
+
+ package xx::Class::Data::Accessor; our @ISA = ();
+ package xx::DBIx::Class::Relationship::HasMany; our @ISA = ();
+ package xx::DBIx::Class::Relationship::HasOne; our @ISA = ();
+ package xx::DBIx::Class::Relationship::BelongsTo; our @ISA = ();
+ package xx::DBIx::Class::Relationship::ManyToMany; our @ISA = ();
+ package xx::DBIx::Class::Componentised; our @ISA = ();
+ package xx::DBIx::Class::AccessorGroup; our @ISA = ();
+ package xx::DBIx::Class::Serialize::Storable; our @ISA = ();
+ package xx::DBIx::Class::Relationship::Accessor; our @ISA = ();
+ package xx::DBIx::Class::Relationship::CascadeActions; our @ISA = ();
+}
+
+sub supers {
+ no strict 'refs';
+ @{$_[0] . '::ISA'};
+}
+
+is_deeply(
+ [ Algorithm::C3::merge('xx::DBIx::Class::Core', \&supers) ],
+ [qw/
+ xx::DBIx::Class::Core
+ xx::DBIx::Class::Serialize::Storable
+ xx::DBIx::Class::InflateColumn
+ xx::DBIx::Class::Relationship
+ xx::DBIx::Class::Relationship::Helpers
+ xx::DBIx::Class::Relationship::HasMany
+ xx::DBIx::Class::Relationship::HasOne
+ xx::DBIx::Class::Relationship::BelongsTo
+ xx::DBIx::Class::Relationship::ManyToMany
+ xx::DBIx::Class::Relationship::Accessor
+ xx::DBIx::Class::Relationship::CascadeActions
+ xx::DBIx::Class::Relationship::ProxyMethods
+ xx::DBIx::Class::Relationship::Base
+ xx::DBIx::Class::PK::Auto
+ xx::DBIx::Class::PK
+ xx::DBIx::Class::Row
+ xx::DBIx::Class::ResultSourceProxy::Table
+ xx::DBIx::Class::AccessorGroup
+ xx::DBIx::Class::ResultSourceProxy
+ xx::DBIx::Class
+ xx::DBIx::Class::Componentised
+ xx::Class::Data::Accessor
+ /],
+ '... got the right C3 merge order for DBIx::Class::Core');