package TestCase::Lib::SPVM::StringBuffer {
use SPVM::StringBuffer;
sub test_new : int () {
my $buffer = SPVM::StringBuffer->new;
unless ($buffer isa SPVM::StringBuffer) {
return 0;
}
unless ($buffer->length == 0) {
return 0;
}
return 1;
}
sub test_length : int () {
unless (SPVM::StringBuffer->new->length == 0) {
return 0;
}
my $buffer2 = SPVM::StringBuffer->new;
$buffer2->push("a");
unless ($buffer2->length == 1) {
return 0;
}
return 1;
}
sub test_push : int () {
my $buffer = SPVM::StringBuffer->new;
$buffer->push ("abc");
unless ($buffer->to_string eq "abc") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push ("de");
unless ($buffer->to_string eq "abcde") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push ("f");
unless ($buffer->to_string eq "abcdef") {
warn("actual string: " . $buffer->to_string);
return 0;
}
return 1;
}
sub test_push_char : int () {
my $buffer = SPVM::StringBuffer->new;
$buffer->push_char('a');
unless ($buffer->to_string eq "a") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push_char('b');
unless ($buffer->to_string eq "ab") {
warn("actual string: " . $buffer->to_string);
return 0;
}
$buffer->push_char('c');
unless ($buffer->to_string eq "abc") {
warn("actual string: " . $buffer->to_string);
return 0;
}
return 1;
}
sub test_append_copy_on_write : int () {
warn("TODO: append copy-on-write test is not implemented yet");
return 0;
}
sub test_to_string : int () {
{
my $minimal_buf = SPVM::StringBuffer->new;
$minimal_buf->push ("a");
unless ($minimal_buf->to_string eq "a") {
return 0;
}
}
{
my $large_buf = SPVM::StringBuffer->new;
$large_buf->push ("b");
unless ($large_buf->to_string eq "b") {
return 0;
}
}
return 1;
}
}