Compare commits
2 Commits
5b753c1dda
...
1c00338d2d
| Author | SHA1 | Date | |
|---|---|---|---|
| 1c00338d2d | |||
| d8a6c256d5 |
@@ -1,15 +1,50 @@
|
|||||||
package ru.spbstu.telematics.java;
|
package ru.spbstu.telematics.java;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Симулирует работу сенсоров, установленных в комнате.
|
* Симулирует работу сенсоров, установленных в комнате.
|
||||||
*/
|
*/
|
||||||
public class Sensor implements Runnable {
|
public class Sensor implements Runnable {
|
||||||
Room room;
|
private Room room;
|
||||||
private double temperature;
|
|
||||||
private double humidity;
|
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
|
@Override
|
||||||
public void run() {
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user