aboutsummaryrefslogtreecommitdiff
path: root/src/peripherals
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/peripherals/adc.spec.ts7
-rw-r--r--src/peripherals/clock.spec.ts1
-rw-r--r--src/peripherals/eeprom.spec.ts3
-rw-r--r--src/peripherals/gpio.spec.ts17
-rw-r--r--src/peripherals/spi.spec.ts7
-rw-r--r--src/peripherals/timer.spec.ts27
-rw-r--r--src/peripherals/twi.spec.ts27
-rw-r--r--src/peripherals/usart.spec.ts19
-rw-r--r--src/peripherals/watchdog.spec.ts1
9 files changed, 59 insertions, 50 deletions
diff --git a/src/peripherals/adc.spec.ts b/src/peripherals/adc.spec.ts
index 4eb9aff..c67b615 100644
--- a/src/peripherals/adc.spec.ts
+++ b/src/peripherals/adc.spec.ts
@@ -1,6 +1,7 @@
+import { describe, expect, it, vi } from 'vitest';
import { CPU } from '../cpu/cpu';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
-import { AVRADC, adcConfig, ADCMuxInputType } from './adc';
+import { adcConfig, ADCMuxInputType, AVRADC } from './adc';
const R16 = 16;
const R17 = 17;
@@ -51,7 +52,7 @@ describe('ADC', () => {
const adc = new AVRADC(cpu, adcConfig);
const runner = new TestProgramRunner(cpu);
- const adcReadSpy = jest.spyOn(adc, 'onADCRead');
+ const adcReadSpy = vi.spyOn(adc, 'onADCRead');
adc.channelValues[0] = 2.56; // should result in 2.56/5*1024 = 524
// Setup
@@ -114,7 +115,7 @@ describe('ADC', () => {
/* do nothing on break */
});
- const adcReadSpy = jest.spyOn(adc, 'onADCRead');
+ const adcReadSpy = vi.spyOn(adc, 'onADCRead');
adc.channelValues[0] = 2.56; // should result in 2.56/5*1024 = 524
// Setup
diff --git a/src/peripherals/clock.spec.ts b/src/peripherals/clock.spec.ts
index 69fc832..cb45a14 100644
--- a/src/peripherals/clock.spec.ts
+++ b/src/peripherals/clock.spec.ts
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest';
import { CPU } from '../cpu/cpu';
import { AVRClock, clockConfig } from './clock';
diff --git a/src/peripherals/eeprom.spec.ts b/src/peripherals/eeprom.spec.ts
index a90116f..a9cab9b 100644
--- a/src/peripherals/eeprom.spec.ts
+++ b/src/peripherals/eeprom.spec.ts
@@ -1,6 +1,7 @@
+import { describe, expect, it } from 'vitest';
import { CPU } from '../cpu/cpu';
-import { AVREEPROM, EEPROMMemoryBackend } from './eeprom';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
+import { AVREEPROM, EEPROMMemoryBackend } from './eeprom';
// EEPROM Registers
const EECR = 0x3f;
diff --git a/src/peripherals/gpio.spec.ts b/src/peripherals/gpio.spec.ts
index 755476e..046f196 100644
--- a/src/peripherals/gpio.spec.ts
+++ b/src/peripherals/gpio.spec.ts
@@ -1,6 +1,7 @@
import { CPU } from '../cpu/cpu';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
import { AVRIOPort, portBConfig, PinState, portDConfig, PinOverrideMode } from './gpio';
+import { describe, it, expect, vi } from 'vitest';
// CPU registers
const SREG = 95;
@@ -41,7 +42,7 @@ describe('GPIO', () => {
it('should invoke the listeners when the port is written to', () => {
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn();
+ const listener = vi.fn();
cpu.writeData(DDRB, 0x0f);
port.addListener(listener);
cpu.writeData(PORTB, 0x55);
@@ -52,7 +53,7 @@ describe('GPIO', () => {
it('should invoke the listeners when DDR changes (issue #28)', () => {
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn();
+ const listener = vi.fn();
cpu.writeData(PORTB, 0x55);
port.addListener(listener);
cpu.writeData(DDRB, 0xf0);
@@ -62,7 +63,7 @@ describe('GPIO', () => {
it('should invoke the listeners when pullup register enabled (issue #62)', () => {
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn();
+ const listener = vi.fn();
port.addListener(listener);
cpu.writeData(PORTB, 0x55);
expect(listener).toHaveBeenCalledWith(0x55, 0);
@@ -71,7 +72,7 @@ describe('GPIO', () => {
it('should toggle the pin when writing to the PIN register', () => {
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn();
+ const listener = vi.fn();
port.addListener(listener);
cpu.writeData(DDRB, 0x0f);
cpu.writeData(PORTB, 0x55);
@@ -101,7 +102,7 @@ describe('GPIO', () => {
const portD = new AVRIOPort(cpu, portDConfig);
const runner = new TestProgramRunner(cpu);
- const listener = jest.fn();
+ const listener = vi.fn();
portD.addListener(listener);
// Setup: pins 6, 3 are output, set to HIGH
@@ -132,7 +133,7 @@ describe('GPIO', () => {
it('should remove the given listener', () => {
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn();
+ const listener = vi.fn();
port.addListener(listener);
cpu.writeData(DDRB, 0x0f);
port.removeListener(listener);
@@ -176,7 +177,7 @@ describe('GPIO', () => {
// Related issue: https://github.com/wokwi/avr8js/issues/9
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn(() => {
+ const listener = vi.fn(() => {
expect(port.pinState(PB0)).toBe(PinState.High);
});
expect(port.pinState(PB0)).toBe(PinState.Input);
@@ -190,7 +191,7 @@ describe('GPIO', () => {
// Related issue: https://github.com/wokwi/avr8js/issues/47
const cpu = new CPU(new Uint16Array(1024));
const port = new AVRIOPort(cpu, portBConfig);
- const listener = jest.fn(() => {
+ const listener = vi.fn(() => {
expect(port.pinState(PB0)).toBe(PinState.Low);
});
expect(port.pinState(PB0)).toBe(PinState.Input);
diff --git a/src/peripherals/spi.spec.ts b/src/peripherals/spi.spec.ts
index da429fe..72884c5 100644
--- a/src/peripherals/spi.spec.ts
+++ b/src/peripherals/spi.spec.ts
@@ -1,6 +1,7 @@
+import { describe, expect, it, vi } from 'vitest';
import { CPU } from '../cpu/cpu';
-import { AVRSPI, spiConfig } from './spi';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
+import { AVRSPI, spiConfig } from './spi';
const FREQ_16MHZ = 16e6;
@@ -99,7 +100,7 @@ describe('SPI', () => {
it('should call the `onByteTransfer` callback when initiating an SPI trasfer by writing to SPDR', () => {
const cpu = new CPU(new Uint16Array(1024));
const spi = new AVRSPI(cpu, spiConfig, FREQ_16MHZ);
- spi.onByte = jest.fn();
+ spi.onByte = vi.fn();
cpu.writeData(SPCR, SPE | MSTR);
cpu.writeData(SPDR, 0x8f);
@@ -110,7 +111,7 @@ describe('SPI', () => {
it('should ignore SPDR writes when the SPE bit in SPCR is clear', () => {
const cpu = new CPU(new Uint16Array(1024));
const spi = new AVRSPI(cpu, spiConfig, FREQ_16MHZ);
- spi.onByte = jest.fn();
+ spi.onByte = vi.fn();
cpu.writeData(SPCR, MSTR);
cpu.writeData(SPDR, 0x8f);
diff --git a/src/peripherals/timer.spec.ts b/src/peripherals/timer.spec.ts
index 609908d..893fe32 100644
--- a/src/peripherals/timer.spec.ts
+++ b/src/peripherals/timer.spec.ts
@@ -1,3 +1,4 @@
+import { describe, expect, it, vi } from 'vitest';
import { CPU } from '../cpu/cpu';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
import { AVRIOPort, PinOverrideMode, portBConfig, portDConfig } from './gpio';
@@ -544,7 +545,7 @@ describe('timer', () => {
// Listen to Port B's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
cpu.writeData(TCCR0B, FOC0B);
@@ -580,7 +581,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
@@ -633,7 +634,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
@@ -679,7 +680,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
@@ -753,7 +754,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const nopCount = lines.filter((line) => line.bytes == nopOpCode).length;
const runner = new TestProgramRunner(cpu);
@@ -800,7 +801,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
@@ -833,7 +834,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
runner.runInstructions(instructionCount);
@@ -861,7 +862,7 @@ describe('timer', () => {
// Listen to Port D's internal callback
const portD = new AVRIOPort(cpu, portDConfig);
- const gpioCallback = jest.spyOn(portD, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portD, 'timerOverridePin');
const runner = new TestProgramRunner(cpu);
runner.runInstructions(instructionCount);
@@ -921,7 +922,7 @@ describe('timer', () => {
IN r17, 0x26 ; R17 = TCNT; // TCNT0 should read 0x0
IN r18, 0x26 ; R18 = TCNT; // TCNT0 should read 0x0
- LDI r16, 0x2 ; OCR0A = 0x2; // TCNT0 should read 0x0
+ LDI r16, 0x2 ; OCR0A = 0x2; // TCNT0 should read 0x1
OUT 0x27, r16 ; // TCNT0 should read 0x1
NOP ; // TCNT0 should read 0x2
IN r19, 0x26 ; R19 = TCNT; // TCNT0 should read 0x1
@@ -1118,7 +1119,7 @@ describe('timer', () => {
// Listen to Port B's internal callback
const portB = new AVRIOPort(cpu, portBConfig);
- const gpioCallback = jest.spyOn(portB, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portB, 'timerOverridePin');
const nopCount = lines.filter((line) => line.bytes == nopOpCode).length;
const runner = new TestProgramRunner(cpu);
@@ -1164,7 +1165,7 @@ describe('timer', () => {
// Listen to Port B's internal callback
const portB = new AVRIOPort(cpu, portBConfig);
- const gpioCallback = jest.spyOn(portB, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portB, 'timerOverridePin');
const nopCount = lines.filter((line) => line.bytes == nopOpCode).length;
const runner = new TestProgramRunner(cpu);
@@ -1192,7 +1193,7 @@ describe('timer', () => {
// Listen to Port B's internal callback
const portB = new AVRIOPort(cpu, portBConfig);
- const gpioCallback = jest.spyOn(portB, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portB, 'timerOverridePin');
cpu.writeData(TCCR1C, FOC1C);
@@ -1212,7 +1213,7 @@ describe('timer', () => {
// Listen to Port B's internal callback
const portB = new AVRIOPort(cpu, portBConfig);
- const gpioCallback = jest.spyOn(portB, 'timerOverridePin');
+ const gpioCallback = vi.spyOn(portB, 'timerOverridePin');
cpu.writeData(TCCR1C, FOC1C);
diff --git a/src/peripherals/twi.spec.ts b/src/peripherals/twi.spec.ts
index 342d611..5ddace5 100644
--- a/src/peripherals/twi.spec.ts
+++ b/src/peripherals/twi.spec.ts
@@ -1,3 +1,4 @@
+import { describe, expect, it, vi } from 'vitest';
import { CPU } from '../cpu/cpu';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
import { AVRTWI, twiConfig } from './twi';
@@ -61,7 +62,7 @@ describe('TWI', () => {
it('should call the startEvent handler when TWSTA bit is written 1', () => {
const cpu = new CPU(new Uint16Array(1024));
const twi = new AVRTWI(cpu, twiConfig, FREQ_16MHZ);
- jest.spyOn(twi.eventHandler, 'start');
+ vi.spyOn(twi.eventHandler, 'start');
cpu.writeData(TWCR, TWINT | TWSTA | TWEN);
cpu.cycles++;
cpu.tick();
@@ -78,14 +79,14 @@ describe('TWI', () => {
cpu.tick();
// Repeated start
- jest.spyOn(twi.eventHandler, 'start');
+ vi.spyOn(twi.eventHandler, 'start');
cpu.writeData(TWCR, TWINT | TWSTA | TWEN);
cpu.cycles++;
cpu.tick();
expect(twi.eventHandler.start).toHaveBeenCalledWith(true);
// Now try to connect...
- jest.spyOn(twi.eventHandler, 'connectToSlave');
+ vi.spyOn(twi.eventHandler, 'connectToSlave');
cpu.writeData(TWDR, 0x80); // Address 0x40, write mode
cpu.writeData(TWCR, TWINT | TWEN);
cpu.cycles++;
@@ -199,11 +200,11 @@ describe('TWI', () => {
const twi = new AVRTWI(cpu, twiConfig, FREQ_16MHZ);
const runner = new TestProgramRunner(cpu, onTestBreak);
twi.eventHandler = {
- start: jest.fn(),
- stop: jest.fn(),
- connectToSlave: jest.fn(),
- writeByte: jest.fn(),
- readByte: jest.fn(),
+ start: vi.fn(),
+ stop: vi.fn(),
+ connectToSlave: vi.fn(),
+ writeByte: vi.fn(),
+ readByte: vi.fn(),
};
// Step 1: wait for start condition
@@ -368,11 +369,11 @@ describe('TWI', () => {
const twi = new AVRTWI(cpu, twiConfig, FREQ_16MHZ);
const runner = new TestProgramRunner(cpu, onTestBreak);
twi.eventHandler = {
- start: jest.fn(),
- stop: jest.fn(),
- connectToSlave: jest.fn(),
- writeByte: jest.fn(),
- readByte: jest.fn(),
+ start: vi.fn(),
+ stop: vi.fn(),
+ connectToSlave: vi.fn(),
+ writeByte: vi.fn(),
+ readByte: vi.fn(),
};
// Step 1: wait for start condition
diff --git a/src/peripherals/usart.spec.ts b/src/peripherals/usart.spec.ts
index 8dbd5ce..fcbeec1 100644
--- a/src/peripherals/usart.spec.ts
+++ b/src/peripherals/usart.spec.ts
@@ -1,3 +1,4 @@
+import { describe, expect, it, vi } from 'vitest';
import { CPU } from '../cpu/cpu';
import { AVRUSART, usart0Config } from './usart';
@@ -56,7 +57,7 @@ describe('USART', () => {
it('should call onConfigurationChange when the baudRate changes', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- const onConfigurationChange = jest.fn();
+ const onConfigurationChange = vi.fn();
usart.onConfigurationChange = onConfigurationChange;
cpu.writeData(UBRR0H, 0);
@@ -111,7 +112,7 @@ describe('USART', () => {
it('should call onConfigurationChange when bitsPerChar change', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- const onConfigurationChange = jest.fn();
+ const onConfigurationChange = vi.fn();
usart.onConfigurationChange = onConfigurationChange;
cpu.writeData(UCSR0C, UCSZ0 | UCSZ1);
@@ -175,7 +176,7 @@ describe('USART', () => {
it('should invoke onByteTransmit when UDR0 is written to', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onByteTransmit = jest.fn();
+ usart.onByteTransmit = vi.fn();
cpu.writeData(UCSR0B, TXEN);
cpu.writeData(UDR0, 0x61);
expect(usart.onByteTransmit).toHaveBeenCalledWith(0x61);
@@ -185,7 +186,7 @@ describe('USART', () => {
it('txEnable should equal true when the transitter is enabled', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onByteTransmit = jest.fn();
+ usart.onByteTransmit = vi.fn();
expect(usart.txEnable).toEqual(false);
cpu.writeData(UCSR0B, TXEN);
expect(usart.txEnable).toEqual(true);
@@ -194,7 +195,7 @@ describe('USART', () => {
it('rxEnable should equal true when the transitter is enabled', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onByteTransmit = jest.fn();
+ usart.onByteTransmit = vi.fn();
expect(usart.rxEnable).toEqual(false);
cpu.writeData(UCSR0B, RXEN);
expect(usart.rxEnable).toEqual(true);
@@ -254,7 +255,7 @@ describe('USART', () => {
it('should call onLineTransmit with the current line buffer after every newline', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onLineTransmit = jest.fn();
+ usart.onLineTransmit = vi.fn();
cpu.writeData(UCSR0B, TXEN);
cpu.writeData(UDR0, 0x48); // 'H'
cpu.writeData(UDR0, 0x65); // 'e'
@@ -268,7 +269,7 @@ describe('USART', () => {
it('should not call onLineTransmit if no newline was received', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onLineTransmit = jest.fn();
+ usart.onLineTransmit = vi.fn();
cpu.writeData(UCSR0B, TXEN);
cpu.writeData(UDR0, 0x48); // 'H'
cpu.writeData(UDR0, 0x69); // 'i'
@@ -278,7 +279,7 @@ describe('USART', () => {
it('should clear the line buffer after each call to onLineTransmit', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- usart.onLineTransmit = jest.fn();
+ usart.onLineTransmit = vi.fn();
cpu.writeData(UCSR0B, TXEN);
cpu.writeData(UDR0, 0x48); // 'H'
cpu.writeData(UDR0, 0x69); // 'i'
@@ -324,7 +325,7 @@ describe('USART', () => {
it('should be ready to recieve the next byte after ~1.04ms when baudrate set to 9600', () => {
const cpu = new CPU(new Uint16Array(1024));
const usart = new AVRUSART(cpu, usart0Config, FREQ_16MHZ);
- const rxCompleteCallback = jest.fn();
+ const rxCompleteCallback = vi.fn();
usart.onRxComplete = rxCompleteCallback;
cpu.writeData(UCSR0B, RXEN);
cpu.writeData(UBRR0L, 103); // baud: 9600
diff --git a/src/peripherals/watchdog.spec.ts b/src/peripherals/watchdog.spec.ts
index edd7631..df72148 100644
--- a/src/peripherals/watchdog.spec.ts
+++ b/src/peripherals/watchdog.spec.ts
@@ -5,6 +5,7 @@
* Copyright (C) 2021 Uri Shaked
*/
+import { describe, expect, it } from 'vitest';
import { AVRClock, clockConfig } from '..';
import { CPU } from '../cpu/cpu';
import { asmProgram, TestProgramRunner } from '../utils/test-utils';
If you find this content useful please consider a small donation via bitcoin: bitcoin:1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2?amount=0.001&message=Donation Scraping git contents via cgit is very resource intensive. The continued hosting of these git repositories is entirely financed by your bitcoin contributions. For donations of a least 1 mBTC you include your IP address in the message of your bitcoin donation. This will remove this message in the future for requests from your IP, which will significantly reduce token usage. In any case, any contributions to bitcoin address 1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2 are very welcome. Thanks in advance for you contribution to a self-sustaining ecosystem.