Adding first working version
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user