+// This test will iterate over all cards detected in the system, exercising
would it make sense to test only specific cards? People doing automated tests might have a USB device for capture of analog loopbacks, or injection of specific streams for capture, and usually care about
typo: Usually don't care about testing such devices.
'testing the tester' is a separate endeavor.
testing such devices - which do need manual setups and wiring btw.
- switch (snd_ctl_elem_info_get_type(ctl->info)) {
- case SND_CTL_ELEM_TYPE_NONE:
ksft_print_msg("%s Invalid control type NONE\n", ctl->name);
err = -1;
break;
- case SND_CTL_ELEM_TYPE_BOOLEAN:
int_val = snd_ctl_elem_value_get_boolean(ctl->def_val, 0);
switch (int_val) {
case 0:
case 1:
break;
default:
ksft_print_msg("%s Invalid boolean value %ld\n",
ctl->name, int_val);
err = -1;
break;
}
break;
- case SND_CTL_ELEM_TYPE_INTEGER:
int_val = snd_ctl_elem_value_get_integer(ctl->def_val, 0);
if (int_val < snd_ctl_elem_info_get_min(ctl->info)) {
ksft_print_msg("%s value %ld less than minimum %ld\n",
ctl->name, int_val,
snd_ctl_elem_info_get_min(ctl->info));
err = -1;
}
if (int_val > snd_ctl_elem_info_get_max(ctl->info)) {
ksft_print_msg("%s value %ld more than maximum %ld\n",
ctl->name, int_val,
snd_ctl_elem_info_get_max(ctl->info));
err = -1;
}
/* Only check step size if there is one and we're in bounds */
if (err >= 0 && snd_ctl_elem_info_get_step(ctl->info) &&
(int_val - snd_ctl_elem_info_get_min(ctl->info) %
snd_ctl_elem_info_get_step(ctl->info))) {
ksft_print_msg("%s value %ld invalid for step %ld minimum %ld\n",
ctl->name, int_val,
snd_ctl_elem_info_get_step(ctl->info),
snd_ctl_elem_info_get_min(ctl->info));
err = -1;
}
break;
- case SND_CTL_ELEM_TYPE_INTEGER64:
int64_val = snd_ctl_elem_value_get_integer64(ctl->def_val, 0);
if (int64_val < snd_ctl_elem_info_get_min64(ctl->info)) {
ksft_print_msg("%s value %lld less than minimum %lld\n",
ctl->name, int64_val,
snd_ctl_elem_info_get_min64(ctl->info));
err = -1;
}
if (int64_val > snd_ctl_elem_info_get_max64(ctl->info)) {
ksft_print_msg("%s value %lld more than maximum %lld\n",
ctl->name, int64_val,
snd_ctl_elem_info_get_max(ctl->info));
err = -1;
}
/* Only check step size if there is one and we're in bounds */
if (err >= 0 && snd_ctl_elem_info_get_step64(ctl->info) &&
(int64_val - snd_ctl_elem_info_get_min64(ctl->info)) %
snd_ctl_elem_info_get_step64(ctl->info)) {
ksft_print_msg("%s value %lld invalid for step %lld minimum %lld\n",
ctl->name, int64_val,
snd_ctl_elem_info_get_step64(ctl->info),
snd_ctl_elem_info_get_min64(ctl->info));
err = -1;
}
break;
- default:
/* No tests for other types */
these types include ENUMERATED, BYTES and IEC958, but see below for ENUMERATED...
ksft_test_result_skip("get_value.%d.%d\n",
ctl->card->card, ctl->elem);
return;
- }
+out:
- ksft_test_result(err >= 0, "get_value.%d.%d\n",
ctl->card->card, ctl->elem);
+}
+bool show_mismatch(struct ctl_data *ctl, int index,
snd_ctl_elem_value_t *read_val,
snd_ctl_elem_value_t *expected_val)
+{
- long long expected_int, read_int;
- /*
* We factor out the code to compare values representable as
* integers, ensure that check doesn't log otherwise.
*/
- expected_int = 0;
- read_int = 0;
- switch (snd_ctl_elem_info_get_type(ctl->info)) {
- case SND_CTL_ELEM_TYPE_BOOLEAN:
expected_int = snd_ctl_elem_value_get_boolean(expected_val,
index);
read_int = snd_ctl_elem_value_get_boolean(read_val, index);
break;
- case SND_CTL_ELEM_TYPE_INTEGER:
expected_int = snd_ctl_elem_value_get_integer(expected_val,
index);
read_int = snd_ctl_elem_value_get_integer(read_val, index);
break;
- case SND_CTL_ELEM_TYPE_INTEGER64:
expected_int = snd_ctl_elem_value_get_integer64(expected_val,
index);
read_int = snd_ctl_elem_value_get_integer64(read_val,
index);
break;
- case SND_CTL_ELEM_TYPE_ENUMERATED:
... here you are handling ENUMERATED types?
expected_int = snd_ctl_elem_value_get_enumerated(expected_val,
index);
read_int = snd_ctl_elem_value_get_enumerated(read_val,
index);
break;
- default:
break;
- }
- if (expected_int != read_int) {
ksft_print_msg("%s.%d expected %lld but read %lld\n",
ctl->name, index, expected_int, read_int);
return true;
- } else {
return false;
- }
+}