Compare commits

..

2 Commits

2 changed files with 93 additions and 4 deletions

View File

@@ -1,15 +1,50 @@
package ru.spbstu.telematics.java;
import java.util.Random;
/*
* Симулирует работу сенсоров, установленных в комнате.
*/
public class Sensor implements Runnable {
Room room;
private double temperature;
private double humidity;
private Room room;
public Sensor(Room room) {
this.room = room;
}
// Температура
private volatile double temperature;
public double getTemperature() {
return temperature;
}
// Влажность
private volatile double humidity;
public double getHumidity() {
return humidity;
}
// Частота считывания значений с сенсоров
private long updateIntervalMs = 1000;
// Параметры произвольной ошибки измерений сенсоров
private Random random = new Random();
private double maxTemperatureError = 0.5;
private double maxHumidityError = 0.02;
@Override
public void run() {
while (!Thread.interrupted()) {
temperature = room.getTemperature() + (random.nextDouble() - 0.5) * 2 * maxTemperatureError;
humidity = room.getHumidity() + (random.nextDouble() - 0.5) * 2 * maxHumidityError;
try {
Thread.sleep(updateIntervalMs);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}

View File

@@ -0,0 +1,54 @@
package ru.spbstu.telematics.java;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class SensorTests {
/*
* Моковый класс комнаты для упрощения тестирования сенсоров.
*/
private class MockRoom extends Room {
double temperature;
double humidity;
public MockRoom(double temperature, double humidity) {
this.temperature = temperature;
this.humidity = humidity;
}
@Override
public double getTemperature() {
return temperature;
}
@Override
public double getHumidity() {
return humidity;
}
}
/*
* Проверяет, что сенсоры выдают реальную температуру и влажность комнаты в пределах
* некоторой погрешности.
*/
@Test
public void testSensor() throws InterruptedException {
double initialTemperature = 30.0;
double initialHumidity = 0.8;
Room room = new MockRoom(initialTemperature, initialHumidity);
Sensor sensor = new Sensor(room);
Thread thread = new Thread(sensor);
thread.start();
for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
assertTrue(Math.abs(initialTemperature - sensor.getTemperature()) <= 1);
assertTrue(Math.abs(initialHumidity - sensor.getHumidity()) <= 0.05);
}
thread.interrupt();
thread.join();
}
}