static bool isOK_convertMasses(void) { if (!isOK_convertMassesFromM1M2()) { PRINT_ERROR(); return false; } if (!isOK_convertMassesEtaM()) { PRINT_ERROR(); return false; } if (!isOK_convertMassesEtaChirp()) { PRINT_ERROR(); return false; } massParameters mass, result; mass.totalMass = result.totalMass = 100.0; mass.eta = result.eta = 0.09; result.mass[0] = 90.0; result.mass[1] = 10.0; result.mu = 9.0; result.chirpMass = calcChirpMass(result.totalMass, result.eta); m1m2ToRemainingMass(&result); SAVE_FUNCTION_CALLER(); convertMasses(&mass, FROM_ETAM); if (!areMassParametersNear(&mass, &result)) { PRINT_ERROR(); return false; } PRINT_OK(); return true; }
static bool isOK_generateMass(void) { if (!isOK_randomBetween()) { return false; } if (!isOK_isMassBetweenLimits()) { return false; } if (!isOK_convertMasses()) { return false; } massParameters mass, limits[2]; limits[MIN].mass[0] = 3.0 * (limits[MIN].mass[1] = 3.0); limits[MAX].mass[0] = 2.0 * (limits[MAX].mass[1] = 30.0); convertMassesFromM1M2(&limits[MIN]); convertMassesFromM1M2(&limits[MAX]); SAVE_FUNCTION_CALLER(); generateMass(&mass, limits, GEN_M1M2); if (!isMassBetweenLimits(&mass, limits)) { generateMass(&mass, limits, GEN_M1M2); PRINT_ERROR(); return false; } generateMass(&mass, limits, GEN_M1M2); PRINT_OK(); return true; }
static bool isOK_m1m2ToRemainingMass(void) { massParameters mass; mass.mass[0] = 1.0; mass.mass[1] = 2.0; SAVE_FUNCTION_CALLER(); m1m2ToRemainingMass(&mass); if (mass.m1_m2 != 0.5) { PRINT_ERROR(); return false; } if (mass.nu != 0.5) { PRINT_ERROR(); return false; } mass.mass[0] = 2.0; mass.mass[1] = 1.0; SAVE_FUNCTION_CALLER(); m1m2ToRemainingMass(&mass); if (mass.m1_m2 != 2.0) { PRINT_ERROR(); return false; } if (mass.nu != 0.5) { PRINT_ERROR(); return false; } PRINT_OK(); return true; }
static bool isOK_setFormat(void) { if (!isOK_setOutputFormat()) { return false; } OutputFormat format; char separator[] = { '%', 'X' }; ushort code = 1; nameString name = "multiformat"; ushort precision = 5; bool leftJusfified = false; ushort width = 12; nameString output; nameString result[2][2] = { { "% 12.5lg", "% 12.5lg %% % 12.5lg" }, // { "% 12.5lg", "% 12.5lg X % 12.5lg" } }; for (ushort i = 0; i < 2; i++) { setOutputFormat(&format, precision, width, separator[i], leftJusfified, name, code); SAVE_FUNCTION_CALLER(); setFormats(output, 1, &format); if (strcmp(result[i][0], output)) { PRINT_ERROR(); return false; } SAVE_FUNCTION_CALLER(); setFormats(output, 2, &format); if (strcmp(result[i][1], output)) { PRINT_ERROR(); return false; } } PRINT_OK(); return true; }
static bool isOK_setFormatForOneNumber(void) { OutputFormat format; nameString result[2] = { "%- 10.5lg", "% 10.5lg" }; format.leftJustified = true; format.precision = 5; format.width = 10; for (short i = 0; i < 2; i++, neg(&format.leftJustified)) { SAVE_FUNCTION_CALLER(); setFormatForOneNumber(&format); if (strcmp(result[i], format.oneNumber)) { PRINT_ERROR(); return false; } } format.leftJustified = false; for (short i = 0; i < 2; i++, neg(&format.leftJustified)) { SAVE_FUNCTION_CALLER(); setFormatForOneNumber(&format); if (!strcmp(result[i], format.oneNumber)) { PRINT_ERROR(); return false; } } PRINT_OK(); return true; }
static bool isOK_isMassBetweenLimits(void) { double mult = 3.0; massParameters mass, limits[2]; limits[MAX].mass[0] = mult * (limits[MIN].mass[0] = 7.0); limits[MAX].mass[1] = mult * (limits[MIN].mass[1] = 3.0); limits[MAX].eta = mult * (limits[MIN].eta = 0.1); limits[MAX].totalMass = mult * (limits[MIN].totalMass = 5.0); limits[MAX].chirpMass = mult * (limits[MIN].chirpMass = 4.0); limits[MAX].mu = mult * (limits[MIN].mu = 0.4); limits[MAX].nu = mult * (limits[MIN].nu = 0.7); limits[MAX].m1_m2 = mult * (limits[MIN].m1_m2 = 1.0); for (ushort i = 1; i < mult; i++) { mass.mass[0] = limits[MAX].mass[0] / (double) i; mass.mass[1] = limits[MAX].mass[1] / (double) i; mass.eta = limits[MAX].eta / (double) i; mass.totalMass = limits[MAX].totalMass / (double) i; mass.chirpMass = limits[MAX].chirpMass / (double) i; mass.mu = limits[MAX].mu / (double) i; mass.nu = limits[MAX].nu / (double) i; mass.m1_m2 = limits[MAX].m1_m2 / (double) i; SAVE_FUNCTION_CALLER(); if (!isMassBetweenLimits(&mass, limits)) { PRINT_ERROR(); return false; } } double multMod = mult + 1.0; mass.mass[0] = limits[MAX].mass[0] / multMod; mass.mass[1] = limits[MAX].mass[1] / multMod; mass.eta = limits[MAX].eta / multMod; mass.totalMass = limits[MAX].totalMass / multMod; mass.chirpMass = limits[MAX].chirpMass / multMod; mass.mu = limits[MAX].mu / multMod; mass.nu = limits[MAX].nu / multMod; mass.m1_m2 = limits[MAX].m1_m2 / multMod; SAVE_FUNCTION_CALLER(); if (isMassBetweenLimits(&mass, limits)) { PRINT_ERROR(); return false; } multMod = mult - 1.0; mass.mass[0] = limits[MAX].mass[0] * multMod; mass.mass[1] = limits[MAX].mass[1] * multMod; mass.eta = limits[MAX].eta * multMod; mass.totalMass = limits[MAX].totalMass * multMod; mass.chirpMass = limits[MAX].chirpMass * multMod; mass.mu = limits[MAX].mu * multMod; mass.nu = limits[MAX].nu * multMod; mass.m1_m2 = limits[MAX].m1_m2 * multMod; SAVE_FUNCTION_CALLER(); if (isMassBetweenLimits(&mass, limits)) { PRINT_ERROR(); return false; } PRINT_OK(); return true; }
int main (int argc, char **argv) { bool b; uint32_t ui; int32_t i; float f; char *test01 = "\x00"; b = knx_parse_bool(test01, 7); assert(b == false); char *test02 = "\x01"; b = knx_parse_bool(test02, 7); assert(b == true); b = knx_parse_bool(test02, 6); assert(b == false); char *test03 = "\x05"; ui = knx_parse_uint(test03, 5, 3); assert(ui == 5); ui = knx_parse_uint(test03, 6, 2); assert(ui == 1); i = knx_parse_int(test03, 5, 3); assert(i == -1); i = knx_parse_int(test03, 6, 2); assert(i == 1); char *test03b = "\x12"; i = knx_parse_int(test03b, 0, 8); assert(i == 18); // KNX is Big endian char *test04 = "\x03\x35"; ui = knx_parse_uint(test04, 6, 10); assert(ui == 821); i = knx_parse_int(test04, 6, 10); assert(i == -309); char *test05 = "\x67\x7e\xf6\x42"; f = knx_parse_float(test05); assert(f == 123.24688f); // FFS : Add more tests PRINT_OK(); return 0; }
static bool isOK_convertMassesFromM1M2(void) { if (!isOK_m1m2ToRemainingMass()) { return false; } massParameters mass, result; mass.mass[0] = result.mass[0] = 90.0; mass.mass[1] = result.mass[1] = 10.0; result.totalMass = 100.0; result.mu = 9.0; result.eta = 0.09; result.chirpMass = calcChirpMass(result.totalMass, result.eta); m1m2ToRemainingMass(&result); SAVE_FUNCTION_CALLER(); convertMassesFromM1M2(&mass); if (memcmp(&mass, &result, sizeof(massParameters))) { PRINT_ERROR(); return false; } PRINT_OK(); return true; }
static bool isOK_setOutputFormat(void) { if (!isOK_setFormatForOneNumber()) { return false; } OutputFormat format; char separator = '%'; ushort code = 0; nameString name[6] = { "ab", "bd", "cf", "dh", "ej", "fl" }; ushort precision = 2 * SPECIAL_CHARACTER_LENGTH; bool leftJusfified = false; ushort width; for (ushort i = 0; i < 2; i++, neg(&leftJusfified)) { width = (ushort) (precision - 2 * SPECIAL_CHARACTER_LENGTH); for (ushort j = 0; j < 3; j++, code++) { ushort k = (ushort) (3 * i + j); SAVE_FUNCTION_CALLER(); setOutputFormat(&format, precision, width, separator, leftJusfified, name[k], code); if (format.precision != precision) { PRINT_ERROR(); return false; } if (format.width < width) { PRINT_ERROR(); return false; } if (format.width < precision) { PRINT_ERROR(); return false; } if (strcmp(name[k], format.name)) { PRINT_ERROR(); return false; } width = (ushort) (width + 2 * SPECIAL_CHARACTER_LENGTH); } } /// @todo a hibás bemenet nincs leellenőrizve!!! PRINT_OK(); return true; }
int main (int argc, char **argv) { int i, rc; char *str; ManufacturerInfos_t maninfos[1]; DptInfos_t dptinfo[1]; Dpt_t dpt; // Init actility stuff char tmp[512]; rootactPath = getenv("ROOTACT"); if ((!rootactPath || !*rootactPath)) { printf("ROOTACT unset, abort\n"); exit(1); } VarInit(); XoInit(0); if (!Operating) { sprintf(tmp, "%s/%s/xo/.", rootactPath, GetAdaptorName()); XoLoadNameSpaceDir(tmp); XoLoadNameSpaceDir("."); } else { sprintf(tmp, "%s/etc/xo/.", rootactPath); XoLoadNameSpaceDir(tmp); sprintf(tmp, "%s/etc/%s/.", rootactPath, GetAdaptorName()); XoLoadNameSpaceDir(tmp); } if (LoadM2MXoRef() < 0) exit(1); if (LoadDrvXoRef(GetAdaptorName()) < 0) exit(1); if(getenv(DRIVER_DATA_DIR) == NULL) { printf("Check your environnement varaibles (" DRIVER_DATA_DIR ").\n"); exit(1); } /* * Manufacturer */ rc = ManufacturerLoadDatabase(); assert(rc == 0); rc = ManufacturerGetInfos(3, maninfos); assert(rc != 0); rc = ManufacturerGetInfos(157, maninfos); assert(rc == 0); assert(maninfos->id == 157); assert(!strcmp(maninfos->name, "EGi Electroacustica General Iberica")); rc = ManufacturerGetInfos(250, maninfos); assert(rc == 0); assert(maninfos->id == 250); assert(!strcmp(maninfos->name, "KNX Association")); /* * DPT */ rc = DptLoadDatabase(); assert(rc == 0); DPT_SET(dpt, 10000, 23); rc = DptGetInfos(dpt, dptinfo); assert(rc != 0); DPT_SET(dpt, 9, 23); rc = DptGetInfos(dpt, dptinfo); assert(rc == 0); assert(dptinfo->dpt.primary == 9); assert(dptinfo->dpt.sub == 23); assert(dptinfo->bits == 16); assert(!strcmp(dptinfo->name, "DPT_KelvinPerPercent")); /* * Range (Enum) * Bin to String */ rc = RangeLoadDatabase(); assert(rc == 0); DPT_SET(dpt, 2, 3); rc = RangeGetRenderedValue(dpt, 0, &str); assert(rc == 0); assert(!strcmp(str, "noControl")); DPT_SET(dpt, 20, 13); rc = RangeGetRenderedValue(dpt, 14, &str); assert(rc == 0); assert(!strcmp(str, "2,5min")); /* * Range (Enum) * String to Bin */ DPT_SET(dpt, 2, 3); rc = RangeGetBinValue(dpt, &i, "noControl"); assert(rc == 0); assert(i == 0); DPT_SET(dpt, 20, 13); rc = RangeGetBinValue(dpt, &i, "2,5min"); assert(rc == 0); assert(i == 14); PRINT_OK(); return 0; }