1#!/usr/bin/env perl
2use v5.10;
3use strict;
4use warnings;
5
6use Data::Dumper qw/Dumper/;
7use BSON qw/decode encode/;
8use MongoDB::BSON;
9
10my $codec = MongoDB::BSON->new;
11
12my $from_cli = @ARGV;
13
14while (1) {
15    my $s = $from_cli ? shift(@ARGV) : <STDIN>;
16    last unless defined $s;
17
18    chomp $s;
19    $s = eval($s);
20    if ( $@ ) {
21        warn "Eval error: $@\n";
22        next;
23    }
24    unless ( ref($s) eq 'HASH' ) {
25        warn "Not a HASH\n";
26        next;
27    }
28
29    my $pp = eval { encode($s) };
30    warn "PP error: $@\n" if $@;
31
32    my $xs = eval { $codec->encode_one($s) };
33    warn "XS error: $@\n" if $@;
34
35    say "PP\n" . unpack("H*",$pp) . "\n";
36    say "XS\n" . unpack("H*",$xs) . "\n";
37    say "PP and XS are " . ($pp eq $xs ? "the same" : "NOT the same");
38}
39