Adding first working version

This commit is contained in:
2026-07-06 13:11:48 +02:00
parent 3cd9df9bfe
commit 41e9c76028
36 changed files with 6211 additions and 4391 deletions
+92
View File
@@ -4,6 +4,98 @@ import { createCaStudioApi } from '../src/caStudioApi.js'
import { createTestDb } from './testDb.js'
describe('CA Studio API', () => {
it('seeds a useful shelf of elementary 1D CA rules', async () => {
const db = await createTestDb()
const app = createCaStudioApi(db)
await request(app)
.get('/api/ca/engines?dimensions=1&states=2')
.expect(200)
.expect((response) => {
const rules = response.body
.filter((engine: { engine_kind: string }) => engine.engine_kind === 'elementary-1d')
.map((engine: { default_params: { ruleId?: string } }) => engine.default_params.ruleId)
expect(rules).toEqual(expect.arrayContaining([
'Rule 18',
'Rule 22',
'Rule 30',
'Rule 45',
'Rule 54',
'Rule 60',
'Rule 73',
'Rule 90',
'Rule 110',
'Rule 122',
'Rule 126',
'Rule 150',
'Rule 184'
]))
const rule90 = response.body.find((engine: { slug: string }) => engine.slug === 'elementary-rule-90')
expect(rule90.params_schema.ruleId).toMatchObject({
type: 'select',
default: 'Rule 90',
options: [{ value: 'Rule 90', label: 'Rule 90' }]
})
})
})
it('seeds the Naga 3D engine for seven-state voxel spaces', async () => {
const db = await createTestDb()
const app = createCaStudioApi(db)
await request(app)
.get('/api/ca/engines?dimensions=3&states=7')
.expect(200)
.expect((response) => {
const naga = response.body.find((engine: { slug: string }) => engine.slug === 'naga-3d')
expect(naga).toMatchObject({
name: 'Naga 3D',
engine_kind: 'naga-3d',
default_params: {
ruleId: 'naga-3d',
rendererId: 'voxel-3d',
seed: 'naga',
edgeWrap: true
}
})
expect(naga.params_schema.ruleId.options).toEqual([{ value: 'naga-3d', label: '3D Naga' }])
expect(naga.params_schema.edgeWrap).toMatchObject({
type: 'boolean',
label: 'Edge wrap',
default: true,
group: 'Edge settings'
})
})
})
it('seeds the Naga Markov initial condition generator for seven-state voxel spaces', async () => {
const db = await createTestDb()
const app = createCaStudioApi(db)
await request(app)
.get('/api/ca/initial-condition-generators?dimensions=3&states=7')
.expect(200)
.expect((response) => {
const generator = response.body.find((item: { slug: string }) => item.slug === 'naga-markov-chains')
expect(generator).toMatchObject({
name: 'Naga Markov chains',
generator_kind: 'naga-markov',
default_params: {
count: 3,
length: 5,
sameTypeProbability: 0.8,
seed: 'naga-markov'
}
})
expect(generator.params_schema.sameTypeProbability).toMatchObject({
type: 'range',
default: 0.8
})
})
})
it('lists preset nodes whose resolved settings use an engine', async () => {
const db = await createTestDb()
const app = createCaStudioApi(db)