const assert = require('node:assert/strict'); let Auto; try { Auto = require('../android/app/assets/qualidade-auto.js'); } catch (e) { assert.fail('Qualidade automática ainda não implementada'); } let q = new Auto(); assert.equal(q.level, 0); q.update({fps: 15, bitrate: 400000, rtt: .5}); assert.equal(q.level, 1); q.update({fps: 15, bitrate: 350000, rtt: .5}); assert.equal(q.level, 2); q.update({fps: 30, bitrate: 3000000, rtt: .02}); assert.equal(q.level, 2, 'Uma leitura boa não pode causar oscilação'); q.update({fps: 30, bitrate: 3000000, rtt: .02}); q.update({fps: 30, bitrate: 3000000, rtt: .02}); q.update({fps: 30, bitrate: 3000000, rtt: .02}); assert.equal(q.level, 1); assert.equal(q.parameters().maxFramerate, 30); console.log('Qualidade automática: reduz com congestionamento e sobe após estabilidade: OK'); assert.equal(typeof Auto.constraints, 'function', 'Seleção de câmera/qualidade ausente'); const v = Auto.constraints({cameraLado:'environment',videoResolucao:'2160',videoFPS:60}, {}); assert.equal(v.facingMode.exact, 'environment'); assert.equal(v.width.exact, 3840); assert.equal(v.frameRate.exact, 60); const maximum = Auto.constraints({videoResolucao:'max',videoFPS:-1}, {width:{max:7680},height:{max:4320},frameRate:{max:120}}); assert.equal(maximum.width.ideal, 7680); assert.equal(maximum.frameRate.ideal, 120); assert.equal(maximum.frameRate.max, undefined, 'Sem teto artificial'); assert.equal(new Auto(60, 20000000).parameters().maxFramerate, 60);