Browse Source

Add first good tests, can be automated if needed

tags/v2.1-rc1
falkTX 1 year ago
parent
commit
459a85409b
5 changed files with 319 additions and 0 deletions
  1. +1
    -0
      .gitignore
  2. +4
    -0
      Makefile
  3. +129
    -0
      source/tests/Makefile
  4. +184
    -0
      source/tests/ansi-pedantic-test.c
  5. +1
    -0
      source/tests/ansi-pedantic-test.cpp

+ 1
- 0
.gitignore View File

@@ -29,6 +29,7 @@
*.vst3

# Binary dir
bin/ansi-pedantic-test_*
bin/carla
bin/carla.lv2/carla-bridge-*
bin/carla-database


+ 4
- 0
Makefile View File

@@ -371,6 +371,7 @@ clean:
$(MAKE) clean -C source/modules
$(MAKE) clean -C source/native-plugins
$(MAKE) clean -C source/plugin
$(MAKE) clean -C source/tests
$(MAKE) clean -C source/theme
rm -f *~ source/*~

@@ -387,6 +388,9 @@ debug:
doxygen:
$(MAKE) doxygen -C source/backend

tests:
$(MAKE) -C source/tests

stoat:
stoat --recursive ./build/ --suppression ./data/stoat-supression.txt --whitelist ./data/stoat-whitelist.txt --graph-view ./data/stoat-callgraph.png



+ 129
- 0
source/tests/Makefile View File

@@ -0,0 +1,129 @@
#!/usr/bin/make -f
# Makefile for tests #
# ------------------ #
# Created by falkTX
#

CWD=..
include $(CWD)/Makefile.mk

# ---------------------------------------------------------------------------------------------------------------------

BINDIR := $(CWD)/../bin

ifeq ($(DEBUG),true)
OBJDIR := $(CWD)/../build/tests/Debug
MODULEDIR := $(CWD)/../build/modules/Debug
else
OBJDIR := $(CWD)/../build/tests/Release
MODULEDIR := $(CWD)/../build/modules/Release
endif

# ---------------------------------------------------------------------------------------------------------------------

BUILD_C_FLAGS += -I..
BUILD_CXX_FLAGS += -I.. -I$(CWD)/modules

# ---------------------------------------------------------------------------------------------------------------------

PEDANTIC_FLAGS = -pedantic -pedantic-errors
PEDANTIC_FLAGS += -Wall -Wextra -Werror -pipe -DBUILDING_CARLA -DREAL_BUILD
PEDANTIC_FLAGS += -I. -I../backend -I../includes -I../modules -I../utils

PEDANTIC_FLAGS += -Wabi=98 -Wcast-qual -Wclobbered -Wconversion -Wdisabled-optimization
PEDANTIC_FLAGS += -Wcast-align -Wcast-qual -Wclobbered -Wconversion -Wdisabled-optimization
PEDANTIC_FLAGS += -Wdouble-promotion -Wfloat-equal -Wlogical-op -Wpointer-arith -Wsign-conversion
PEDANTIC_FLAGS += -Wformat=2 -Woverlength-strings
PEDANTIC_FLAGS += -Wformat-truncation=2 -Wformat-overflow=2
PEDANTIC_FLAGS += -Wstringop-overflow=4 -Wstringop-truncation
PEDANTIC_FLAGS += -Wmissing-declarations -Wredundant-decls
PEDANTIC_FLAGS += -Wshadow -Wundef -Wuninitialized -Wunused
PEDANTIC_FLAGS += -Wstrict-aliasing -fstrict-aliasing
PEDANTIC_FLAGS += -Wstrict-overflow -fstrict-overflow
PEDANTIC_FLAGS += -Wduplicated-branches -Wduplicated-cond -Wnull-dereference

PEDANTIC_CFLAGS = $(PEDANTIC_FLAGS)
PEDANTIC_CFLAGS += -Wc++-compat
PEDANTIC_CFLAGS += -Winit-self -Wjump-misses-init -Wnested-externs -Wwrite-strings
PEDANTIC_CFLAGS += -Wmissing-prototypes -Wstrict-prototypes

PEDANTIC_CXXFLAGS = $(PEDANTIC_FLAGS)
PEDANTIC_CXXFLAGS += -Wc++0x-compat -Wc++11-compat
PEDANTIC_CXXFLAGS += -Wnon-virtual-dtor -Woverloaded-virtual
PEDANTIC_CXXFLAGS += -Wold-style-cast -Wuseless-cast
PEDANTIC_CXXFLAGS += -Wzero-as-null-pointer-constant
PEDANTIC_CXXFLAGS += -Weffc++

PEDANTIC_LDFLAGS = -Wl,-rpath,$(BINDIR) -L$(BINDIR)

# ---------------------------------------------------------------------------------------------------------------------
# Set targets

TARGETS = \
ansi-pedantic-test_c_ansi_run \
ansi-pedantic-test_c89_run \
ansi-pedantic-test_c99_run \
ansi-pedantic-test_c11_run \
ansi-pedantic-test_cxx_ansi_run \
ansi-pedantic-test_cxx98_run \
ansi-pedantic-test_cxx03_run \
ansi-pedantic-test_cxx11_run

# ---------------------------------------------------------------------------------------------------------------------

all: $(TARGETS)

# ---------------------------------------------------------------------------------------------------------------------

%_run: $(BINDIR)/%
$(BINDIR)/$*

# ---------------------------------------------------------------------------------------------------------------------

$(BINDIR)/ansi-pedantic-test_c_ansi: ansi-pedantic-test.c ../backend/Carla*.h ../includes/*.h
$(CC) $< $(PEDANTIC_CFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -ansi -o $@

$(BINDIR)/ansi-pedantic-test_c89: ansi-pedantic-test.c ../backend/Carla*.h ../includes/*.h
$(CC) $< $(PEDANTIC_CFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c89 -o $@

$(BINDIR)/ansi-pedantic-test_c99: ansi-pedantic-test.c ../backend/Carla*.h ../includes/*.h
$(CC) $< $(PEDANTIC_CFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c99 -o $@

$(BINDIR)/ansi-pedantic-test_c11: ansi-pedantic-test.c ../backend/Carla*.h ../includes/*.h
$(CC) $< $(PEDANTIC_CFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c11 -o $@

# ---------------------------------------------------------------------------------------------------------------------

$(BINDIR)/ansi-pedantic-test_cxx_ansi: ansi-pedantic-test.cpp ../backend/Carla*.h ../backend/Carla*.hpp ../includes/*.h
$(CXX) $< $(PEDANTIC_CXXFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -ansi -Wno-effc++ -o $@

$(BINDIR)/ansi-pedantic-test_cxx98: ansi-pedantic-test.cpp ../backend/Carla*.h ../backend/Carla*.hpp ../includes/*.h
$(CXX) $< $(PEDANTIC_CXXFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c++98 -Wno-effc++ -o $@

$(BINDIR)/ansi-pedantic-test_cxx03: ansi-pedantic-test.cpp ../backend/Carla*.h ../backend/Carla*.hpp ../includes/*.h
$(CXX) $< $(PEDANTIC_CXXFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c++03 -Wno-effc++ -o $@

$(BINDIR)/ansi-pedantic-test_cxx11: ansi-pedantic-test.cpp ../backend/Carla*.h ../backend/Carla*.hpp ../includes/*.h
$(CXX) $< $(PEDANTIC_CXXFLAGS) $(PEDANTIC_LDFLAGS) -lcarla_standalone2 -lcarla_utils -std=c++11 -o $@

# ---------------------------------------------------------------------------------------------------------------------

clean:
rm -f $(BINDIR)/ansi-pedantic-test_*

debug:
$(MAKE) DEBUG=true

# ---------------------------------------------------------------------------------------------------------------------

$(OBJDIR)/%.c.o: %.c
-@mkdir -p $(OBJDIR)
@echo "Compiling $<"
@$(CC) $< $(BUILD_C_FLAGS) -c -o $@

$(OBJDIR)/%.cpp.o: %.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $<"
@$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

# ---------------------------------------------------------------------------------------------------------------------

+ 184
- 0
source/tests/ansi-pedantic-test.c View File

@@ -0,0 +1,184 @@
/*
* ANSI pedantic test for the Carla Backend & Host API
* Copyright (C) 2013-2019 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#include "CarlaBackend.h"
#include "CarlaHost.h"
#include "CarlaUtils.h"

#include "CarlaMIDI.h"
#include "CarlaNative.h"
#include "CarlaNativePlugin.h"

#ifdef __cplusplus
# include "CarlaEngine.hpp"
# include "CarlaPlugin.hpp"
# include <cassert>
# include <cstdio>
# ifdef CARLA_PROPER_CPP11_SUPPORT
# undef NULL
# define NULL nullptr
# endif
#else
# include <assert.h>
# include <stdio.h>
#endif

#define BOOLEAN_AS_STRING(cond) ((cond) ? "true" : "false")

int main(int argc, char* argv[])
{
#ifdef __cplusplus
CARLA_BACKEND_USE_NAMESPACE
#endif

ParameterData a;
ParameterRanges b;
MidiProgramData c;
CustomData d;
EngineDriverDeviceInfo e;

CarlaPluginInfo f;
/*CarlaCachedPluginInfo g;*/
CarlaPortCountInfo h;
CarlaParameterInfo i;
CarlaScalePointInfo j;
CarlaTransportInfo k;

