Tasmota/lib/lib_basic/IRremoteESP8266-2.7.15/test/ir_Transcold_test.cpp

211 lines
6.9 KiB
C++

// Copyright 2020 crankyoldgit
#include "IRac.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for decodeTranscold().
TEST(TestDecodeTranscold, RealExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1256#issuecomment-683608224
const uint16_t rawData[101] = {
5944, 7612,
558, 3556, 556, 3556, 556, 3556, 556, 1526, 554, 3556, 556, 1528,
554, 1526, 556, 3558, 554, 1524, 556, 1528, 556, 1526, 556, 3556,
554, 1528, 556, 3556, 554, 3556, 556, 1528, 554, 1526, 556, 3556,
556, 3556, 554, 1528, 554, 1526, 554, 3558, 554, 1528, 554, 3556,
556, 3556, 556, 1526, 554, 1526, 556, 3556, 554, 3556, 554, 1526,
554, 3556, 556, 1526, 556, 1526, 554, 3558, 554, 1526, 556, 3556,
556, 1526, 556, 3554, 556, 1524, 556, 1526, 556, 3556, 556, 1526,
554, 3556, 556, 1524, 558, 3556, 554, 1526, 556, 3556, 554, 3556,
556, 7514,
556}; // UNKNOWN C38A8243
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData, 101, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::TRANSCOLD, irsend.capture.decode_type);
ASSERT_EQ(kTranscoldBits, irsend.capture.bits);
EXPECT_EQ(0xE96554, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(
"Power: On, Mode: 6 (Cool), Fan: 9 (Min), Temp: 22C",
IRAcUtils::resultAcToString(&irsend.capture));
stdAc::state_t r, p;
ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p));
}
TEST(TestDecodeTranscold, SyntheticExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
irsend.reset();
irsend.sendTranscold(0xE96554);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::TRANSCOLD, irsend.capture.decode_type);
EXPECT_EQ(kTranscoldBits, irsend.capture.bits);
EXPECT_EQ(0xE96554, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.command);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(
"f38000d50"
"m5944s7563"
"m555s3556m555s3556m555s3556m555s1526m555s3556m555s1526m555s1526m555s3556"
"m555s1526m555s1526m555s1526m555s3556m555s1526m555s3556m555s3556m555s1526"
"m555s1526m555s3556m555s3556m555s1526m555s1526m555s3556m555s1526m555s3556"
"m555s3556m555s1526m555s1526m555s3556m555s3556m555s1526m555s3556m555s1526"
"m555s1526m555s3556m555s1526m555s3556m555s1526m555s3556m555s1526m555s1526"
"m555s3556m555s1526m555s3556m555s1526m555s3556m555s1526m555s3556m555s3556"
"m555s7563"
"m555s100000",
irsend.outputStr());
}
TEST(TestUtils, Housekeeping) {
ASSERT_EQ("TRANSCOLD", typeToString(decode_type_t::TRANSCOLD));
ASSERT_EQ(decode_type_t::TRANSCOLD, strToDecodeType("TRANSCOLD"));
ASSERT_FALSE(hasACState(decode_type_t::TRANSCOLD));
ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::TRANSCOLD));
ASSERT_EQ(kTranscoldBits, IRsend::defaultBits(decode_type_t::TRANSCOLD));
ASSERT_EQ(kTranscoldDefaultRepeat,
IRsend::minRepeats(decode_type_t::TRANSCOLD));
}
// Tests for the IRTranscoldAc class.
TEST(TestTranscoldAcClass, SetAndGetRaw) {
IRTranscoldAc ac(kGpioUnused);
ac.setRaw(0xB21F28);
EXPECT_EQ(0xB21F28, ac.getRaw());
ac.setRaw(kTranscoldKnownGoodState);
EXPECT_EQ(kTranscoldKnownGoodState, ac.getRaw());
}
TEST(TestTranscoldAcClass, SetAndGetTemp) {
IRTranscoldAc ac(kGpioUnused);
ac.setTemp(25);
EXPECT_EQ(25, ac.getTemp());
ac.setTemp(kTranscoldTempMin);
EXPECT_EQ(kTranscoldTempMin, ac.getTemp());
ac.setTemp(kTranscoldTempMax);
EXPECT_EQ(kTranscoldTempMax, ac.getTemp());
ac.setTemp(kTranscoldTempMin - 1);
EXPECT_EQ(kTranscoldTempMin, ac.getTemp());
ac.setTemp(kTranscoldTempMax + 1);
EXPECT_EQ(kTranscoldTempMax, ac.getTemp());
}
TEST(TestTranscoldAcClass, SetAndGetMode) {
IRTranscoldAc ac(kGpioUnused);
ac.setMode(kTranscoldHeat);
EXPECT_EQ(kTranscoldHeat, ac.getMode());
ac.setMode(kTranscoldCool);
EXPECT_EQ(kTranscoldCool, ac.getMode());
ac.setMode(kTranscoldDry);
EXPECT_EQ(kTranscoldDry, ac.getMode());
ac.setMode(kTranscoldAuto);
EXPECT_EQ(kTranscoldAuto, ac.getMode());
ac.setMode(kTranscoldFan);
EXPECT_EQ(kTranscoldFan, ac.getMode());
}
TEST(TestTranscoldAcClass, SetAndGetFan) {
IRTranscoldAc ac(kGpioUnused);
// This mode allows pretty much everything except Auto0 speed.
ac.setMode(kTranscoldCool);
ac.setFan(kTranscoldFanMax);
EXPECT_EQ(kTranscoldFanMax, ac.getFan());
ac.setFan(kTranscoldFanMin);
EXPECT_EQ(kTranscoldFanMin, ac.getFan());
ac.setFan(kTranscoldFanZoneFollow);
EXPECT_EQ(kTranscoldFanZoneFollow, ac.getFan());
ac.setFan(kTranscoldFanAuto);
EXPECT_EQ(kTranscoldFanAuto, ac.getFan());
ac.setFan(kTranscoldFanAuto0);
EXPECT_EQ(kTranscoldFanAuto, ac.getFan());
ac.setFan(kTranscoldFanMax);
EXPECT_EQ(kTranscoldFanMax, ac.getFan());
ASSERT_NE(3, kTranscoldFanAuto);
// Now try some unexpected value.
ac.setFan(3);
EXPECT_EQ(kTranscoldFanAuto, ac.getFan());
// These modes allows pretty much everything except Auto speed.
ac.setMode(kTranscoldDry);
EXPECT_EQ(kTranscoldFanAuto0, ac.getFan());
ac.setFan(kTranscoldFanMax);
EXPECT_EQ(kTranscoldFanMax, ac.getFan());
ac.setFan(kTranscoldFanAuto);
EXPECT_EQ(kTranscoldFanAuto0, ac.getFan());
ac.setMode(kTranscoldAuto);
EXPECT_EQ(kTranscoldFanAuto0, ac.getFan());
ac.setFan(kTranscoldFanMax);
EXPECT_EQ(kTranscoldFanMax, ac.getFan());
ac.setFan(kTranscoldFanAuto0);
EXPECT_EQ(kTranscoldFanAuto0, ac.getFan());
}
TEST(TestTranscoldAcClass, SpecialModesAndReset) {
IRTranscoldAc ac(kGpioUnused);
ASSERT_NE(kTranscoldSwing, ac.getRaw());
ac.setSwing();
ASSERT_EQ(kTranscoldSwing, ac.getRaw());
ac.stateReset();
ASSERT_NE(kTranscoldSwing, ac.getRaw());
}
TEST(TestTranscoldAcClass, HumanReadable) {
IRTranscoldAc ac(kGpioUnused);
ac.begin();
// Initial starting point.
EXPECT_EQ(
"Power: Off", ac.toString());
ac.setPower(true);
EXPECT_EQ(
"Power: On, Mode: 6 (Cool), Fan: 9 (Min), Temp: 22C",
ac.toString());
ac.setMode(kTranscoldHeat);
ac.setFan(kTranscoldFanMin);
ac.setTemp(22);
EXPECT_EQ(
"Power: On, Mode: 10 (Heat), Fan: 9 (Min), Temp: 22C",
ac.toString());
ac.setSwing();
EXPECT_EQ("Power: On, Swing: Toggle", ac.toString());
ac.setPower(false);
EXPECT_EQ("Power: Off", ac.toString());
}
TEST(TestTranscoldAcClass, BuildKnownState) {
IRTranscoldAc ac(kGpioUnused);
// "temp down, 19, Auto, cool, close (right)"
// Data from:
// https://docs.google.com/spreadsheets/d/1qdoyB0FyJm85HPP9oXcfui0n4ztXBFlik6kiNlkO2IM/edit#gid=694351627&range=A25:F25
const uint32_t state = 0xEF6B54;
ac.stateReset();
ac.on();
ac.setMode(kTranscoldCool);
ac.setFan(kTranscoldFanAuto);
ac.setTemp(19);
EXPECT_EQ("Power: On, Mode: 6 (Cool), Fan: 15 (Auto), Temp: 19C",
ac.toString());
ASSERT_EQ(state, ac.getRaw());
}