+if ("$]" ge '5.008') {
+ BEGIN { if ("$]" ge '5.008') { require utf8; "utf8"->import() } }
+
+ ok(Devel::PPPort::sv_len_utf8("aščť"), 4);
+ ok(Devel::PPPort::sv_len_utf8_nomg("aščť"), 4);
+
+ my $str = "áíé";
+ utf8::downgrade($str);
+ ok(Devel::PPPort::sv_len_utf8($str), 3);
+ utf8::downgrade($str);
+ ok(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+ utf8::upgrade($str);
+ ok(Devel::PPPort::sv_len_utf8($str), 3);
+ utf8::upgrade($str);
+ ok(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+
+ tie my $scalar, 'TieScalarCounter', "é";
+
+ ok(tied($scalar)->{fetch}, 0);
+ ok(tied($scalar)->{store}, 0);
+ ok(Devel::PPPort::sv_len_utf8($scalar), 2);
+ ok(tied($scalar)->{fetch}, 1);
+ ok(tied($scalar)->{store}, 0);
+ ok(Devel::PPPort::sv_len_utf8($scalar), 3);
+ ok(tied($scalar)->{fetch}, 2);
+ ok(tied($scalar)->{store}, 0);
+ ok(Devel::PPPort::sv_len_utf8($scalar), 4);
+ ok(tied($scalar)->{fetch}, 3);
+ ok(tied($scalar)->{store}, 0);
+ ok(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+ ok(tied($scalar)->{fetch}, 3);
+ ok(tied($scalar)->{store}, 0);
+ ok(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+ ok(tied($scalar)->{fetch}, 3);
+ ok(tied($scalar)->{store}, 0);
+} else {
+ for (1..23) {
+ skip 'skip: no SV_NOSTEAL support', 0;
+ }
+}
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+ my ($class, $value) = @_;
+ return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+ BEGIN { if ("$]" ge '5.008') { require utf8; "utf8"->import() } }
+ my ($self) = @_;
+ $self->{fetch}++;
+ return $self->{value} .= "é";
+}
+
+sub STORE {
+ my ($self, $value) = @_;
+ $self->{store}++;
+ $self->{value} = $value;
+}
+