#!perl # $Id$ use strict; use warnings; use Test::More tests => 86; require_ok 't/test_utils.pl'; use_ok 'CPU::Z80::Assembler::Program'; use_ok 'CPU::Z80::Assembler::Segment'; # empty start isa_ok my $program = CPU::Z80::Assembler::Program->new, 'CPU::Z80::Assembler::Program'; is scalar(@{$program->child}), 0, "start with no segments"; isa_ok my $segment = $program->segment, 'CPU::Z80::Assembler::Segment'; is scalar(@{$program->child}), 1, "one segments"; is $segment->name, "_", "name of empty segment"; # empty start, add bytes isa_ok $program = CPU::Z80::Assembler::Program->new, 'CPU::Z80::Assembler::Program'; is scalar(@{$program->child}), 0, "start with no segments"; $program->add_opcodes(opcodes('A', 1)); is scalar(@{$program->child}), 1, "one segments"; isa_ok $segment = $program->segment, 'CPU::Z80::Assembler::Segment'; is $program->child->[0], $segment, "segment"; is $segment->name, "_", "name of empty segment"; is $program->bytes, "ABC", "bytes"; is $segment->line->text, "line 1\n", "segment line text"; is $segment->line->line_nr, 1, "segment line text"; is $segment->line->file, "f.asm", "segment line text"; is $segment->address, 0, "start address"; # empty start, add bytes to two segments, alternate isa_ok $program = CPU::Z80::Assembler::Program->new, 'CPU::Z80::Assembler::Program'; is scalar(@{$program->child}), 0, "start with no segments"; isa_ok $segment = $program->segment("CODE"), 'CPU::Z80::Assembler::Segment'; is $program->child->[0], $segment, "segment"; is $program->child->[0], $program->segment, "segment"; isa_ok $segment = $program->segment("DATA"), 'CPU::Z80::Assembler::Segment'; is $program->child->[1], $segment, "segment"; is $program->child->[1], $program->segment, "segment"; $program->add_opcodes(opcodes('D',3)); isa_ok $segment = $program->segment("CODE"), 'CPU::Z80::Assembler::Segment'; is $program->child->[0], $segment, "segment"; is $program->child->[0], $program->segment, "segment"; $program->add_opcodes(opcodes('C',1)); isa_ok $segment = $program->segment("DATA"), 'CPU::Z80::Assembler::Segment'; is $program->child->[1], $segment, "segment"; is $program->child->[1], $program->segment, "segment"; $program->add_opcodes(opcodes('d',30)); isa_ok $segment = $program->segment("CODE"), 'CPU::Z80::Assembler::Segment'; is $program->child->[0], $segment, "segment"; is $program->child->[0], $program->segment, "segment"; $program->add_opcodes(opcodes('c',10)); is scalar(@{$program->child}), 2, "two segments"; is $program->bytes, "CDEcdeDEFdef", "bytes"; is $program->child->[0]->name, "CODE", "name of empty segment"; is $program->child->[0]->address, 0, "segment address"; is $program->child->[0]->line->text, "line 1\n", "segment line text"; is $program->child->[0]->line->line_nr, 1, "segment line text"; is $program->child->[0]->line->file, "f.asm", "segment line text"; is $program->child->[1]->name, "DATA", "name of empty segment"; is $program->child->[1]->address, 6, "segment address"; is $program->child->[1]->line->text, "line 3\n", "segment line text"; is $program->child->[1]->line->line_nr, 3, "segment line text"; is $program->child->[1]->line->file, "f.asm", "segment line text";