const char* licenseText;
const char* const* fileExtensions;

uint l, count;

licenseText = carla_get_complete_license_text();
printf("LICENSE:\n%s\n", licenseText);

fileExtensions = carla_get_supported_file_extensions();
printf("FILE EXTENSIONS:\n ");
for (l=0; fileExtensions[l] != NULL; ++l)
printf(" %s", fileExtensions[l]);
printf("\n");

count = carla_get_engine_driver_count();
printf("DRIVER COUNT: %i\n", count);

for (l=0; l < count; ++l)
{
const char* driverName;
const char* const* driverDeviceNames;
const EngineDriverDeviceInfo* driverDeviceInfo;
uint m, m2, count2;

driverName = carla_get_engine_driver_name(l);
driverDeviceNames = carla_get_engine_driver_device_names(l);
printf("DRIVER %i/%i: \"%s\" : DEVICES:\n", l+1, count, driverName);

count2 = 0;
while (driverDeviceNames[count2] != NULL)
++count2;

for (m = 0; m < count2; ++m)
{
driverDeviceInfo = carla_get_engine_driver_device_info(l, driverDeviceNames[m]);
printf("DRIVER DEVICE %i/%i: \"%s\"\n", m+1, count2, driverDeviceNames[m]);
printf(" Has control panel: %s\n", BOOLEAN_AS_STRING(driverDeviceInfo->hints & ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL));
printf(" Can triple buffer: %s\n", BOOLEAN_AS_STRING(driverDeviceInfo->hints & ENGINE_DRIVER_DEVICE_CAN_TRIPLE_BUFFER));
printf(" Variable buffer size: %s\n", BOOLEAN_AS_STRING(driverDeviceInfo->hints & ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE));
printf(" Variable sample rate: %s\n", BOOLEAN_AS_STRING(driverDeviceInfo->hints & ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE));

if (driverDeviceInfo->bufferSizes != NULL && driverDeviceInfo->bufferSizes[0] != 0)
{
printf(" Buffer sizes:");

m2 = 0;
while (driverDeviceInfo->bufferSizes[m2] != 0)
printf(" %i", driverDeviceInfo->bufferSizes[m2++]);

printf("\n");
}
else
{
printf(" Buffer sizes: (null)\n");
}

if (driverDeviceInfo->sampleRates != NULL && driverDeviceInfo->sampleRates[0] > 0.1)
{
printf(" Sample rates:");

m2 = 0;
while (driverDeviceInfo->sampleRates[m2] > 0.1)
printf(" %.1f", driverDeviceInfo->sampleRates[m2++]);

printf("\n");
}
else
{
printf(" Sample rates: (null)\n");
}
}
}

