5.10.0 20171201 * Upgrade library ArduinoJson to 5.11.2 * Upgrade library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols (code size reduction) * Upgrade library NeoPixelBus to 2.2.9 * Upgrade library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table (#define ONEWIRE_CRC8_TABLE 0) (code size reduction) * Update library PubSubClient to 2.6 + 9 commits and additional delay (#790) * Update core_esp8266_wiring_digital.c to latest (staged) level * Patch library I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility * Remove command EnergyReset 1..3 now replaced by ENergyReset1 to EnergyReset3 * Remove spaces in JSON messages (code size reduction) * Renamed xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library OneWire and providing dynamic sensor scan * Fix possible iram1_0_seg compile error by shrinking ICACHE_RAM_ATTR code usage * Fix PWM watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146) * Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code (#1181) * Fix blank console log window by using XML character encoding (#1187) * Fix wrong response name for command HlwISet (#1214) * Fix DHT type sensor timeout recognition by distinguish "signal already there" from "timeout" (#1233) * Add fixed color options 1..12 to command Color * Add + (plus) and - (minus) to commands Dimmer (+10/-10), Speed and Scheme * Add + (plus) and - (minus) to command Color to select 1 out of 12 preset colors * Add + (plus) and - (minus) to command Ct to control ColdWarm led ColorTemperature (+34/-34) * Add commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3 0..42500000 * to (Re)set Energy Today, Yesterday or Total respectively in Wh (#406, #685, #1202) * Add optional ADS1115 driver as alternative for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2 * Add support for INA219 Voltage and Current sensor to be enabled in user_config.h with define USE_INA219 * Add support for Arilux LC11 (Clearing RF home code when selecting no Arilux module) * Add support for WS2812 RGBW ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE (#1156) * Add SettingsSaveAll routine to command SaveData to be used before controlled power down (#1202) * Add option PUSHBUTTON_TOGGLE (SwitchMode 7) to allow toggling on any switch change (#1221) * Add new xdrv_05_ds18x20.ino free from library OneWire and add the following features: * Add support for DS1822 * Add forced setting of 12-bit resolution for selected device types (#1222) * Add read temperature retry counter (#1215) * Fix lost sensors by performing sensor probe at restart only thereby removing dynamic sensor probe (#1215) * Fix sensor address sorting using ascending sort on sensor type followed by sensor address * Rewrite JSON resulting in shorter message allowing more sensors in default firmware image: * "DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6} * Add additional define in user_config.h to select either single sensor (defines disabled), new multi sensor (USE_DS18X20) or legacy multi sensor (USE_DS18X20_LEGACY) * Add clock support for more different pixel counts (#1226) * Add support for Sonoff Dual R2 (#1249) * Add FriendlyName to web page tab and add program information to web page footer (#1275)
92 lines
3.6 KiB
C++
92 lines
3.6 KiB
C++
// Copyright 2017 David Conran
|
|
|
|
#include "IRutils.h"
|
|
#include <stdint.h>
|
|
#include "gtest/gtest.h"
|
|
|
|
// Tests reverseBits().
|
|
|
|
// Tests reverseBits for typical use.
|
|
TEST(ReverseBitsTest, TypicalUse) {
|
|
EXPECT_EQ(0xF, reverseBits(0xF0, 8));
|
|
EXPECT_EQ(0xFFFF, reverseBits(0xFFFF0000, 32));
|
|
EXPECT_EQ(0x555500005555FFFF, reverseBits(0xFFFFAAAA0000AAAA, 64));
|
|
EXPECT_EQ(0, reverseBits(0, 64));
|
|
EXPECT_EQ(0xFFFFFFFFFFFFFFFF, reverseBits(0xFFFFFFFFFFFFFFFF, 64));
|
|
}
|
|
|
|
// Tests reverseBits for bit size values <= 1
|
|
TEST(ReverseBitsTest, LessThanTwoBitsReversed) {
|
|
EXPECT_EQ(0x12345678, reverseBits(0x12345678, 1));
|
|
EXPECT_EQ(1234, reverseBits(1234, 0));
|
|
}
|
|
|
|
// Tests reverseBits for bit size larger than a uint64_t.
|
|
TEST(ReverseBitsTest, LargerThan64BitsReversed) {
|
|
EXPECT_EQ(0, reverseBits(0, 65));
|
|
EXPECT_EQ(0xFFFFFFFFFFFFFFFF, reverseBits(0xFFFFFFFFFFFFFFFF, 100));
|
|
EXPECT_EQ(0x555500005555FFFF, reverseBits(0xFFFFAAAA0000AAAA, 3000));
|
|
}
|
|
|
|
// Tests reverseBits for bit sizes less than all the data stored.
|
|
TEST(ReverseBitsTest, LessBitsReversedThanInputHasSet) {
|
|
EXPECT_EQ(0xF8, reverseBits(0xF1, 4));
|
|
EXPECT_EQ(0xF5, reverseBits(0xFA, 4));
|
|
EXPECT_EQ(0x12345678FFFF0000, reverseBits(0x123456780000FFFF, 32));
|
|
}
|
|
|
|
// Tests for uint64ToString()
|
|
|
|
TEST(TestUint64ToString, TrivialCases) {
|
|
EXPECT_EQ("0", uint64ToString(0)); // Default base (10)
|
|
EXPECT_EQ("0", uint64ToString(0, 2)); // Base-2
|
|
EXPECT_EQ("0", uint64ToString(0, 8)); // Base-8
|
|
EXPECT_EQ("0", uint64ToString(0, 10)); // Base-10
|
|
EXPECT_EQ("0", uint64ToString(0, 16)); // Base-16
|
|
|
|
EXPECT_EQ("1", uint64ToString(1, 2)); // Base-2
|
|
EXPECT_EQ("2", uint64ToString(2, 8)); // Base-8
|
|
EXPECT_EQ("3", uint64ToString(3, 10)); // Base-10
|
|
EXPECT_EQ("4", uint64ToString(4, 16)); // Base-16
|
|
}
|
|
|
|
TEST(TestUint64ToString, NormalUse) {
|
|
EXPECT_EQ("12345", uint64ToString(12345));
|
|
EXPECT_EQ("100", uint64ToString(4, 2));
|
|
EXPECT_EQ("3039", uint64ToString(12345, 16));
|
|
EXPECT_EQ("123456", uint64ToString(123456));
|
|
EXPECT_EQ("1E240", uint64ToString(123456, 16));
|
|
EXPECT_EQ("FEEDDEADBEEF", uint64ToString(0xfeeddeadbeef, 16));
|
|
}
|
|
|
|
TEST(TestUint64ToString, Max64Bit) {
|
|
EXPECT_EQ("18446744073709551615", uint64ToString(UINT64_MAX)); // Default
|
|
EXPECT_EQ("1111111111111111111111111111111111111111111111111111111111111111",
|
|
uint64ToString(UINT64_MAX, 2)); // Base-2
|
|
EXPECT_EQ("1777777777777777777777", uint64ToString(UINT64_MAX, 8)); // Base-8
|
|
EXPECT_EQ("18446744073709551615", uint64ToString(UINT64_MAX, 10)); // Base-10
|
|
EXPECT_EQ("FFFFFFFFFFFFFFFF", uint64ToString(UINT64_MAX, 16)); // Base-16
|
|
}
|
|
|
|
TEST(TestUint64ToString, Max32Bit) {
|
|
EXPECT_EQ("4294967295", uint64ToString(UINT32_MAX)); // Default
|
|
EXPECT_EQ("37777777777", uint64ToString(UINT32_MAX, 8)); // Base-8
|
|
EXPECT_EQ("4294967295", uint64ToString(UINT32_MAX, 10)); // Base-10
|
|
EXPECT_EQ("FFFFFFFF", uint64ToString(UINT32_MAX, 16)); // Base-16
|
|
}
|
|
|
|
TEST(TestUint64ToString, InterestingCases) {
|
|
// Previous hacky-code didn't handle leading zeros in the lower 32 bits.
|
|
EXPECT_EQ("100000000", uint64ToString(0x100000000, 16));
|
|
EXPECT_EQ("100000001", uint64ToString(0x100000001, 16));
|
|
}
|
|
|
|
TEST(TestUint64ToString, SillyBases) {
|
|
// If we are given a silly base, we should defer to Base-10.
|
|
EXPECT_EQ("12345", uint64ToString(12345, 0)); // Super silly, makes no sense.
|
|
EXPECT_EQ("12345", uint64ToString(12345, 1)); // We don't do unary.
|
|
EXPECT_EQ("12345", uint64ToString(12345, 100)); // We can't print base-100.
|
|
EXPECT_EQ("12345", uint64ToString(12345, 37)); // Base-37 is one to far.
|
|
EXPECT_EQ("9IX", uint64ToString(12345, 36)); // But we *can* do base-36.
|
|
}
|