From 4c47878bb8ccc04dce588383f3e503965513b6ec Mon Sep 17 00:00:00 2001 From: ishii-norimi Date: Thu, 14 Aug 2025 16:56:51 +0900 Subject: [PATCH 1/2] Update regression test for GMR model to use random data and adjust expectation for probabilities --- tests/lib/model/gmm.test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/lib/model/gmm.test.js b/tests/lib/model/gmm.test.js index bc190c28..91e46568 100644 --- a/tests/lib/model/gmm.test.js +++ b/tests/lib/model/gmm.test.js @@ -107,11 +107,11 @@ describe('regression', () => { test('probability', () => { const model = new GMR() - const x = [ - [0, 0], - [1, 1], - ] - const t = [[0], [1]] + const x = Matrix.randn(50, 2, 0, 5).toArray() + const t = [] + for (let i = 0; i < x.length; i++) { + t[i] = [x[i][0] + x[i][1] + (Math.random() - 0.5) / 10] + } model.add() model.add() @@ -127,7 +127,7 @@ describe('regression', () => { [[0], [-1]] ) for (let c = 0; c < 2; c++) { - expect(p[0][c]).toBeGreaterThan(p[1][c]) + expect(p[0][c]).toBeGreaterThanOrEqual(p[1][c]) } }) }) From 61b47221a175b1e495343d22741a837fca255952 Mon Sep 17 00:00:00 2001 From: ishii-norimi Date: Thu, 14 Aug 2025 19:57:16 +0900 Subject: [PATCH 2/2] Improve some tests --- tests/gui/view/diffusion_model.test.js | 2 +- tests/gui/view/mds.test.js | 42 ++++++++++----------- tests/gui/view/word_to_vec.test.js | 52 +++++++++++++------------- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/tests/gui/view/diffusion_model.test.js b/tests/gui/view/diffusion_model.test.js index 514a5072..72eef8cf 100644 --- a/tests/gui/view/diffusion_model.test.js +++ b/tests/gui/view/diffusion_model.test.js @@ -48,5 +48,5 @@ describe('generate', () => { await expect(epoch.textContent()).resolves.toBe('10') await expect(methodFooter.textContent()).resolves.toMatch(/^loss/) - }) + }, 60000) }) diff --git a/tests/gui/view/mds.test.js b/tests/gui/view/mds.test.js index 35d48d6e..ad5a276e 100644 --- a/tests/gui/view/mds.test.js +++ b/tests/gui/view/mds.test.js @@ -5,6 +5,14 @@ describe('dimensionality reduction', () => { let page beforeEach(async () => { page = await getPage() + const clusters = page.locator('#data_menu input[name=n]') + await clusters.fill('1') + const resetDataButton = page.locator('#data_menu input[value=Reset]') + await resetDataButton.dispatchEvent('click') + const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select') + await taskSelectBox.selectOption('DR') + const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp') + await modelSelectBox.selectOption('mds') }) afterEach(async () => { @@ -12,31 +20,23 @@ describe('dimensionality reduction', () => { }) test('initialize', async () => { - const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select') - await taskSelectBox.selectOption('DR') - const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp') - await modelSelectBox.selectOption('mds') - const methodMenu = await page.waitForSelector('#ml_selector #method_menu') - const buttons = await methodMenu.waitForSelector('.buttons') + expect.assertions(0) + const methodMenu = page.locator('#ml_selector #method_menu') + const buttons = methodMenu.locator('.buttons') - const fitButton = await buttons.waitForSelector('input[value=Fit]') - expect(fitButton).toBeDefined() + const fitButton = buttons.locator('input[value=Fit]') + await fitButton.waitFor() }) test('learn', async () => { - const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select') - await taskSelectBox.selectOption('DR') - const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp') - await modelSelectBox.selectOption('mds') - const methodMenu = await page.waitForSelector('#ml_selector #method_menu') - const buttons = await methodMenu.waitForSelector('.buttons') + const methodMenu = page.locator('#ml_selector #method_menu') + const buttons = methodMenu.locator('.buttons') - const fitButton = await buttons.waitForSelector('input[value=Fit]') - await fitButton.evaluate(el => el.click()) + const fitButton = buttons.locator('input[value=Fit]') + await fitButton.dispatchEvent('click') - const svg = await page.waitForSelector('#plot-area svg') - await svg.waitForSelector('.tile circle') - const circles = await svg.$$('.tile circle') - expect(circles).toHaveLength(300) - }, 60000) + const svg = page.locator('#plot-area svg') + const circles = svg.locator('.tile circle') + await expect(circles.count()).resolves.toBe(100) + }) }) diff --git a/tests/gui/view/word_to_vec.test.js b/tests/gui/view/word_to_vec.test.js index 920888c8..f43402db 100644 --- a/tests/gui/view/word_to_vec.test.js +++ b/tests/gui/view/word_to_vec.test.js @@ -8,11 +8,13 @@ describe('word embedding', () => { let page beforeEach(async () => { page = await getPage() - const dataSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(2) select') + const dataSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(2) select') await dataSelectBox.selectOption('text') - const taskSelectBox = await page.waitForSelector('#ml_selector dl:first-child dd:nth-child(5) select') + const svg = page.locator('#plot-area svg') + await svg.locator('.points circle').waitFor() + const taskSelectBox = page.locator('#ml_selector dl:first-child dd:nth-child(5) select') await taskSelectBox.selectOption('WE') - const modelSelectBox = await page.waitForSelector('#ml_selector .model_selection #mlDisp') + const modelSelectBox = page.locator('#ml_selector .model_selection #mlDisp') await modelSelectBox.selectOption('word_to_vec') }) @@ -21,35 +23,35 @@ describe('word embedding', () => { }) test('initialize', async () => { - const methodMenu = await page.waitForSelector('#ml_selector #method_menu') - const buttons = await methodMenu.waitForSelector('.buttons') - - const method = await buttons.waitForSelector('select:nth-of-type(1)') - await expect((await method.getProperty('value')).jsonValue()).resolves.toBe('CBOW') - const n = await buttons.waitForSelector('input:nth-of-type(1)') - await expect(n.getAttribute('value')).resolves.toBe('1') - const iteration = await buttons.waitForSelector('select:nth-of-type(2)') - await expect((await iteration.getProperty('value')).jsonValue()).resolves.toBe('1') - const rate = await buttons.waitForSelector('input:nth-of-type(3)') - await expect(rate.getAttribute('value')).resolves.toBe('0.001') - const batch = await buttons.waitForSelector('input:nth-of-type(4)') - await expect(batch.getAttribute('value')).resolves.toBe('10') + const methodMenu = page.locator('#ml_selector #method_menu') + const buttons = methodMenu.locator('.buttons') + + const method = buttons.locator('select').first() + await expect(method.inputValue()).resolves.toBe('CBOW') + const n = buttons.locator('input:nth-of-type(1)') + await expect(n.inputValue()).resolves.toBe('1') + const iteration = buttons.locator('select').nth(1) + await expect(iteration.inputValue()).resolves.toBe('1') + const rate = buttons.locator('input:nth-of-type(3)') + await expect(rate.inputValue()).resolves.toBe('0.001') + const batch = buttons.locator('input:nth-of-type(4)') + await expect(batch.inputValue()).resolves.toBe('10') }) test('learn', async () => { - const methodMenu = await page.waitForSelector('#ml_selector #method_menu') - const buttons = await methodMenu.waitForSelector('.buttons') + const methodMenu = page.locator('#ml_selector #method_menu') + const buttons = methodMenu.locator('.buttons') - const epoch = await buttons.waitForSelector('[name=epoch]') + const epoch = buttons.locator('[name=epoch]') await expect(epoch.textContent()).resolves.toBe('0') - const methodFooter = await page.waitForSelector('#method_footer', { state: 'attached' }) + const methodFooter = page.locator('#method_footer', { state: 'attached' }) await expect(methodFooter.textContent()).resolves.toBe('') - const initButton = await buttons.waitForSelector('input[value=Initialize]') - await initButton.evaluate(el => el.click()) - const stepButton = await buttons.waitForSelector('input[value=Step]:enabled') - await stepButton.evaluate(el => el.click()) - await buttons.waitForSelector('input[value=Step]:enabled') + const initButton = buttons.locator('input[value=Initialize]') + await initButton.dispatchEvent('click') + const stepButton = buttons.locator('input[value=Step]:enabled') + await stepButton.dispatchEvent('click') + await buttons.locator('input[value=Step]:enabled').waitFor() await expect(epoch.textContent()).resolves.toBe('1') await expect(methodFooter.textContent()).resolves.toMatch(/^loss/)