From d986cda3b3b838757d5cd9d6107668a7ec4f67db Mon Sep 17 00:00:00 2001 From: Steven Hugg Date: Sat, 5 Feb 2022 20:43:45 -0600 Subject: [PATCH] ecs: start tests --- src/common/ecs/ecs.ts | 28 +++++++++++++++++----------- src/test/testecs.ts | 18 ++++++++++++++++++ test/ecs/basic1.ecs | 16 ++++++++++++++++ 3 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 test/ecs/basic1.ecs diff --git a/src/common/ecs/ecs.ts b/src/common/ecs/ecs.ts index fb447351..6a06cc91 100644 --- a/src/common/ecs/ecs.ts +++ b/src/common/ecs/ecs.ts @@ -194,7 +194,7 @@ interface ComponentFieldPair { export class Dialect_CA65 { - readonly ASM_ITERATE_EACH = ` + ASM_ITERATE_EACH = ` ldx #0 @__each: {{%code}} @@ -204,7 +204,7 @@ export class Dialect_CA65 { @__exit: `; - readonly ASM_ITERATE_JOIN = ` + ASM_ITERATE_JOIN = ` ldy #0 @__each: ldx {{%joinfield}},y @@ -215,14 +215,14 @@ export class Dialect_CA65 { @__exit: `; - readonly ASM_FILTER_RANGE_LO_X = ` + ASM_FILTER_RANGE_LO_X = ` cpx #{{%xofs}} bcc @__skipxlo {{%code}} @__skipxlo: ` - readonly ASM_FILTER_RANGE_HI_X = ` + ASM_FILTER_RANGE_HI_X = ` cpx #{{%xofs}}+{{%ecount}} bcs @__skipxhi {{%code}} @@ -230,7 +230,7 @@ export class Dialect_CA65 { ` // TODO - readonly ASM_MAP_RANGES = ` + ASM_MAP_RANGES = ` txa pha lda {{%mapping}},x @@ -242,26 +242,26 @@ export class Dialect_CA65 { tax `; - readonly INIT_FROM_ARRAY = ` + INIT_FROM_ARRAY = ` ldy #{{%nbytes}} : lda {{%src}}-1,y sta {{%dest}}-1,y dey bne :- ` - readonly HEADER = ` + HEADER = ` .include "vcs-ca65.h" .define PAL 0 .code ` - readonly FOOTER = ` + FOOTER = ` .segment "VECTORS" Return: .word $6060 VecNMI: VecReset: .word Main::__Reset VecBRK: .word Main::__BRK ` - readonly TEMPLATE_INIT_MAIN = ` + TEMPLATE_INIT_MAIN = ` __NMI: __Reset: __BRK: @@ -433,6 +433,12 @@ class DataSegment { } } +class UninitDataSegment extends DataSegment { +} + +class ConstDataSegment extends DataSegment { +} + function getFieldBits(f: IntType) { let n = f.hi - f.lo + 1; return Math.ceil(Math.log2(n)); @@ -820,8 +826,8 @@ export class EntityScope implements SourceLocated { systems: System[] = []; entities: Entity[] = []; fieldtypes: { [name: string]: 'init' | 'const' } = {}; - bss = new DataSegment(); - rodata = new DataSegment(); + bss = new UninitDataSegment(); + rodata = new ConstDataSegment(); code = new CodeSegment(); componentsInScope = new Set(); tempOffset = 0; diff --git a/src/test/testecs.ts b/src/test/testecs.ts index 05d78187..8bef77f4 100644 --- a/src/test/testecs.ts +++ b/src/test/testecs.ts @@ -1,3 +1,4 @@ +import { readdirSync, readFileSync } from "fs"; import { describe } from "mocha"; import { ECSCompiler } from "../common/ecs/compiler"; import { Dialect_CA65, EntityManager, SourceFileExport } from "../common/ecs/ecs"; @@ -363,3 +364,20 @@ describe('Tokenizer', function() { testCompiler(); }); }); + +describe('Compiler', function() { + let testdir = './test/ecs/'; + let files = readdirSync(testdir).filter(f => f.endsWith('.ecs')); + files.forEach((ecspath) => { + let dialect = new Dialect_CA65(); + dialect.HEADER = ''; + dialect.FOOTER = ''; + let em = new EntityManager(dialect); + let compiler = new ECSCompiler(em); + let code = readFileSync(testdir + ecspath, 'utf-8'); + compiler.parseFile(code, ecspath); + let out = new SourceFileExport(); + em.exportToFile(out); + console.log(out.toString()); + }); +}); diff --git a/test/ecs/basic1.ecs b/test/ecs/basic1.ecs new file mode 100644 index 00000000..2221f030 --- /dev/null +++ b/test/ecs/basic1.ecs @@ -0,0 +1,16 @@ + // comment + /* + mju,fjeqowfjqewiofjqe + */ +component Kernel + lines: 0..255 + bgcolor: 0..255 +end + +component Bitmap + data: array of 0..255 +end + +component HasBitmap + bitmap: [Bitmap] +end