]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
test: test sandbox sound driver more rigorously
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 4 Dec 2022 16:11:41 +0000 (17:11 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 5 Dec 2022 16:43:21 +0000 (17:43 +0100)
Consider unexpected values for frequency:

* negative frequency
* zero frequency
* frequency exceeding sampling frequency

As in these cases the sum of the samples is zero also check the count of
the samples.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/sandbox/include/asm/test.h
drivers/sound/sandbox.c
test/dm/sound.c

index 0406085917f4d41b5eb512133013d8f45c4b84f5..568738c16d51f7ed0bcca3fbb6266ab56e0ee8f3 100644 (file)
@@ -188,6 +188,16 @@ int sandbox_get_setup_called(struct udevice *dev);
  */
 int sandbox_get_sound_active(struct udevice *dev);
 
+/**
+ * sandbox_get_sound_count() - Read back the count of the sound data so far
+ *
+ * This data is provided to the sandbox driver by the sound play() method.
+ *
+ * @dev: Device to check
+ * Return: count of audio data
+ */
+int sandbox_get_sound_count(struct udevice *dev);
+
 /**
  * sandbox_get_sound_sum() - Read back the sum of the sound data so far
  *
index 4a2c87a84c6857ed8aed7da0f83e6f29bcdc518d..c6cbd81fdbceb996da1cba50d058c1dc9978c07c 100644 (file)
@@ -29,6 +29,7 @@ struct sandbox_i2s_priv {
 struct sandbox_sound_priv {
        int setup_called;       /* Incremented when setup() method is called */
        bool active;            /* TX data is being sent */
+       int count;              /* Use to count the provided audio data */
        int sum;                /* Use to sum the provided audio data */
        bool allow_beep;        /* true to allow the start_beep() interface */
        int frequency_hz;       /* Beep frequency if active, else 0 */
@@ -68,6 +69,13 @@ int sandbox_get_sound_active(struct udevice *dev)
        return priv->active;
 }
 
+int sandbox_get_sound_count(struct udevice *dev)
+{
+       struct sandbox_sound_priv *priv = dev_get_priv(dev);
+
+       return priv->count;
+}
+
 int sandbox_get_sound_sum(struct udevice *dev)
 {
        struct sandbox_sound_priv *priv = dev_get_priv(dev);
@@ -168,6 +176,7 @@ static int sandbox_sound_play(struct udevice *dev, void *data, uint data_size)
 
        for (i = 0; i < data_size; i++)
                priv->sum += ((uint8_t *)data)[i];
+       priv->count += data_size;
 
        return i2s_tx_data(uc_priv->i2s, data, data_size);
 }
index b73f6ab1113eabd3e4bb7a21e500cd6a57d6117a..15d545ab5a34294dc858860a62617e88d7671772 100644 (file)
@@ -26,8 +26,19 @@ static int dm_test_sound(struct unit_test_state *uts)
        ut_asserteq(0, sandbox_get_setup_called(dev));
 
        ut_assertok(sound_beep(dev, 1, 100));
+       ut_asserteq(48, sandbox_get_sound_count(dev));
        ut_asserteq(4560, sandbox_get_sound_sum(dev));
        ut_assertok(sound_beep(dev, 1, 100));
+       ut_asserteq(96, sandbox_get_sound_count(dev));
+       ut_asserteq(9120, sandbox_get_sound_sum(dev));
+       ut_assertok(sound_beep(dev, 1, -100));
+       ut_asserteq(144, sandbox_get_sound_count(dev));
+       ut_asserteq(9120, sandbox_get_sound_sum(dev));
+       ut_assertok(sound_beep(dev, 1, 0));
+       ut_asserteq(192, sandbox_get_sound_count(dev));
+       ut_asserteq(9120, sandbox_get_sound_sum(dev));
+       ut_assertok(sound_beep(dev, 1, INT_MAX));
+       ut_asserteq(240, sandbox_get_sound_count(dev));
        ut_asserteq(9120, sandbox_get_sound_sum(dev));
        ut_asserteq(false, sandbox_get_sound_active(dev));