carla_set_engine_option(ENGINE_OPTION_PROCESS_MODE, ENGINE_PROCESS_MODE_PATCHBAY, NULL);
carla_set_engine_option(ENGINE_OPTION_TRANSPORT_MODE, ENGINE_TRANSPORT_MODE_INTERNAL, NULL);

if (carla_engine_init("Dummy", "ansi-test"))
{
#ifdef __cplusplus
CarlaEngine* const engine(carla_get_engine());
assert(engine != nullptr);
engine->getLastError();
#endif
if (carla_add_plugin(BINARY_NATIVE, PLUGIN_INTERNAL, NULL, NULL, "audiofile", 0, NULL, 0x0))
{
#ifdef __cplusplus
CarlaPlugin* const plugin(engine->getPlugin(0));
assert(plugin != nullptr);
plugin->getId();
#endif
/* carla_set_custom_data(0, CUSTOM_DATA_TYPE_STRING, "file", "/home/falktx/Music/test.wav"); */
carla_transport_play();
}
else
{
printf("%s\n", carla_get_last_error());
}
#ifdef __cplusplus
engine->setAboutToClose();
#endif
carla_engine_close();
}

#ifdef __cplusplus
EngineControlEvent e1;
EngineMidiEvent e2;
EngineEvent e3;
e3.fillFromMidiData(0, nullptr, 0);
EngineOptions e4;
EngineTimeInfoBBT e5;
EngineTimeInfo e6;
#endif

/* unused C */
(void)argc;
(void)argv;
(void)a; (void)b; (void)c; (void)d; (void)e;
(void)f; /*(void)g;*/ (void)h; (void)i; (void)j; (void)k;
#ifdef __cplusplus
(void)e1; (void)e2; (void)e4; (void)e5; (void)e6;
#endif

return 0;
}

+ 1
- 0
source/tests/ansi-pedantic-test.cpp View File

@@ -0,0 +1 @@
ansi-pedantic-test.c

Loading…
Cancel
Save