Fix clang warnings, add clang to travis
| | |
| | | apt: |
| | | packages: |
| | | - libcunit1-dev |
| | | - clang |
| | | |
| | | sudo: false |
| | | |
| | | script: |
| | | - make |
| | | - CFLAGS="-g -O0 -fsanitize=address" LDFLAGS="-g -fsanitize=address" make clean test |
| | | - CC=clang CFLAGS="-g -O0 -fsanitize=address" LDFLAGS="-g -fsanitize=address" make clean test |
| | |
| | | } else { |
| | | return strToULong(parameter->ptr, (uint32_t *)value, 10) > 0 ? TRUE : FALSE; |
| | | } |
| | | } |
| | | default: |
| | | return FALSE; |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | #include "stdio.h" |
| | | scpi_bool_t SCPI_ParamToDouble(scpi_t * context, scpi_parameter_t * parameter, double * value) { |
| | | scpi_bool_t result = FALSE; |
| | | scpi_bool_t result; |
| | | uint32_t valint; |
| | | |
| | | if (!value) { |
| | |
| | | case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX: |
| | | result = strToDouble(parameter->ptr, value) > 0 ? TRUE : FALSE; |
| | | break; |
| | | default: |
| | | result = FALSE; |
| | | } |
| | | return result; |
| | | } |
| | |
| | | value->special = FALSE; |
| | | result = TRUE; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | switch(param.type) { |
| | |
| | | case SCPI_TOKEN_OCTNUM: |
| | | value->base = 8; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | switch(param.type) { |
| | |
| | | memcpy(output_buffer + output_buffer_pos, data, len); |
| | | output_buffer_pos += len; |
| | | output_buffer[output_buffer_pos] = '\0'; |
| | | return len; |
| | | } |
| | | |
| | | scpi_t scpi_context; |
| | |
| | | } |
| | | |
| | | static scpi_result_t SCPI_Flush(scpi_t * context) { |
| | | (void) context; |
| | | |
| | | return SCPI_RES_OK; |
| | | } |
| | | |
| | |
| | | |
| | | scpi_reg_val_t srq_val = 0; |
| | | static scpi_result_t SCPI_Control(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val) { |
| | | (void) context; |
| | | |
| | | if (SCPI_CTRL_SRQ == ctrl) { |
| | | srq_val = val; |
| | | } else { |
| | |
| | | scpi_bool_t RST_executed = FALSE; |
| | | |
| | | static scpi_result_t SCPI_Reset(scpi_t * context) { |
| | | (void) context; |
| | | |
| | | RST_executed = TRUE; |
| | | return SCPI_RES_OK; |
| | | } |
| | |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | } while(0) \ |
| | | |
| | | #define TEST_MATCH_COMMAND2(p, s, r, ...) \ |
| | | #define NOPAREN(...) __VA_ARGS__ |
| | | |
| | | #define TEST_MATCH_COMMAND2(p, s, r, v) \ |
| | | do { \ |
| | | int32_t evalues[] = {__VA_ARGS__}; \ |
| | | int32_t evalues[] = {NOPAREN v}; \ |
| | | unsigned int cnt = (sizeof(evalues)/4); \ |
| | | result = matchCommand(p, s, strlen(s), values, 20); \ |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | if (cnt > 0) CU_ASSERT_EQUAL(evalues[0], values[0]); \ |
| | | if (cnt > 1) CU_ASSERT_EQUAL(evalues[1], values[1]); \ |
| | | if (cnt > 2) CU_ASSERT_EQUAL(evalues[2], values[2]); \ |
| | | if (cnt > 3) CU_ASSERT_EQUAL(evalues[3], values[3]); \ |
| | | if (cnt > 4) CU_ASSERT_EQUAL(evalues[4], values[4]); \ |
| | | if (cnt > 5) CU_ASSERT_EQUAL(evalues[5], values[5]); \ |
| | | if (cnt > 6) CU_ASSERT_EQUAL(evalues[6], values[6]); \ |
| | | {unsigned int i; for (i = 0; i<cnt; i++) { \ |
| | | CU_ASSERT_EQUAL(evalues[i], values[i]); \ |
| | | }} \ |
| | | } while(0) \ |
| | | |
| | | TEST_MATCH_COMMAND("A", "a", TRUE); |
| | |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:fm2", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE); // test numeric parameter |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp3:mod10:fm", TRUE, 3, 10, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output3:mod10:fm", TRUE, 3, 10, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp30:modulation:fm5", TRUE, 30, 1, 5); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE, 1, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm", TRUE, 3, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:mod10:fm", TRUE, 3, 10, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm2", TRUE, 3, 1, 2); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE, 1, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp3:mod10:fm", TRUE, (3, 10, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output3:mod10:fm", TRUE, (3, 10, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp30:modulation:fm5", TRUE, (30, 1, 5)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE, (1, 1, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm", TRUE, (3, 1, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:mod10:fm", TRUE, (3, 10, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm2", TRUE, (3, 1, 2)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE, (1, 1, 1)); // test numeric parameter |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp3:mod:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output3:mod:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp30:modulation:fm5", TRUE, 30, 5); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output:mod:fm", TRUE, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:mod:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm2", TRUE, 3, 2); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "output:fm", TRUE, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp3:mod:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output3:mod:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp30:modulation:fm5", TRUE, (30, 5)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output:mod:fm", TRUE, (1, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:mod:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm2", TRUE, (3, 2)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "output:fm", TRUE, (1, 1)); // test numeric parameter |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp3:mod10:fm", TRUE, 3, 10); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output3:mod10:fm", TRUE, 3, 10); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp30:modulation:fm", TRUE, 30, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output:mod:fm", TRUE, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:mod10:fm", TRUE, 3, 10); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, 3, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "output:fm", TRUE, 1, 1); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp30:modulation:fm", TRUE, (30, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output:mod:fm", TRUE, (1, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, 1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "output:fm", TRUE, (1, 1)); // test numeric parameter |
| | | } |
| | | |
| | | static void test_composeCompoundCommand(void) { |