{408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
EndProjectSection\r
EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-queue", "hdr-test-queue.vcxproj", "{33664E63-8D24-4FF4-A744-9782EB711509}"\r
- ProjectSection(ProjectDependencies) = postProject\r
- {61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
- {408FE9BC-44F0-4E6A-89FA-D6F952584239} = {408FE9BC-44F0-4E6A-89FA-D6F952584239}\r
- EndProjectSection\r
-EndProject\r
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hdr-test-set", "hdr-test-set.vcxproj", "{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}"\r
ProjectSection(ProjectDependencies) = postProject\r
{61179F2F-07E1-490D-B64D-D85A90B6EF81} = {61179F2F-07E1-490D-B64D-D85A90B6EF81}\r
{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|Win32.Build.0 = Release|Win32\r
{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.ActiveCfg = Release|x64\r
{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1}.Release|x64.Build.0 = Release|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.ActiveCfg = Debug|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|Win32.Build.0 = Debug|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.ActiveCfg = Debug|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Debug|x64.Build.0 = Debug|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.ActiveCfg = DebugVLD|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|Win32.Build.0 = DebugVLD|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.ActiveCfg = DebugVLD|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.DebugVLD|x64.Build.0 = DebugVLD|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.ActiveCfg = Release|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Release|Win32.Build.0 = Release|Win32\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.ActiveCfg = Release|x64\r
- {33664E63-8D24-4FF4-A744-9782EB711509}.Release|x64.Build.0 = Release|x64\r
{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.ActiveCfg = Debug|Win32\r
{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|Win32.Build.0 = Debug|Win32\r
{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7}.Debug|x64.ActiveCfg = Debug|x64\r
{CA25BDBF-B354-4597-B6D2-220ABBB0D2F4} = {6BB7A27F-FC59-4267-B6FA-D034176D1459}\r
{AF7B2253-2E6D-4992-94D9-4B3699C54929} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
{BA23811C-D4CB-4836-B2F3-6791BD6FFCD1} = {A64449B7-90FB-4E2B-A686-9EFC0E298644}\r
- {33664E63-8D24-4FF4-A744-9782EB711509} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
{E5E9DB4A-7816-45D4-A116-6BBBA0EE8EE7} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
{A38E5597-6916-4480-A343-C9846EF544E4} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
{6F834EAD-7B94-4979-A0F1-A662E3D30145} = {B8C24D26-A3BF-4DA6-B64C-142CBA4BFE75}\r
<ClCompile Include="..\..\..\test\unit\queue\intrusive_optqueue_hp.cpp" />\r
<ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_dhp.cpp" />\r
<ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_hp.cpp" />\r
+ <ClCompile Include="..\..\..\test\unit\queue\intrusive_tsigas_queue.cpp" />\r
+ <ClCompile Include="..\..\..\test\unit\queue\intrusive_vyukov_queue.cpp" />\r
<ClCompile Include="..\..\..\test\unit\queue\moirqueue_dhp.cpp" />\r
<ClCompile Include="..\..\..\test\unit\queue\moirqueue_hp.cpp" />\r
<ClCompile Include="..\..\..\test\unit\queue\msqueue_dhp.cpp" />\r
<ItemGroup>\r
<ClInclude Include="..\..\..\test\unit\queue\test_bounded_queue.h" />\r
<ClInclude Include="..\..\..\test\unit\queue\test_generic_queue.h" />\r
+ <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_bounded_queue.h" />\r
<ClInclude Include="..\..\..\test\unit\queue\test_intrusive_msqueue.h" />\r
<ClInclude Include="..\..\..\test\unit\queue\test_intrusive_segmented_queue.h" />\r
<ClInclude Include="..\..\..\test\unit\queue\test_segmented_queue.h" />\r
<ClCompile Include="..\..\..\test\unit\queue\intrusive_segmented_queue_dhp.cpp">\r
<Filter>Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\..\..\test\unit\queue\intrusive_vyukov_queue.cpp">\r
+ <Filter>Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\..\..\test\unit\queue\intrusive_tsigas_queue.cpp">\r
+ <Filter>Source Files</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="..\..\..\test\unit\queue\test_generic_queue.h">\r
<ClInclude Include="..\..\..\test\unit\queue\test_intrusive_segmented_queue.h">\r
<Filter>Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\..\test\unit\queue\test_intrusive_bounded_queue.h">\r
+ <Filter>Header Files</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
- <ItemGroup Label="ProjectConfigurations">\r
- <ProjectConfiguration Include="DebugVLD|Win32">\r
- <Configuration>DebugVLD</Configuration>\r
- <Platform>Win32</Platform>\r
- </ProjectConfiguration>\r
- <ProjectConfiguration Include="DebugVLD|x64">\r
- <Configuration>DebugVLD</Configuration>\r
- <Platform>x64</Platform>\r
- </ProjectConfiguration>\r
- <ProjectConfiguration Include="Debug|Win32">\r
- <Configuration>Debug</Configuration>\r
- <Platform>Win32</Platform>\r
- </ProjectConfiguration>\r
- <ProjectConfiguration Include="Debug|x64">\r
- <Configuration>Debug</Configuration>\r
- <Platform>x64</Platform>\r
- </ProjectConfiguration>\r
- <ProjectConfiguration Include="Release|Win32">\r
- <Configuration>Release</Configuration>\r
- <Platform>Win32</Platform>\r
- </ProjectConfiguration>\r
- <ProjectConfiguration Include="Release|x64">\r
- <Configuration>Release</Configuration>\r
- <Platform>x64</Platform>\r
- </ProjectConfiguration>\r
- </ItemGroup>\r
- <PropertyGroup Label="Globals">\r
- <ProjectGuid>{33664E63-8D24-4FF4-A744-9782EB711509}</ProjectGuid>\r
- <RootNamespace>hdrtestqueue</RootNamespace>\r
- <Keyword>Win32Proj</Keyword>\r
- <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>\r
- </PropertyGroup>\r
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
- <ConfigurationType>Application</ConfigurationType>\r
- <CharacterSet>MultiByte</CharacterSet>\r
- <PlatformToolset>v140</PlatformToolset>\r
- </PropertyGroup>\r
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
- <ImportGroup Label="ExtensionSettings">\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
- </ImportGroup>\r
- <PropertyGroup Label="UserMacros" />\r
- <PropertyGroup>\r
- <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)-release\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">false</LinkIncremental>\r
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\bin\vc.$(PlatformToolset)\$(Platform)\</OutDir>\r
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(SolutionDir)..\..\..\obj\vc.$(PlatformToolset)\$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>\r
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">false</LinkIncremental>\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'" />\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'" />\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>\r
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />\r
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_d</TargetName>\r
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_d</TargetName>\r
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">$(ProjectName)_d</TargetName>\r
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">$(ProjectName)_d</TargetName>\r
- </PropertyGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Disabled</Optimization>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <MinimalRebuild>true</MinimalRebuild>\r
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX86</TargetMachine>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
- <Midl>\r
- <TargetEnvironment>X64</TargetEnvironment>\r
- </Midl>\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Disabled</Optimization>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <MinimalRebuild>true</MinimalRebuild>\r
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX64</TargetMachine>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Full</Optimization>\r
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
- <IntrinsicFunctions>true</IntrinsicFunctions>\r
- <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
- <OmitFramePointers>false</OmitFramePointers>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <StringPooling>true</StringPooling>\r
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <EnablePREfast>false</EnablePREfast>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <OptimizeReferences>true</OptimizeReferences>\r
- <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX86</TargetMachine>\r
- <Profile>true</Profile>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
- <Midl>\r
- <TargetEnvironment>X64</TargetEnvironment>\r
- </Midl>\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Full</Optimization>\r
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
- <IntrinsicFunctions>true</IntrinsicFunctions>\r
- <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
- <OmitFramePointers>false</OmitFramePointers>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_WIN32_WINNT=0x0501;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <StringPooling>true</StringPooling>\r
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <EnablePREfast>false</EnablePREfast>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <OptimizeReferences>true</OptimizeReferences>\r
- <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
- <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX64</TargetMachine>\r
- <Profile>true</Profile>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|Win32'">\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Disabled</Optimization>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <MinimalRebuild>true</MinimalRebuild>\r
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage32/lib;$(BOOST_PATH)/stage/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX86</TargetMachine>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVLD|x64'">\r
- <Midl>\r
- <TargetEnvironment>X64</TargetEnvironment>\r
- </Midl>\r
- <ClCompile>\r
- <AdditionalOptions>/bigobj /Zc:inline %(AdditionalOptions)</AdditionalOptions>\r
- <Optimization>Disabled</Optimization>\r
- <AdditionalIncludeDirectories>$(SolutionDir)..\..\..;$(SolutionDir)..\..\..\tests\test-hdr;$(SolutionDir)..\..\..\tests;$(BOOST_PATH);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
- <PreprocessorDefinitions>CDS_USE_VLD;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;_SCL_SECURE=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <MinimalRebuild>true</MinimalRebuild>\r
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
- <PrecompiledHeader>\r
- </PrecompiledHeader>\r
- <WarningLevel>Level3</WarningLevel>\r
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
- <CallingConvention>Cdecl</CallingConvention>\r
- <DisableSpecificWarnings>4520</DisableSpecificWarnings>\r
- </ClCompile>\r
- <Link>\r
- <AdditionalDependencies>unit-prerequisites_d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
- <OutputFile>$(TargetPath)</OutputFile>\r
- <AdditionalLibraryDirectories>$(BOOST_PATH)/stage64/lib;$(BOOST_PATH)/bin;$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
- <GenerateDebugInformation>true</GenerateDebugInformation>\r
- <SubSystem>Console</SubSystem>\r
- <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
- <DataExecutionPrevention>\r
- </DataExecutionPrevention>\r
- <TargetMachine>MachineX64</TargetMachine>\r
- <ForceFileOutput>MultiplyDefinedSymbolOnly</ForceFileOutput>\r
- </Link>\r
- </ItemDefinitionGroup>\r
- <ItemGroup>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp" />\r
- </ItemGroup>\r
- <ItemGroup>\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h" />\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h" />\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h" />\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h" />\r
- </ItemGroup>\r
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
- <ImportGroup Label="ExtensionTargets">\r
- </ImportGroup>\r
-</Project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
- <ItemGroup>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_hp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_fcqueue.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_hp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_hp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_hp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_hp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_tsigas_cycle_queue.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_vyukovmpmc_cycle_queue.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_rwqueue.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_hp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_vyukov_mpmc_cyclic.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_moirqueue_dhp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue_dhp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_dhp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_moirqueue_hp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_dhp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_msqueue_hp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_queue_register.cpp" />\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_basketqueue_dhp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_dhp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_basketqueue_hp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_optimisticqueue_dhp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_dhp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_optimistic_hp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue_dhp.cpp">\r
- <Filter>intrusive</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue_dhp.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- <ClCompile Include="..\..\..\tests\test-hdr\queue\hdr_tsigas_cycle_queue.cpp">\r
- <Filter>container</Filter>\r
- </ClCompile>\r
- </ItemGroup>\r
- <ItemGroup>\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_msqueue.h">\r
- <Filter>intrusive</Filter>\r
- </ClInclude>\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_intrusive_segmented_queue.h">\r
- <Filter>intrusive</Filter>\r
- </ClInclude>\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_segmented_queue.h">\r
- <Filter>container</Filter>\r
- </ClInclude>\r
- <ClInclude Include="..\..\..\tests\test-hdr\queue\hdr_queue.h">\r
- <Filter>container</Filter>\r
- </ClInclude>\r
- </ItemGroup>\r
- <ItemGroup>\r
- <Filter Include="intrusive">\r
- <UniqueIdentifier>{68aaf08b-6544-4d6a-b912-0935954efdf2}</UniqueIdentifier>\r
- </Filter>\r
- <Filter Include="container">\r
- <UniqueIdentifier>{a466b6f6-2b88-4c6e-84df-1f9d53122909}</UniqueIdentifier>\r
- </Filter>\r
- </ItemGroup>\r
-</Project>
\ No newline at end of file
tests/test-hdr/list/hdr_michael_kv_rcu_shb.cpp \
tests/test-hdr/list/hdr_michael_kv_rcu_sht.cpp
-CDS_TESTHDR_QUEUE := \
- tests/test-hdr/queue/hdr_queue_register.cpp \
- tests/test-hdr/queue/hdr_intrusive_fcqueue.cpp \
- tests/test-hdr/queue/hdr_intrusive_segmented_queue_hp.cpp \
- tests/test-hdr/queue/hdr_intrusive_segmented_queue_dhp.cpp \
- tests/test-hdr/queue/hdr_intrusive_tsigas_cycle_queue.cpp \
- tests/test-hdr/queue/hdr_intrusive_vyukovmpmc_cycle_queue.cpp \
- tests/test-hdr/queue/hdr_basketqueue_hp.cpp \
- tests/test-hdr/queue/hdr_basketqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_fcqueue.cpp \
- tests/test-hdr/queue/hdr_moirqueue_hp.cpp \
- tests/test-hdr/queue/hdr_moirqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_msqueue_hp.cpp \
- tests/test-hdr/queue/hdr_msqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_optimistic_hp.cpp \
- tests/test-hdr/queue/hdr_optimistic_dhp.cpp \
- tests/test-hdr/queue/hdr_rwqueue.cpp \
- tests/test-hdr/queue/hdr_segmented_queue_hp.cpp \
- tests/test-hdr/queue/hdr_segmented_queue_dhp.cpp \
- tests/test-hdr/queue/hdr_tsigas_cycle_queue.cpp \
- tests/test-hdr/queue/hdr_vyukov_mpmc_cyclic.cpp
-
CDS_TESTHDR_SET := \
tests/test-hdr/set/hdr_intrusive_feldman_hashset_hp.cpp \
tests/test-hdr/set/hdr_intrusive_feldman_hashset_dhp.cpp \
tests/test-hdr/misc/thread_init_fini.cpp
CDS_TESTHDR_SOURCES := \
- $(CDS_TESTHDR_QUEUE) \
$(CDS_TESTHDR_MAP) \
$(CDS_TESTHDR_LIST) \
$(CDS_TESTHDR_SET) \
-CDS_TESTHDR_OFFSETOF_DEQUE := \
-
CDS_TESTHDR_OFFSETOF_MAP := \
tests/test-hdr/map/hdr_cuckoo_map.cpp
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_shb.cpp \
tests/test-hdr/list/hdr_intrusive_michael_list_rcu_sht.cpp
-CDS_TESTHDR_OFFSETOF_QUEUE := \
- tests/test-hdr/queue/hdr_intrusive_basketqueue_hp.cpp \
- tests/test-hdr/queue/hdr_intrusive_basketqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_intrusive_moirqueue_hp.cpp \
- tests/test-hdr/queue/hdr_intrusive_moirqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_intrusive_msqueue_hp.cpp \
- tests/test-hdr/queue/hdr_intrusive_msqueue_dhp.cpp \
- tests/test-hdr/queue/hdr_intrusive_optimisticqueue_hp.cpp \
- tests/test-hdr/queue/hdr_intrusive_optimisticqueue_dhp.cpp
-
-CDS_TESTHDR_OFFSETOF_STACK := \
- tests/test-hdr/stack/hdr_intrusive_treiber_stack_hp.cpp \
- tests/test-hdr/stack/hdr_intrusive_treiber_stack_dhp.cpp \
- tests/test-hdr/stack/hdr_intrusive_elimination_stack_hp.cpp \
- tests/test-hdr/stack/hdr_intrusive_elimination_stack_dhp.cpp
-
CDS_TESTHDR_OFFSETOF_TREE := \
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_hp_member.cpp \
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_dhp_member.cpp \
tests/test-hdr/tree/hdr_intrusive_ellen_bintree_rcu_sht_member.cpp
CDS_TESTHDR_OFFSETOF_SOURCES := \
- $(CDS_TESTHDR_OFFSETOF_QUEUE) \
- $(CDS_TESTHDR_OFFSETOF_STACK) \
- $(CDS_TESTHDR_OFFSETOF_DEQUE) \
$(CDS_TESTHDR_OFFSETOF_MAP) \
$(CDS_TESTHDR_OFFSETOF_SET) \
$(CDS_TESTHDR_OFFSETOF_LIST) \
intrusive_optqueue_dhp.cpp
intrusive_segmented_queue_hp.cpp
intrusive_segmented_queue_dhp.cpp
+ intrusive_tsigas_queue.cpp
+ intrusive_vyukov_queue.cpp
)
include_directories(
--- /dev/null
+/*
+ This file is a part of libcds - Concurrent Data Structures library
+
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+ Source code repo: http://github.com/khizmax/libcds/
+ Download: http://sourceforge.net/projects/libcds/files/
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/intrusive/tsigas_cycle_queue.h>
+#include "test_intrusive_bounded_queue.h"
+
+namespace {
+
+ class IntrusiveTsigasQueue : public cds_test::intrusive_bounded_queue
+ {
+ protected:
+ struct disposer {
+ void operator()( item * p )
+ {
+ ++p->nDisposeCount;
+ }
+ };
+ };
+
+ static const size_t c_Capacity = 64;
+ static const size_t c_RealCapacity = c_Capacity - 2;
+
+ TEST_F( IntrusiveTsigasQueue, defaulted )
+ {
+ cds::intrusive::TsigasCycleQueue< item > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveTsigasQueue, disposer )
+ {
+ struct traits : public cds::intrusive::tsigas_queue::traits
+ {
+ typedef IntrusiveTsigasQueue::disposer disposer;
+ typedef cds::atomicity::item_counter item_counter;
+ };
+
+ cds::intrusive::TsigasCycleQueue< item, traits > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveTsigasQueue, static_buffer )
+ {
+ struct traits : public cds::intrusive::tsigas_queue::traits
+ {
+ typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+ typedef IntrusiveTsigasQueue::disposer disposer;
+ };
+
+ cds::intrusive::TsigasCycleQueue< item, traits > q;
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveTsigasQueue, dynamic_buffer )
+ {
+ typedef typename cds::intrusive::tsigas_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int >>
+ ,cds::opt::item_counter< cds::atomicity::item_counter >
+ ,cds::opt::back_off< cds::backoff::pause >
+ ,cds::intrusive::opt::disposer< disposer >
+ >::type traits;
+
+ cds::intrusive::TsigasCycleQueue< item, traits > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveTsigasQueue, padding )
+ {
+ struct traits : public cds::intrusive::tsigas_queue::traits
+ {
+ typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+ typedef IntrusiveTsigasQueue::disposer disposer;
+ enum { padding = 16 | cds::opt::padding_tiny_data_only };
+ };
+
+ cds::intrusive::TsigasCycleQueue< item, traits > q;
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+
+} // namespace
--- /dev/null
+/*
+ This file is a part of libcds - Concurrent Data Structures library
+
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+ Source code repo: http://github.com/khizmax/libcds/
+ Download: http://sourceforge.net/projects/libcds/files/
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
+#include "test_intrusive_bounded_queue.h"
+
+namespace {
+
+ class IntrusiveVyukovQueue : public cds_test::intrusive_bounded_queue
+ {
+ protected:
+ struct disposer {
+ void operator()( item * p )
+ {
+ ++p->nDisposeCount;
+ }
+ };
+ };
+
+ static const size_t c_Capacity = 64;
+ static const size_t c_RealCapacity = c_Capacity;
+
+ TEST_F( IntrusiveVyukovQueue, defaulted )
+ {
+ cds::intrusive::VyukovMPMCCycleQueue< item > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveVyukovQueue, disposer )
+ {
+ struct traits : public cds::intrusive::vyukov_queue::traits
+ {
+ typedef IntrusiveVyukovQueue::disposer disposer;
+ typedef cds::atomicity::item_counter item_counter;
+ };
+
+ cds::intrusive::VyukovMPMCCycleQueue< item, traits > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveVyukovQueue, static_buffer )
+ {
+ struct traits : public cds::intrusive::vyukov_queue::traits
+ {
+ typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+ typedef IntrusiveVyukovQueue::disposer disposer;
+ };
+
+ cds::intrusive::VyukovMPMCCycleQueue< item, traits > q;
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveVyukovQueue, dynamic_buffer )
+ {
+ typedef typename cds::intrusive::vyukov_queue::make_traits<
+ cds::opt::buffer< cds::opt::v::dynamic_buffer< int >>
+ ,cds::opt::item_counter< cds::atomicity::item_counter >
+ ,cds::opt::back_off< cds::backoff::pause >
+ ,cds::intrusive::opt::disposer< disposer >
+ >::type traits;
+
+ cds::intrusive::VyukovMPMCCycleQueue< item, traits > q( c_Capacity );
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+ TEST_F( IntrusiveVyukovQueue, padding )
+ {
+ struct traits : public cds::intrusive::vyukov_queue::traits
+ {
+ typedef cds::opt::v::static_buffer< int, c_Capacity > buffer;
+ typedef IntrusiveVyukovQueue::disposer disposer;
+ enum { padding = 16 | cds::opt::padding_tiny_data_only };
+ };
+
+ cds::intrusive::VyukovMPMCCycleQueue< item, traits > q;
+ ASSERT_EQ( q.capacity(), c_RealCapacity );
+ test( q );
+ }
+
+
+} // namespace
--- /dev/null
+/*
+ This file is a part of libcds - Concurrent Data Structures library
+
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+
+ Source code repo: http://github.com/khizmax/libcds/
+ Download: http://sourceforge.net/projects/libcds/files/
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
+#define CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
+
+#include <cds_test/check_size.h>
+#include <vector>
+\r
+namespace cds_test {\r
+\r
+ class intrusive_bounded_queue : public ::testing::Test\r
+ {\r
+ protected:\r
+ struct item {
+ int nVal;
+ int nDisposeCount;
+
+ item()
+ : nDisposeCount( 0 )
+ {}
+ };
+\r
+ protected:\r
+ template <typename Queue>\r
+ void test( Queue& q )\r
+ {\r
+ typedef typename Queue::value_type value_type;
+ value_type it;
+
+ const size_t nSize = q.capacity();
+
+ ASSERT_TRUE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, 0 );
+
+ std::vector< value_type > arr;
+ arr.resize( nSize );
+ for ( size_t i = 0; i < nSize; ++i )
+ arr[i].nVal = static_cast<int>(i);
+
+ // push
+ for ( auto& i : arr ) {
+ if ( i.nVal & 1 ) {
+ ASSERT_TRUE( q.push( i ));
+ }
+ else {
+ ASSERT_TRUE( q.enqueue( i ));
+ }
+ ASSERT_CONTAINER_SIZE( q, i.nVal + 1 );
+ ASSERT_FALSE( q.empty() );
+ }
+
+ ASSERT_CONTAINER_SIZE( q, q.capacity() );
+
+ // pop
+ int val = 0;
+ while ( !q.empty() ) {
+ value_type * v;
+ if ( val & 1 )
+ v = q.pop();
+ else
+ v = q.dequeue();
+
+ ASSERT_TRUE( v != nullptr );
+ ASSERT_EQ( v->nVal, val );
+ ++val;
+ ASSERT_CONTAINER_SIZE( q, nSize - static_cast<size_t>( val ));
+ }
+ ASSERT_EQ( val, static_cast<int>( nSize ));
+
+ ASSERT_TRUE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, 0 );
+
+ // pop from empty queue
+ {
+ value_type * v = q.pop();
+ ASSERT_TRUE( v == nullptr );
+ ASSERT_TRUE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, 0 );
+ }
+
+ // clear
+ for ( auto& i : arr ) {
+ ASSERT_TRUE( q.push( i ) );
+ }
+ ASSERT_FALSE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, q.capacity() );
+ q.clear();
+ ASSERT_TRUE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, 0 );
+
+ if ( std::is_same<typename Queue::disposer, cds::intrusive::opt::v::empty_disposer>::value ) {
+ // no disposer
+ for ( auto& i : arr ) {
+ ASSERT_EQ( i.nDisposeCount, 0 );
+ }
+ }
+ else {
+ // check the disposer has been called
+ for ( auto& i : arr ) {
+ ASSERT_EQ( i.nDisposeCount, 1 );
+ }
+ }
+
+ // clear with disposer
+ for ( auto& i : arr ) {
+ ASSERT_TRUE( q.push( i ) );
+ i.nDisposeCount = 0;
+ }
+ ASSERT_FALSE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, q.capacity() );
+ q.clear( []( value_type * p ) { p->nDisposeCount = p->nVal + 1; } );
+ ASSERT_TRUE( q.empty() );
+ ASSERT_CONTAINER_SIZE( q, 0 );
+ // check the disposer has not been called
+ for ( auto& i : arr ) {
+ ASSERT_EQ( i.nDisposeCount, i.nVal + 1 );
+ }
+ }\r
+ };\r
+\r
+} // namespace cds_test\r
+
+#endif // CDSUNIT_QUEUE_TEST_INTRUSIVE_BOUNDED_QUEUE_H
struct traits : public cds::container::tsigas_queue::traits
{
typedef cds::opt::v::dynamic_buffer<int> buffer;
- enum { alignment = 16 };
+ enum { padding = 16 };
};
typedef cds::container::TsigasCycleQueue< int, traits > test_queue;
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/basket_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::BasketQueue_DHP()
- {
- typedef cds::container::BasketQueue< cds::gc::DHP, int > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_Counted()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_relax()
- {
- struct traits : public
- cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- > ::type
- {};
- typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_Counted_relax()
- {
- typedef cds::container::BasketQueue< cds::gc::DHP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- >::type
- > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_seqcst()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::opt::v::sequential_consistent memory_model;
- };
- typedef cds::container::BasketQueue< cds::gc::DHP, int, traits > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_Counted_seqcst()
- {
- typedef cds::container::BasketQueue < cds::gc::DHP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_relax_align()
- {
- typedef cds::container::BasketQueue < cds::gc::DHP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 16 >
- >::type
- > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_Counted_relax_align()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::relaxed_ordering memory_model;
- enum { padding = 32 };
- };
- typedef cds::container::BasketQueue < cds::gc::DHP, int, traits > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_seqcst_align()
- {
- typedef cds::container::BasketQueue < cds::gc::DHP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding< cds::opt::no_special_padding >
- > ::type
- > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_DHP_Counted_seqcst_align()
- {
- typedef cds::container::BasketQueue < cds::gc::DHP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::cache_line_padding >
- > ::type
- > queue_type;
- test_ic< queue_type >();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/basket_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::BasketQueue_HP()
- {
- typedef cds::container::BasketQueue< cds::gc::HP, int > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_Counted()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_relax()
- {
- struct traits : public
- cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- > ::type
- {};
- typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_Counted_relax()
- {
- typedef cds::container::BasketQueue< cds::gc::HP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- >::type
- > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_seqcst()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::opt::v::sequential_consistent memory_model;
- };
- typedef cds::container::BasketQueue< cds::gc::HP, int, traits > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_Counted_seqcst()
- {
- typedef cds::container::BasketQueue < cds::gc::HP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_relax_align()
- {
- typedef cds::container::BasketQueue < cds::gc::HP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 16 >
- >::type
- > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_Counted_relax_align()
- {
- struct traits : public cds::container::basket_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::relaxed_ordering memory_model;
- enum { padding = 32 };
- };
- typedef cds::container::BasketQueue < cds::gc::HP, int, traits > queue_type;
- test_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_seqcst_align()
- {
- typedef cds::container::BasketQueue < cds::gc::HP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding< cds::opt::no_special_padding >
- > ::type
- > queue_type;
- test_no_ic< queue_type >();
- }
-
- void HdrTestQueue::BasketQueue_HP_Counted_seqcst_align()
- {
- typedef cds::container::BasketQueue < cds::gc::HP, int,
- typename cds::container::basket_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::cache_line_padding >
- > ::type
- > queue_type;
- test_ic< queue_type >();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/container/fcqueue.h>
-#include "queue/hdr_fcqueue.h"
-
-#include <list>
-
-namespace queue {
-
- void HdrFCQueue::FCQueue_deque()
- {
- typedef cds::container::FCQueue<int> queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_deque_elimination()
- {
- typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
- cds::container::fcqueue::make_traits<
- cds::opt::enable_elimination< true >
- >::type
- > queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_deque_mutex()
- {
- typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
- cds::container::fcqueue::make_traits<
- cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_deque_stat()
- {
- typedef cds::container::FCQueue<int, std::queue< int, std::deque<int> >,
- cds::container::fcqueue::make_traits<
- cds::opt::stat< cds::container::fcqueue::stat<> >
- >::type
- > queue_type;
- testFCQueue<queue_type>();
- }
-
- //
- void HdrFCQueue::FCQueue_list()
- {
- typedef cds::container::FCQueue<int, std::queue< int, std::list<int> > > queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_list_elimination()
- {
- typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >,
- cds::container::fcqueue::make_traits<
- cds::opt::enable_elimination< true >
- >::type
- > queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_list_mutex()
- {
- typedef cds::container::FCQueue<int, std::queue<int, std::list<int> >,
- cds::container::fcqueue::make_traits<
- cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
- testFCQueue<queue_type>();
- }
-
- void HdrFCQueue::FCQueue_list_stat()
- {
- struct queue_traits : public cds::container::fcqueue::traits
- {
- typedef cds::container::fcqueue::stat<> stat;
- };
- typedef cds::container::FCQueue<int, std::queue< int, std::list<int> >, queue_traits > queue_type;
- testFCQueue<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CDSTEST_HDR_FCQUEUE_H
-#define CDSTEST_HDR_FCQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/details/defs.h>
-
-namespace queue {
-
- //
- // Test queue operation in single thread mode
- //
- class HdrFCQueue: public CppUnitMini::TestCase
- {
- protected:
- template <class Queue>
- void testNoItemCounter()
- {
- Queue q;
- test_with( q );
- test_emplace( q );
- }
-
- template <class Queue>
- void test_with( Queue& q )
- {
- int it;
- int nPrev;
-
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.enqueue( 1 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push( 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 ) ; // no queue's item counter!
-#endif
-
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ) );
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.dequeue( it ) );
- CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.empty() );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue( it ) );
- CPPUNIT_ASSERT( it == nPrev ) ; // it must not be changed!
- }
- }
-
- template <class Queue>
- void test_emplace( Queue& q )
- {
- int it;
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.emplace( static_cast<int>( i * 42 )) );
- CPPUNIT_ASSERT( !q.empty() );
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ));
- CPPUNIT_ASSERT( it == static_cast<int>( i * 42 ));
- CPPUNIT_ASSERT( q.empty() );
- }
- }
-
- template <class Queue>
- void testWithItemCounter()
- {
- Queue q;
- test_ic_with( q );
- test_emplace_ic( q );
- }
-
- template <class Queue>
- void testFCQueue()
- {
- Queue q;
- test_ic_with( q );
- }
-
- template <class Queue>
- void test_ic_with( Queue& q )
- {
- int it;
- int nPrev;
-
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.enqueue( 1 ) );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push( 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 2 );
-
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ) );
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.dequeue( it ) );
- CPPUNIT_ASSERT( it == 10 );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue( it ) );
- CPPUNIT_ASSERT( it == nPrev ) ; // it must not be changed!
-
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- }
- }
-
- template <class Queue>
- void test_emplace_ic( Queue& q )
- {
- int it = 0;
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.emplace( (int) i * 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.pop( it ));
- CPPUNIT_ASSERT( it == (int) i * 10 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- }
- }
-
- public:
- void FCQueue_deque();
- void FCQueue_deque_elimination();
- void FCQueue_deque_mutex();
- void FCQueue_deque_stat();
- void FCQueue_list();
- void FCQueue_list_elimination();
- void FCQueue_list_mutex();
- void FCQueue_list_stat();
-
- CPPUNIT_TEST_SUITE(HdrFCQueue)
- CPPUNIT_TEST(FCQueue_deque)
- CPPUNIT_TEST(FCQueue_deque_elimination)
- CPPUNIT_TEST(FCQueue_deque_mutex)
- CPPUNIT_TEST(FCQueue_deque_stat)
- CPPUNIT_TEST(FCQueue_list)
- CPPUNIT_TEST(FCQueue_list_elimination)
- CPPUNIT_TEST(FCQueue_list_mutex)
- CPPUNIT_TEST(FCQueue_list_stat)
- CPPUNIT_TEST_SUITE_END();
-
- };
-} // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_FCQUEUE_H
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/basket_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item < ci::basket_queue::node<cds::gc::DHP> > base_hook_item;
- typedef IntrusiveQueueHeaderTest::member_hook_item < ci::basket_queue::node<cds::gc::DHP> > member_hook_item;
-
- // DHP base hook
- struct traits_BasketQueue_disposer : public
- ci::basket_queue::make_traits < ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer > >::type
- {
- typedef ci::basket_queue::base_hook< ci::opt::gc < cds::gc::DHP > > hook;
- };
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item, traits_BasketQueue_disposer > BasketQueue_DHP_base;
-
- // DHP member hook
- struct traits_BasketQueue_member : public traits_BasketQueue_disposer
- {
- typedef ci::basket_queue::member_hook< offsetof( member_hook_item, hMember ), ci::opt::gc < cds::gc::DHP > > hook;
- };
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item, traits_BasketQueue_member >BasketQueue_DHP_member;
-
- /// DHP base hook + item counter
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > BasketQueue_DHP_base_ic;
-
- // DHP member hook + item counter
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof( member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > BasketQueue_DHP_member_ic;
-
- // DHP base hook + stat
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::basket_queue::stat<> >
- >::type
- > BasketQueue_DHP_base_stat;
-
- // DHP member hook + stat
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::basket_queue::stat<> >
- >::type
- > BasketQueue_DHP_member_stat;
-
- // DHP base hook + padding
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::padding< 32 >
- >::type
- > BasketQueue_DHP_base_align;
-
- // DHP member hook + padding
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_DHP_member_align;
-
- // DHP base hook + no padding
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::padding< co::no_special_padding >
- >::type
- > BasketQueue_DHP_base_noalign;
-
- // DHP member hook + no padding
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< co::no_special_padding >
- >::type
- > BasketQueue_DHP_member_noalign;
-
-
- // DHP base hook + cache padding
- typedef ci::BasketQueue< cds::gc::DHP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_DHP_base_cachealign;
-
- // DHP member hook + cache padding
- typedef ci::BasketQueue< cds::gc::DHP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_DHP_member_cachealign;
- } // namespace
-
- TEST(BasketQueue_DHP_base)
- TEST(BasketQueue_DHP_member)
- TEST(BasketQueue_DHP_base_ic)
- TEST(BasketQueue_DHP_member_ic)
- TEST(BasketQueue_DHP_base_stat)
- TEST(BasketQueue_DHP_member_stat)
- TEST(BasketQueue_DHP_base_align)
- TEST(BasketQueue_DHP_member_align)
- TEST(BasketQueue_DHP_base_noalign)
- TEST(BasketQueue_DHP_member_noalign)
- TEST(BasketQueue_DHP_base_cachealign)
- TEST(BasketQueue_DHP_member_cachealign)
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/basket_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test_basket<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item< ci::basket_queue::node<cds::gc::HP> > base_hook_item;
- typedef IntrusiveQueueHeaderTest::member_hook_item< ci::basket_queue::node<cds::gc::HP> > member_hook_item;
-
- struct traits_BasketQueue_HP_default : public ci::basket_queue::traits
- {
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- };
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default > BasketQueue_HP_default;
-
- /// HP + item counter
- struct traits_BasketQueue_HP_default_ic : public traits_BasketQueue_HP_default
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef co::v::sequential_consistent memory_model;
- };
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_default_ic > BasketQueue_HP_default_ic;
-
- /// HP + stat
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::basket_queue::stat<> >
- >::type
- > BasketQueue_HP_default_stat;
-
- // HP base hook
- struct traits_BasketQueue_HP_base : public ci::basket_queue::traits
- {
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- typedef ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
- };
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item, traits_BasketQueue_HP_base > BasketQueue_HP_base;
-
- // HP member hook
- struct traits_BasketQueue_HP_member : public traits_BasketQueue_HP_base
- {
- typedef ci::basket_queue::member_hook <
- offsetof( member_hook_item, hMember ),
- ci::opt::gc < cds::gc::HP >
- > hook;
-
- };
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item, traits_BasketQueue_HP_member > BasketQueue_HP_member;
-
- /// HP base hook + item counter
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > BasketQueue_HP_base_ic;
-
- // HP member hook + item counter
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof( member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > BasketQueue_HP_member_ic;
-
- // HP base hook + stat
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::basket_queue::stat<> >
- >::type
- > BasketQueue_HP_base_stat;
-
- // HP member hook + stat
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::basket_queue::stat<> >
- >::type
- > BasketQueue_HP_member_stat;
-
- // HP base hook + padding
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< 32 >
- >::type
- > BasketQueue_HP_base_align;
-
- // HP member hook + padding
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_HP_member_align;
-
- // HP base hook + no padding
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::padding< co::no_special_padding >
- >::type
- > BasketQueue_HP_base_noalign;
-
- // HP member hook + no padding
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< co::no_special_padding >
- >::type
- > BasketQueue_HP_member_noalign;
-
-
- // HP base hook + cache padding
- typedef ci::BasketQueue< cds::gc::HP, base_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_HP_base_cachealign;
-
- // HP member hook + cache padding
- typedef ci::BasketQueue< cds::gc::HP, member_hook_item,
- typename ci::basket_queue::make_traits<
- ci::opt::hook<
- ci::basket_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > BasketQueue_HP_member_cachealign;
- } // namespace
-
- TEST(BasketQueue_HP_default)
- TEST(BasketQueue_HP_default_ic)
- TEST(BasketQueue_HP_default_stat)
- TEST(BasketQueue_HP_base)
- TEST(BasketQueue_HP_member)
- TEST(BasketQueue_HP_base_ic)
- TEST(BasketQueue_HP_member_ic)
- TEST(BasketQueue_HP_base_stat)
- TEST(BasketQueue_HP_member_stat)
- TEST(BasketQueue_HP_base_align)
- TEST(BasketQueue_HP_member_align)
- TEST(BasketQueue_HP_base_noalign)
- TEST(BasketQueue_HP_member_noalign)
- TEST(BasketQueue_HP_base_cachealign)
- TEST(BasketQueue_HP_member_cachealign)
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/fcqueue.h>
-
-namespace queue {
-
- class TestIntrusiveFCQueue: public CppUnitMini::TestCase
- {
- template <typename Hook>
- struct base_hook_item: public Hook
- {
- int nVal;
- int nDisposeCount;
-
- base_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- template <typename Hook>
- struct member_hook_item
- {
- int nVal;
- int nDisposeCount;
- Hook hMember;
-
- member_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- struct disposer
- {
- template <typename T>
- void operator ()( T * p )
- {
- ++p->nDisposeCount;
- }
- };
-
- template <typename Queue>
- void test()
- {
- Queue q;
- test_with(q);
- }
-
- template <class Queue>
- void test_with( Queue& q )
- {
- typedef typename Queue::value_type value_type;
- value_type v1, v2, v3;
- CPPUNIT_ASSERT( q.empty() );
-
- v1.nVal = 1;
- v2.nVal = 2;
- v3.nVal = 3;
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- value_type * pv;
- pv = q.pop();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 2 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.dequeue();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 3 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.dequeue();
- CPPUNIT_ASSERT( pv == nullptr );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- CPPUNIT_ASSERT( q.enqueue(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.enqueue(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.enqueue(v3));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- q.clear( true ); // call disposer
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
-
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
- q.clear( false ); // no disposer called
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- }
-
- void FCQueue_base();
- void FCQueue_base_stat();
- void FCQueue_base_elimination();
- void FCQueue_base_elimination_mutex();
- void FCQueue_base_seqcst();
- void FCQueue_member();
- void FCQueue_member_stat();
- void FCQueue_member_elimination();
- void FCQueue_member_elimination_mutex();
- void FCQueue_member_seqcst();
-
- CPPUNIT_TEST_SUITE(TestIntrusiveFCQueue)
- CPPUNIT_TEST(FCQueue_base)
- CPPUNIT_TEST(FCQueue_base_stat)
- CPPUNIT_TEST(FCQueue_base_elimination)
- CPPUNIT_TEST(FCQueue_base_elimination_mutex)
- CPPUNIT_TEST(FCQueue_base_seqcst)
- CPPUNIT_TEST(FCQueue_member)
- CPPUNIT_TEST(FCQueue_member_stat)
- CPPUNIT_TEST(FCQueue_member_elimination)
- CPPUNIT_TEST(FCQueue_member_elimination_mutex)
- CPPUNIT_TEST(FCQueue_member_seqcst)
- CPPUNIT_TEST_SUITE_END()
- };
-
-
- void TestIntrusiveFCQueue::FCQueue_base()
- {
- typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_base_stat()
- {
- typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
- struct queue_traits : public cds::intrusive::fcqueue::traits
- {
- typedef TestIntrusiveFCQueue::disposer disposer;
- typedef cds::intrusive::fcqueue::stat<> stat;
- };
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_base_elimination()
- {
- typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
- struct queue_traits : public
- cds::intrusive::fcqueue::make_traits <
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::enable_elimination < true >
- > ::type
- {};
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_base_elimination_mutex()
- {
- typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::enable_elimination< true >
- ,cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_base_seqcst()
- {
- typedef base_hook_item< boost::intrusive::list_base_hook<> > value_type;
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_member()
- {
- typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
- typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_member_stat()
- {
- typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
- typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_member_elimination()
- {
- typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
- typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::enable_elimination< true >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_member_elimination_mutex()
- {
- typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
- typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::enable_elimination< true >
- ,cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void TestIntrusiveFCQueue::FCQueue_member_seqcst()
- {
- typedef member_hook_item< boost::intrusive::list_member_hook<> > value_type;
- typedef boost::intrusive::member_hook<value_type, boost::intrusive::list_member_hook<>, &value_type::hMember> member_option;
-
- typedef cds::intrusive::FCQueue< value_type, boost::intrusive::list< value_type, member_option >,
- cds::intrusive::fcqueue::make_traits<
- cds::intrusive::opt::disposer< disposer >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
-} // namespace queue
-
-CPPUNIT_TEST_SUITE_REGISTRATION(queue::TestIntrusiveFCQueue);
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/moir_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::DHP > > base_item_type;
- typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::DHP > > member_item_type;
-
- // DHP base hook
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_DHP_base;
-
- // DHP member hook
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_DHP_member;
-
- /// DHP base hook + item counter
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , co::item_counter< cds::atomicity::item_counter >
- , co::memory_model< co::v::relaxed_ordering >
- >::type
- > MoirQueue_DHP_base_ic;
-
- // DHP member hook + item counter
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::item_counter< cds::atomicity::item_counter >
- >::type
- > MoirQueue_DHP_member_ic;
-
- // DHP base hook + stat
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::stat< ci::msqueue::stat<> >
- >::type
- > MoirQueue_DHP_base_stat;
-
- // DHP member hook + stat
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::stat< ci::msqueue::stat<> >
- >::type
- > MoirQueue_DHP_member_stat;
-
- // DHP base hook + padding
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , co::padding< 32 >
- >::type
- > MoirQueue_DHP_base_align;
-
- // DHP member hook + padding
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , co::padding< 32 >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_DHP_member_align;
-
- // DHP base hook + no padding
- struct traits_MoirQueue_DHP_base_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type, traits_MoirQueue_DHP_base_noalign > MoirQueue_DHP_base_noalign;
-
- // DHP member hook + no padding
- struct traits_MoirQueue_DHP_member_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::member_hook <
- offsetof( member_item_type, hMember ),
- ci::opt::gc < cds::gc::DHP >
- > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type, traits_MoirQueue_DHP_member_noalign > MoirQueue_DHP_member_noalign;
-
-
- // DHP base hook + cache padding
- struct traits_MoirQueue_DHP_base_cachealign : public traits_MoirQueue_DHP_base_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MoirQueue< cds::gc::DHP, base_item_type, traits_MoirQueue_DHP_base_cachealign > MoirQueue_DHP_base_cachealign;
-
- // DHP member hook + cache padding
- struct traits_MoirQueue_DHP_member_cachealign : public traits_MoirQueue_DHP_member_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MoirQueue< cds::gc::DHP, member_item_type, traits_MoirQueue_DHP_member_cachealign > MoirQueue_DHP_member_cachealign;
- } // namespace
-
- TEST(MoirQueue_DHP_base)
- TEST(MoirQueue_DHP_member)
- TEST(MoirQueue_DHP_base_ic)
- TEST(MoirQueue_DHP_member_ic)
- TEST(MoirQueue_DHP_base_stat)
- TEST(MoirQueue_DHP_member_stat)
- TEST(MoirQueue_DHP_base_align)
- TEST(MoirQueue_DHP_member_align)
- TEST(MoirQueue_DHP_base_noalign)
- TEST(MoirQueue_DHP_member_noalign)
- TEST(MoirQueue_DHP_base_cachealign)
- TEST(MoirQueue_DHP_member_cachealign)
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/moir_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
- typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
-
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_HP_default;
-
- /// HP + item counter
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::sequential_consistent >
- >::type
- > MoirQueue_HP_default_ic;
-
- /// HP + stat
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MoirQueue_HP_default_stat;
-
- // HP base hook
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_HP_base;
-
- // HP member hook
- typedef ci::MoirQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_HP_member;
-
- /// HP base hook + item counter
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > MoirQueue_HP_base_ic;
-
- // HP member hook + item counter
- typedef ci::MoirQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > MoirQueue_HP_member_ic;
-
- // HP base hook + stat
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MoirQueue_HP_base_stat;
-
- // HP member hook + stat
- typedef ci::MoirQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MoirQueue_HP_member_stat;
-
- // HP base hook + padding
- typedef ci::MoirQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< 32 >
- >::type
- > MoirQueue_HP_base_align;
-
- // HP member hook + padding
- typedef ci::MoirQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MoirQueue_HP_member_align;
-
- // HP base hook + no padding
- struct traits_MoirQueue_HP_base_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_noalign > MoirQueue_HP_base_noalign;
-
- // HP member hook + no padding
- struct traits_MoirQueue_HP_member_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::member_hook <
- offsetof( member_item_type, hMember ),
- ci::opt::gc < cds::gc::HP >
- > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_noalign > MoirQueue_HP_member_noalign;
-
-
- // HP base hook + cache padding
- struct traits_MoirQueue_HP_base_cachealign : public traits_MoirQueue_HP_base_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MoirQueue< cds::gc::HP, base_item_type, traits_MoirQueue_HP_base_cachealign > MoirQueue_HP_base_cachealign;
-
- // HP member hook + cache padding
- struct traits_MoirQueue_HP_member_cachealign : public traits_MoirQueue_HP_member_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MoirQueue< cds::gc::HP, member_item_type, traits_MoirQueue_HP_member_cachealign > MoirQueue_HP_member_cachealign;
- }
-
- TEST(MoirQueue_HP_default)
- TEST(MoirQueue_HP_default_ic)
- TEST(MoirQueue_HP_default_stat)
- TEST(MoirQueue_HP_base)
- TEST(MoirQueue_HP_member)
- TEST(MoirQueue_HP_base_ic)
- TEST(MoirQueue_HP_member_ic)
- TEST(MoirQueue_HP_base_stat)
- TEST(MoirQueue_HP_member_stat)
- TEST(MoirQueue_HP_base_align)
- TEST(MoirQueue_HP_member_align)
- TEST(MoirQueue_HP_base_noalign)
- TEST(MoirQueue_HP_member_noalign)
- TEST(MoirQueue_HP_base_cachealign)
- TEST(MoirQueue_HP_member_cachealign)
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
-#define CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-
-namespace queue {
- namespace ci = cds::intrusive;
- namespace co = cds::opt;
-
- class IntrusiveQueueHeaderTest: public CppUnitMini::TestCase
- {
- public:
-
- template <typename Base>
- struct base_hook_item : public Base
- {
- int nVal;
- int nDisposeCount;
-
- base_hook_item()
- : nDisposeCount( 0 )
- {}
- };
-
- template <typename Member>
- struct member_hook_item
- {
- int nVal;
- int nDisposeCount;
- Member hMember;
-
- member_hook_item()
- : nDisposeCount( 0 )
- {}
- };
-
- struct faked_disposer
- {
- template <typename T>
- void operator ()( T * p )
- {
- ++p->nDisposeCount;
- }
- };
-
-
- // Test for MSQueue and derivatives
- template <class Queue>
- void test()
- {
- typedef typename Queue::value_type value_type;
- value_type v1, v2, v3;
-
- {
- Queue q;
- CPPUNIT_ASSERT( q.empty() );
-
- v1.nVal = 1;
- v2.nVal = 2;
- v3.nVal = 3;
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- value_type * pv;
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 2 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 3 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- CPPUNIT_ASSERT( pv == nullptr );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- }
-
- Queue::gc::scan();
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- }
-
- // Test for BasketQueue and derivatives
- template <class Queue>
- void test_basket()
- {
- typedef typename Queue::value_type value_type;
- value_type v1, v2, v3, v4;
-
- {
- Queue q;
- CPPUNIT_ASSERT( q.empty() );
-
- v1.nVal = 1;
- v2.nVal = 2;
- v3.nVal = 3;
- v4.nVal = 4;
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v4));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
- value_type * pv;
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 2 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 3 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 4 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
-
- pv = q.pop();
- Queue::gc::scan();
- CPPUNIT_CHECK( pv == nullptr );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- CPPUNIT_CHECK( v4.nDisposeCount == 0 );
- }
-
- Queue::gc::scan();
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- CPPUNIT_CHECK( v4.nDisposeCount == 1 );
- }
-
- // Test for a queue in what dequeued item should be manually disposed
- template <class Queue>
- void test2()
- {
- typedef typename Queue::value_type value_type;
- value_type v1, v2, v3;
- Queue q;
- CPPUNIT_ASSERT( q.empty() );
-
- v1.nVal = 1;
- v2.nVal = 2;
- v3.nVal = 3;
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- value_type * pv;
- pv = q.pop();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 2 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- CPPUNIT_ASSERT( pv != nullptr );
- CPPUNIT_ASSERT( pv->nVal == 3 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- pv = q.pop();
- CPPUNIT_ASSERT( pv == nullptr );
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
-
- CPPUNIT_ASSERT( q.push(v1));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v2));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push(v3));
- CPPUNIT_ASSERT( !q.empty() );
-
- CPPUNIT_CHECK( v1.nDisposeCount == 0 );
- CPPUNIT_CHECK( v2.nDisposeCount == 0 );
- CPPUNIT_CHECK( v3.nDisposeCount == 0 );
- q.clear();
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( v1.nDisposeCount == 1 );
- CPPUNIT_CHECK( v2.nDisposeCount == 1 );
- CPPUNIT_CHECK( v3.nDisposeCount == 1 );
- }
-
-
- void test_MSQueue_HP_default();
- void test_MSQueue_HP_default_ic();
- void test_MSQueue_HP_default_stat();
- void test_MSQueue_HP_base();
- void test_MSQueue_HP_member();
- void test_MSQueue_HP_base_ic();
- void test_MSQueue_HP_member_ic();
- void test_MSQueue_HP_base_stat();
- void test_MSQueue_HP_member_stat();
- void test_MSQueue_HP_base_align();
- void test_MSQueue_HP_member_align();
- void test_MSQueue_HP_base_noalign();
- void test_MSQueue_HP_member_noalign();
- void test_MSQueue_HP_base_cachealign();
- void test_MSQueue_HP_member_cachealign();
- void test_MSQueue_DHP_base();
- void test_MSQueue_DHP_member();
- void test_MSQueue_DHP_base_ic();
- void test_MSQueue_DHP_member_ic();
- void test_MSQueue_DHP_base_stat();
- void test_MSQueue_DHP_member_stat();
- void test_MSQueue_DHP_base_align();
- void test_MSQueue_DHP_member_align();
- void test_MSQueue_DHP_base_noalign();
- void test_MSQueue_DHP_member_noalign();
- void test_MSQueue_DHP_base_cachealign();
- void test_MSQueue_DHP_member_cachealign();
-
- void test_MoirQueue_HP_default();
- void test_MoirQueue_HP_default_ic();
- void test_MoirQueue_HP_default_stat();
- void test_MoirQueue_HP_base();
- void test_MoirQueue_HP_member();
- void test_MoirQueue_HP_base_ic();
- void test_MoirQueue_HP_member_ic();
- void test_MoirQueue_HP_base_stat();
- void test_MoirQueue_HP_member_stat();
- void test_MoirQueue_HP_base_align();
- void test_MoirQueue_HP_member_align();
- void test_MoirQueue_HP_base_noalign();
- void test_MoirQueue_HP_member_noalign();
- void test_MoirQueue_HP_base_cachealign();
- void test_MoirQueue_HP_member_cachealign();
- void test_MoirQueue_DHP_base();
- void test_MoirQueue_DHP_member();
- void test_MoirQueue_DHP_base_ic();
- void test_MoirQueue_DHP_member_ic();
- void test_MoirQueue_DHP_base_stat();
- void test_MoirQueue_DHP_member_stat();
- void test_MoirQueue_DHP_base_align();
- void test_MoirQueue_DHP_member_align();
- void test_MoirQueue_DHP_base_noalign();
- void test_MoirQueue_DHP_member_noalign();
- void test_MoirQueue_DHP_base_cachealign();
- void test_MoirQueue_DHP_member_cachealign();
-
- void test_OptimisticQueue_HP_default();
- void test_OptimisticQueue_HP_default_ic();
- void test_OptimisticQueue_HP_default_stat();
- void test_OptimisticQueue_HP_base();
- void test_OptimisticQueue_HP_member();
- void test_OptimisticQueue_HP_base_ic();
- void test_OptimisticQueue_HP_member_ic();
- void test_OptimisticQueue_HP_base_stat();
- void test_OptimisticQueue_HP_member_stat();
- void test_OptimisticQueue_HP_base_align();
- void test_OptimisticQueue_HP_member_align();
- void test_OptimisticQueue_HP_base_noalign();
- void test_OptimisticQueue_HP_member_noalign();
- void test_OptimisticQueue_HP_base_cachealign();
- void test_OptimisticQueue_HP_member_cachealign();
- void test_OptimisticQueue_DHP_base();
- void test_OptimisticQueue_DHP_member();
- void test_OptimisticQueue_DHP_base_ic();
- void test_OptimisticQueue_DHP_member_ic();
- void test_OptimisticQueue_DHP_base_stat();
- void test_OptimisticQueue_DHP_member_stat();
- void test_OptimisticQueue_DHP_base_align();
- void test_OptimisticQueue_DHP_member_align();
- void test_OptimisticQueue_DHP_base_noalign();
- void test_OptimisticQueue_DHP_member_noalign();
- void test_OptimisticQueue_DHP_base_cachealign();
- void test_OptimisticQueue_DHP_member_cachealign();
-
- void test_BasketQueue_HP_default();
- void test_BasketQueue_HP_default_ic();
- void test_BasketQueue_HP_default_stat();
- void test_BasketQueue_HP_base();
- void test_BasketQueue_HP_member();
- void test_BasketQueue_HP_base_ic();
- void test_BasketQueue_HP_member_ic();
- void test_BasketQueue_HP_base_stat();
- void test_BasketQueue_HP_member_stat();
- void test_BasketQueue_HP_base_align();
- void test_BasketQueue_HP_member_align();
- void test_BasketQueue_HP_base_noalign();
- void test_BasketQueue_HP_member_noalign();
- void test_BasketQueue_HP_base_cachealign();
- void test_BasketQueue_HP_member_cachealign();
- void test_BasketQueue_DHP_base();
- void test_BasketQueue_DHP_member();
- void test_BasketQueue_DHP_base_ic();
- void test_BasketQueue_DHP_member_ic();
- void test_BasketQueue_DHP_base_stat();
- void test_BasketQueue_DHP_member_stat();
- void test_BasketQueue_DHP_base_align();
- void test_BasketQueue_DHP_member_align();
- void test_BasketQueue_DHP_base_noalign();
- void test_BasketQueue_DHP_member_noalign();
- void test_BasketQueue_DHP_base_cachealign();
- void test_BasketQueue_DHP_member_cachealign();
-
- void test_TsigasCycleQueue_static();
- void test_TsigasCycleQueue_static_ic();
- void test_TsigasCycleQueue_dyn();
- void test_TsigasCycleQueue_dyn_ic();
-
- void test_VyukovMPMCCycleQueue_static();
- void test_VyukovMPMCCycleQueue_static_ic();
- void test_VyukovMPMCCycleQueue_dyn();
- void test_VyukovMPMCCycleQueue_dyn_ic();
-
- CPPUNIT_TEST_SUITE(IntrusiveQueueHeaderTest)
- CPPUNIT_TEST(test_MSQueue_HP_default)
- CPPUNIT_TEST(test_MSQueue_HP_default_ic)
- CPPUNIT_TEST(test_MSQueue_HP_default_stat)
- CPPUNIT_TEST(test_MSQueue_HP_base)
- CPPUNIT_TEST(test_MSQueue_HP_member)
- CPPUNIT_TEST(test_MSQueue_HP_base_ic)
- CPPUNIT_TEST(test_MSQueue_HP_member_ic)
- CPPUNIT_TEST(test_MSQueue_HP_base_stat)
- CPPUNIT_TEST(test_MSQueue_HP_member_stat)
- CPPUNIT_TEST(test_MSQueue_HP_base_align)
- CPPUNIT_TEST(test_MSQueue_HP_member_align)
- CPPUNIT_TEST(test_MSQueue_HP_base_noalign)
- CPPUNIT_TEST(test_MSQueue_HP_member_noalign)
- CPPUNIT_TEST(test_MSQueue_HP_base_cachealign)
- CPPUNIT_TEST(test_MSQueue_HP_member_cachealign)
- CPPUNIT_TEST(test_MSQueue_DHP_base)
- CPPUNIT_TEST(test_MSQueue_DHP_member)
- CPPUNIT_TEST(test_MSQueue_DHP_base_ic)
- CPPUNIT_TEST(test_MSQueue_DHP_member_ic)
- CPPUNIT_TEST(test_MSQueue_DHP_base_stat)
- CPPUNIT_TEST(test_MSQueue_DHP_member_stat)
- CPPUNIT_TEST(test_MSQueue_DHP_base_align)
- CPPUNIT_TEST(test_MSQueue_DHP_member_align)
- CPPUNIT_TEST(test_MSQueue_DHP_base_noalign)
- CPPUNIT_TEST(test_MSQueue_DHP_member_noalign)
- CPPUNIT_TEST(test_MSQueue_DHP_base_cachealign)
- CPPUNIT_TEST(test_MSQueue_DHP_member_cachealign)
-
- CPPUNIT_TEST(test_MoirQueue_HP_default)
- CPPUNIT_TEST(test_MoirQueue_HP_default_ic)
- CPPUNIT_TEST(test_MoirQueue_HP_default_stat)
- CPPUNIT_TEST(test_MoirQueue_HP_base)
- CPPUNIT_TEST(test_MoirQueue_HP_member)
- CPPUNIT_TEST(test_MoirQueue_HP_base_ic)
- CPPUNIT_TEST(test_MoirQueue_HP_member_ic)
- CPPUNIT_TEST(test_MoirQueue_HP_base_stat)
- CPPUNIT_TEST(test_MoirQueue_HP_member_stat)
- CPPUNIT_TEST(test_MoirQueue_HP_base_align)
- CPPUNIT_TEST(test_MoirQueue_HP_member_align)
- CPPUNIT_TEST(test_MoirQueue_HP_base_noalign)
- CPPUNIT_TEST(test_MoirQueue_HP_member_noalign)
- CPPUNIT_TEST(test_MoirQueue_HP_base_cachealign)
- CPPUNIT_TEST(test_MoirQueue_HP_member_cachealign)
- CPPUNIT_TEST(test_MoirQueue_DHP_base)
- CPPUNIT_TEST(test_MoirQueue_DHP_member)
- CPPUNIT_TEST(test_MoirQueue_DHP_base_ic)
- CPPUNIT_TEST(test_MoirQueue_DHP_member_ic)
- CPPUNIT_TEST(test_MoirQueue_DHP_base_stat)
- CPPUNIT_TEST(test_MoirQueue_DHP_member_stat)
- CPPUNIT_TEST(test_MoirQueue_DHP_base_align)
- CPPUNIT_TEST(test_MoirQueue_DHP_member_align)
- CPPUNIT_TEST(test_MoirQueue_DHP_base_noalign)
- CPPUNIT_TEST(test_MoirQueue_DHP_member_noalign)
- CPPUNIT_TEST(test_MoirQueue_DHP_base_cachealign)
- CPPUNIT_TEST(test_MoirQueue_DHP_member_cachealign)
-
- CPPUNIT_TEST(test_OptimisticQueue_HP_default)
- CPPUNIT_TEST(test_OptimisticQueue_HP_default_ic)
- CPPUNIT_TEST(test_OptimisticQueue_HP_default_stat)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base_ic)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member_ic)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base_stat)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member_stat)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base_align)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member_align)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base_noalign)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member_noalign)
- CPPUNIT_TEST(test_OptimisticQueue_HP_base_cachealign)
- CPPUNIT_TEST(test_OptimisticQueue_HP_member_cachealign)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base_ic)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member_ic)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base_stat)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member_stat)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base_align)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member_align)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base_noalign)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member_noalign)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_base_cachealign)
- CPPUNIT_TEST(test_OptimisticQueue_DHP_member_cachealign)
-
- CPPUNIT_TEST(test_BasketQueue_HP_default)
- CPPUNIT_TEST(test_BasketQueue_HP_default_ic)
- CPPUNIT_TEST(test_BasketQueue_HP_default_stat)
- CPPUNIT_TEST(test_BasketQueue_HP_base)
- CPPUNIT_TEST(test_BasketQueue_HP_member)
- CPPUNIT_TEST(test_BasketQueue_HP_base_ic)
- CPPUNIT_TEST(test_BasketQueue_HP_member_ic)
- CPPUNIT_TEST(test_BasketQueue_HP_base_stat)
- CPPUNIT_TEST(test_BasketQueue_HP_member_stat)
- CPPUNIT_TEST(test_BasketQueue_HP_base_align)
- CPPUNIT_TEST(test_BasketQueue_HP_member_align)
- CPPUNIT_TEST(test_BasketQueue_HP_base_noalign)
- CPPUNIT_TEST(test_BasketQueue_HP_member_noalign)
- CPPUNIT_TEST(test_BasketQueue_HP_base_cachealign)
- CPPUNIT_TEST(test_BasketQueue_HP_member_cachealign)
- CPPUNIT_TEST(test_BasketQueue_DHP_base)
- CPPUNIT_TEST(test_BasketQueue_DHP_member)
- CPPUNIT_TEST(test_BasketQueue_DHP_base_ic)
- CPPUNIT_TEST(test_BasketQueue_DHP_member_ic)
- CPPUNIT_TEST(test_BasketQueue_DHP_base_stat)
- CPPUNIT_TEST(test_BasketQueue_DHP_member_stat)
- CPPUNIT_TEST(test_BasketQueue_DHP_base_align)
- CPPUNIT_TEST(test_BasketQueue_DHP_member_align)
- CPPUNIT_TEST(test_BasketQueue_DHP_base_noalign)
- CPPUNIT_TEST(test_BasketQueue_DHP_member_noalign)
- CPPUNIT_TEST(test_BasketQueue_DHP_base_cachealign)
- CPPUNIT_TEST(test_BasketQueue_DHP_member_cachealign)
-
- CPPUNIT_TEST(test_TsigasCycleQueue_static)
- CPPUNIT_TEST(test_TsigasCycleQueue_static_ic)
- CPPUNIT_TEST(test_TsigasCycleQueue_dyn)
- CPPUNIT_TEST(test_TsigasCycleQueue_dyn_ic)
-
- CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static);
- CPPUNIT_TEST(test_VyukovMPMCCycleQueue_static_ic);
- CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn);
- CPPUNIT_TEST(test_VyukovMPMCCycleQueue_dyn_ic);
-
- CPPUNIT_TEST_SUITE_END()
- };
-} // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_INTRSUSIVE_MSQUEUE_H
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/msqueue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::DHP > > base_item_type;
- typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::DHP > > member_item_type;
-
- // DHP base hook
- typedef ci::MSQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_DHP_base;
-
- // DHP member hook
- typedef ci::MSQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_DHP_member;
-
- /// DHP base hook + item counter
- typedef ci::MSQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , co::item_counter< cds::atomicity::item_counter >
- , co::memory_model< co::v::relaxed_ordering >
- >::type
- > MSQueue_DHP_base_ic;
-
- // DHP member hook + item counter
- typedef ci::MSQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::item_counter< cds::atomicity::item_counter >
- >::type
- > MSQueue_DHP_member_ic;
-
- // DHP base hook + stat
- typedef ci::MSQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::stat< ci::msqueue::stat<> >
- >::type
- > MSQueue_DHP_base_stat;
-
- // DHP member hook + stat
- typedef ci::MSQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::stat< ci::msqueue::stat<> >
- >::type
- > MSQueue_DHP_member_stat;
-
- // DHP base hook + padding
- typedef ci::MSQueue< cds::gc::DHP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- , co::padding< 32 >
- >::type
- > MSQueue_DHP_base_align;
-
- // DHP member hook + padding
- typedef ci::MSQueue< cds::gc::DHP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- , co::padding< 32 >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_DHP_member_align;
-
- // DHP base hook + no padding
- struct traits_MSQueue_DHP_base_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::DHP> > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MSQueue< cds::gc::DHP, base_item_type, traits_MSQueue_DHP_base_noalign > MSQueue_DHP_base_noalign;
-
- // DHP member hook + no padding
- struct traits_MSQueue_DHP_member_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::member_hook <
- offsetof( member_item_type, hMember ),
- ci::opt::gc < cds::gc::DHP >
- > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MSQueue< cds::gc::DHP, member_item_type, traits_MSQueue_DHP_member_noalign > MSQueue_DHP_member_noalign;
-
-
- // DHP base hook + cache padding
- struct traits_MSQueue_DHP_base_cachealign : public traits_MSQueue_DHP_base_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MSQueue< cds::gc::DHP, base_item_type, traits_MSQueue_DHP_base_cachealign > MSQueue_DHP_base_cachealign;
-
- // DHP member hook + cache padding
- struct traits_MSQueue_DHP_member_cachealign : public traits_MSQueue_DHP_member_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MSQueue< cds::gc::DHP, member_item_type, traits_MSQueue_DHP_member_cachealign > MSQueue_DHP_member_cachealign;
- } // namespace
-
- TEST(MSQueue_DHP_base)
- TEST(MSQueue_DHP_member)
- TEST(MSQueue_DHP_base_ic)
- TEST(MSQueue_DHP_member_ic)
- TEST(MSQueue_DHP_base_stat)
- TEST(MSQueue_DHP_member_stat)
- TEST(MSQueue_DHP_base_align)
- TEST(MSQueue_DHP_member_align)
- TEST(MSQueue_DHP_base_noalign)
- TEST(MSQueue_DHP_member_noalign)
- TEST(MSQueue_DHP_base_cachealign)
- TEST(MSQueue_DHP_member_cachealign)
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-
-#include <cds/intrusive/msqueue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- typedef IntrusiveQueueHeaderTest::base_hook_item< ci::msqueue::node<cds::gc::HP > > base_item_type;
- typedef IntrusiveQueueHeaderTest::member_hook_item< ci::msqueue::node<cds::gc::HP > > member_item_type;
-
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_HP_default;
-
- /// HP + item counter
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::sequential_consistent >
- >::type
- > MSQueue_HP_default_ic;
-
- /// HP + stat
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MSQueue_HP_default_stat;
-
- // HP base hook
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_HP_base;
-
- // HP member hook
- typedef ci::MSQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_HP_member;
-
- /// HP base hook + item counter
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > MSQueue_HP_base_ic;
-
- // HP member hook + item counter
- typedef ci::MSQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > MSQueue_HP_member_ic;
-
- // HP base hook + stat
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MSQueue_HP_base_stat;
-
- // HP member hook + stat
- typedef ci::MSQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::msqueue::stat<> >
- >::type
- > MSQueue_HP_member_stat;
-
- // HP base hook + padding
- typedef ci::MSQueue< cds::gc::HP, base_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< 32 >
- >::type
- > MSQueue_HP_base_align;
-
- // HP member hook + padding
- typedef ci::MSQueue< cds::gc::HP, member_item_type,
- typename ci::msqueue::make_traits<
- ci::opt::hook<
- ci::msqueue::member_hook<
- offsetof( member_item_type, hMember ),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > MSQueue_HP_member_align;
-
- // HP base hook + no padding
- struct traits_MSQueue_HP_base_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::base_hook< ci::opt::gc<cds::gc::HP> > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_noalign > MSQueue_HP_base_noalign;
-
- // HP member hook + no padding
- struct traits_MSQueue_HP_member_noalign : public ci::msqueue::traits {
- typedef ci::msqueue::member_hook <
- offsetof( member_item_type, hMember ),
- ci::opt::gc < cds::gc::HP >
- > hook;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- enum { padding = co::no_special_padding };
- };
- typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_noalign > MSQueue_HP_member_noalign;
-
-
- // HP base hook + cache padding
- struct traits_MSQueue_HP_base_cachealign : public traits_MSQueue_HP_base_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MSQueue< cds::gc::HP, base_item_type, traits_MSQueue_HP_base_cachealign > MSQueue_HP_base_cachealign;
-
- // HP member hook + cache padding
- struct traits_MSQueue_HP_member_cachealign : public traits_MSQueue_HP_member_noalign
- {
- enum { padding = co::cache_line_padding };
- };
- typedef ci::MSQueue< cds::gc::HP, member_item_type, traits_MSQueue_HP_member_cachealign > MSQueue_HP_member_cachealign;
-
- }
-
- TEST(MSQueue_HP_default)
- TEST(MSQueue_HP_default_ic)
- TEST(MSQueue_HP_default_stat)
- TEST(MSQueue_HP_base)
- TEST(MSQueue_HP_member)
- TEST(MSQueue_HP_base_ic)
- TEST(MSQueue_HP_member_ic)
- TEST(MSQueue_HP_base_stat)
- TEST(MSQueue_HP_member_stat)
- TEST(MSQueue_HP_base_align)
- TEST(MSQueue_HP_member_align)
- TEST(MSQueue_HP_base_noalign)
- TEST(MSQueue_HP_member_noalign)
- TEST(MSQueue_HP_base_cachealign)
- TEST(MSQueue_HP_member_cachealign)
-}
-
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/dhp.h>
-#include <cds/intrusive/optimistic_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- struct base_hook_item: public ci::optimistic_queue::node< cds::gc::DHP >
- {
- int nVal;
- int nDisposeCount;
-
- base_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- struct member_hook_item
- {
- int nVal;
- int nDisposeCount;
- ci::optimistic_queue::node< cds::gc::DHP > hMember;
-
- member_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- // DHP base hook
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > OptimisticQueue_DHP_base;
-
- // DHP member hook
- struct traits_OptimisticQueue_DHP_member : public OptimisticQueue_DHP_base::traits
- {
- typedef ci::optimistic_queue::member_hook <
- offsetof( member_hook_item, hMember ),
- ci::opt::gc < cds::gc::DHP >
- > hook;
- };
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item, traits_OptimisticQueue_DHP_member > OptimisticQueue_DHP_member;
-
- /// DHP base hook + item counter
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > OptimisticQueue_DHP_base_ic;
-
- // DHP member hook + item counter
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- cds::opt::type_traits< traits_OptimisticQueue_DHP_member >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > OptimisticQueue_DHP_member_ic;
-
- // DHP base hook + stat
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::optimistic_queue::stat<> >
- >::type
- > OptimisticQueue_DHP_base_stat;
-
- // DHP member hook + stat
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- cds::opt::type_traits< OptimisticQueue_DHP_base_stat::traits >
- , ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- >::type
- > OptimisticQueue_DHP_member_stat;
-
- // DHP base hook + padding
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::padding< 32 >
- >::type
- > OptimisticQueue_DHP_base_align;
-
- // DHP member hook + padding
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_DHP_member_align;
-
- // DHP base hook + no padding
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::padding< co::no_special_padding >
- >::type
- > OptimisticQueue_DHP_base_noalign;
-
- // DHP member hook + no padding
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< co::no_special_padding >
- >::type
- > OptimisticQueue_DHP_member_noalign;
-
-
- // DHP base hook + cache padding
- typedef ci::OptimisticQueue< cds::gc::DHP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::DHP> >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_DHP_base_cachealign;
-
- // DHP member hook + cache padding
- typedef ci::OptimisticQueue< cds::gc::DHP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::DHP>
- >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_DHP_member_cachealign;
- }
-
- TEST(OptimisticQueue_DHP_base)
- TEST(OptimisticQueue_DHP_member)
- TEST(OptimisticQueue_DHP_base_ic)
- TEST(OptimisticQueue_DHP_member_ic)
- TEST(OptimisticQueue_DHP_base_stat)
- TEST(OptimisticQueue_DHP_member_stat)
- TEST(OptimisticQueue_DHP_base_align)
- TEST(OptimisticQueue_DHP_member_align)
- TEST(OptimisticQueue_DHP_base_noalign)
- TEST(OptimisticQueue_DHP_member_noalign)
- TEST(OptimisticQueue_DHP_base_cachealign)
- TEST(OptimisticQueue_DHP_member_cachealign)
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/gc/hp.h>
-#include <cds/intrusive/optimistic_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test<X>(); }
-
- namespace {
- struct base_hook_item: public ci::optimistic_queue::node< cds::gc::HP >
- {
- int nVal;
- int nDisposeCount;
-
- base_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- struct member_hook_item
- {
- int nVal;
- int nDisposeCount;
- ci::optimistic_queue::node< cds::gc::HP > hMember;
-
- member_hook_item()
- : nDisposeCount(0)
- {}
- };
-
- struct traits_OptimisticQueue_HP_default : public ci::optimistic_queue::traits
- {
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- };
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default > OptimisticQueue_HP_default;
-
- /// HP + item counter
- struct traits_OptimisticQueue_HP_default_ic : public traits_OptimisticQueue_HP_default
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_ic > OptimisticQueue_HP_default_ic;
-
- /// HP + stat
- struct traits_OptimisticQueue_HP_default_stat : public
- ci::optimistic_queue::make_traits <
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::stat< ci::optimistic_queue::stat<> >
- , co::memory_model< co::v::sequential_consistent >
- > ::type
- {};
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item, traits_OptimisticQueue_HP_default_stat > OptimisticQueue_HP_default_stat;
-
- // HP base hook
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::memory_model< co::v::relaxed_ordering >
- >::type
- > OptimisticQueue_HP_base;
-
- // HP member hook
- struct traits_OptimisticQueue_HP_member : public OptimisticQueue_HP_base::traits
- {
- typedef ci::optimistic_queue::member_hook <
- offsetof( member_hook_item, hMember ),
- ci::opt::gc < cds::gc::HP >
- > hook;
- };
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item, traits_OptimisticQueue_HP_member > OptimisticQueue_HP_member;
-
- /// HP base hook + item counter
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > OptimisticQueue_HP_base_ic;
-
- // HP member hook + item counter
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- cds::opt::type_traits< traits_OptimisticQueue_HP_member >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- > OptimisticQueue_HP_member_ic;
-
- // HP base hook + stat
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::stat< ci::optimistic_queue::stat<> >
- >::type
- > OptimisticQueue_HP_base_stat;
-
- // HP member hook + stat
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- cds::opt::type_traits< OptimisticQueue_HP_base_stat::traits >
- , ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- >::type
- > OptimisticQueue_HP_member_stat;
-
- // HP base hook + padding
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< 32 >
- >::type
- > OptimisticQueue_HP_base_align;
-
- // HP member hook + padding
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< 32 >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_HP_member_align;
-
- // HP base hook + no padding
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::padding< co::no_special_padding >
- >::type
- > OptimisticQueue_HP_base_noalign;
-
- // HP member hook + no padding
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< co::no_special_padding >
- >::type
- > OptimisticQueue_HP_member_noalign;
-
-
- // HP base hook + cache padding
- typedef ci::OptimisticQueue< cds::gc::HP, base_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::base_hook< ci::opt::gc<cds::gc::HP> >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_HP_base_cachealign;
-
- // HP member hook + cache padding
- typedef ci::OptimisticQueue< cds::gc::HP, member_hook_item,
- typename ci::optimistic_queue::make_traits<
- ci::opt::hook<
- ci::optimistic_queue::member_hook<
- offsetof(member_hook_item, hMember),
- ci::opt::gc<cds::gc::HP>
- >
- >
- ,co::padding< co::cache_line_padding >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > OptimisticQueue_HP_member_cachealign;
- }
-
- TEST(OptimisticQueue_HP_default)
- TEST(OptimisticQueue_HP_default_ic)
- TEST(OptimisticQueue_HP_default_stat)
- TEST(OptimisticQueue_HP_base)
- TEST(OptimisticQueue_HP_member)
- TEST(OptimisticQueue_HP_base_ic)
- TEST(OptimisticQueue_HP_member_ic)
- TEST(OptimisticQueue_HP_base_stat)
- TEST(OptimisticQueue_HP_member_stat)
- TEST(OptimisticQueue_HP_base_align)
- TEST(OptimisticQueue_HP_member_align)
- TEST(OptimisticQueue_HP_base_noalign)
- TEST(OptimisticQueue_HP_member_noalign)
- TEST(OptimisticQueue_HP_base_cachealign)
- TEST(OptimisticQueue_HP_member_cachealign)
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
-#define CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-#include "size_check.h"
-
-namespace queue {
-
- class HdrIntrusiveSegmentedQueue : public CppUnitMini::TestCase
- {
- struct item {
- int nValue;
-
- size_t nDisposeCount;
- size_t nDispose2Count;
-
- item()
- : nValue( 0 )
- , nDisposeCount( 0 )
- , nDispose2Count( 0 )
- {}
-
- item( int nVal )
- : nValue( nVal )
- , nDisposeCount( 0 )
- , nDispose2Count( 0 )
- {}
- };
-
- struct big_item : public item
- {
- big_item()
- {}
-
- big_item( int nVal )
- : item( nVal )
- {}
-
- int arr[80];
- };
-
- struct Disposer
- {
- void operator()( item * p )
- {
- ++p->nDisposeCount;
- }
- };
-
- struct Disposer2
- {
- void operator()( item * p )
- {
- ++p->nDispose2Count;
- }
- };
-
- template <typename Queue>
- void test()
- {
- for ( size_t nQuasiFactor = 2; nQuasiFactor <= 256; ++nQuasiFactor ) {
- CPPUNIT_MSG( "QuasiFactor=" << nQuasiFactor << "..." );
- test_qf<Queue>( nQuasiFactor );
- }
- }
-
- template <typename Queue>
- void test_qf( size_t nQuasiFactor )
- {
- typedef typename Queue::value_type value_type;
-
- static size_t const c_nItemCount = 1000;
- value_type val[c_nItemCount];
- for ( int i = 0; i < static_cast<int>(sizeof(val)/sizeof(val[0])); ++i )
- val[i].nValue = i;
-
- {
- Queue q( nQuasiFactor );
- CPPUNIT_CHECK( q.quasi_factor() == cds::beans::ceil2(nQuasiFactor) );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
- CPPUNIT_CHECK( q.empty() );
-
- // push/enqueue
- for ( size_t i = 0; i < sizeof(val)/sizeof(val[0]); ++i ) {
- if ( i & 1 ) {
- CPPUNIT_ASSERT( q.push( val[i] ));
- }
- else {
- CPPUNIT_ASSERT( q.enqueue( val[i] ));
- }
-
- CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
- }
- CPPUNIT_CHECK( !q.empty() );
-
- // pop/dequeue
- size_t nCount = 0;
- while ( !q.empty() ) {
- value_type * pVal;
- if ( nCount & 1 )
- pVal = q.pop();
- else
- pVal = q.dequeue();
-
- CPPUNIT_ASSERT( pVal != nullptr );
-
- int nSegment = int( nCount / q.quasi_factor() );
- int nMin = nSegment * int(q.quasi_factor());
- int nMax = nMin + int(q.quasi_factor()) - 1;
- CPPUNIT_CHECK_EX( nMin <= pVal->nValue && pVal->nValue <= nMax, nMin << " <= " << pVal->nValue << " <= " << nMax );
-
- ++nCount;
- CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) - nCount ));
- }
- CPPUNIT_CHECK( nCount == sizeof(val)/sizeof(val[0]) );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
- // pop from empty queue
- CPPUNIT_ASSERT( q.pop() == nullptr );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
- // check if Disposer has not been called
- Queue::gc::force_dispose();
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0]) ); ++i ) {
- CPPUNIT_CHECK( val[i].nDisposeCount == 0 );
- CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
- }
-
- // Manually dispose the items
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
- Queue::gc::template retire<Disposer>( &(val[i]) );
-
- // check if Disposer has been called
- Queue::gc::force_dispose();
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
- CPPUNIT_CHECK( val[i].nDisposeCount == 1 );
- CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
- }
-
-
- // clear
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
- CPPUNIT_CHECK( q.push( val[i] ) );
- CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
- CPPUNIT_CHECK( !q.empty() );
-
- q.clear();
- CPPUNIT_CHECK( misc::check_size( q, 0));
- CPPUNIT_CHECK( q.empty() );
-
- // check if Disposer has been called
- Queue::gc::force_dispose();
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
- CPPUNIT_CHECK( val[i].nDisposeCount == 2 );
- CPPUNIT_CHECK( val[i].nDispose2Count == 0 );
- }
-
- // clear_with
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
- CPPUNIT_CHECK( q.push( val[i] ) );
- CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
- CPPUNIT_CHECK( !q.empty() );
-
- q.clear_with( Disposer2() );
- CPPUNIT_CHECK( misc::check_size( q, 0));
- CPPUNIT_CHECK( q.empty() );
-
- // check if Disposer has been called
- Queue::gc::force_dispose();
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
- CPPUNIT_CHECK( val[i].nDisposeCount == 2 );
- CPPUNIT_CHECK( val[i].nDispose2Count == 1 );
- }
-
- // check clear on destruct
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i )
- CPPUNIT_CHECK( q.push( val[i] ) );
- CPPUNIT_CHECK( misc::check_size( q, sizeof(val)/sizeof(val[0]) ));
- CPPUNIT_CHECK( !q.empty() );
- }
-
- // check if Disposer has been called
- Queue::gc::force_dispose();
- for ( int i = 0; i < static_cast<int>( sizeof(val)/sizeof(val[0])); ++i ) {
- CPPUNIT_CHECK( val[i].nDisposeCount == 3 );
- CPPUNIT_CHECK( val[i].nDispose2Count == 1 );
- }
- }
-
- void SegmQueue_HP();
- void SegmQueue_HP_mutex();
- void SegmQueue_HP_shuffle();
- void SegmQueue_HP_stat();
- void SegmQueue_HP_cacheline_padding();
- void SegmQueue_HP_mutex_cacheline_padding();
- void SegmQueue_HP_shuffle_cacheline_padding();
- void SegmQueue_HP_stat_cacheline_padding();
- void SegmQueue_HP_256_padding();
- void SegmQueue_HP_mutex_256_padding();
- void SegmQueue_HP_shuffle_256_padding();
- void SegmQueue_HP_stat_256_padding();
- void SegmQueue_HP_cacheline_padding_bigdata();
- void SegmQueue_HP_mutex_cacheline_padding_bigdata();
- void SegmQueue_HP_shuffle_cacheline_padding_bigdata();
- void SegmQueue_HP_stat_cacheline_padding_bigdata();
-
- void SegmQueue_DHP();
- void SegmQueue_DHP_mutex();
- void SegmQueue_DHP_shuffle();
- void SegmQueue_DHP_stat();
- void SegmQueue_DHP_cacheline_padding();
- void SegmQueue_DHP_mutex_cacheline_padding();
- void SegmQueue_DHP_shuffle_cacheline_padding();
- void SegmQueue_DHP_stat_cacheline_padding();
- void SegmQueue_DHP_256_padding();
- void SegmQueue_DHP_mutex_256_padding();
- void SegmQueue_DHP_shuffle_256_padding();
- void SegmQueue_DHP_stat_256_padding();
- void SegmQueue_DHP_cacheline_padding_bigdata();
- void SegmQueue_DHP_mutex_cacheline_padding_bigdata();
- void SegmQueue_DHP_shuffle_cacheline_padding_bigdata();
- void SegmQueue_DHP_stat_cacheline_padding_bigdata();
-
- CPPUNIT_TEST_SUITE(HdrIntrusiveSegmentedQueue)
- CPPUNIT_TEST( SegmQueue_HP )
- CPPUNIT_TEST( SegmQueue_HP_mutex )
- CPPUNIT_TEST( SegmQueue_HP_shuffle )
- CPPUNIT_TEST( SegmQueue_HP_stat )
- CPPUNIT_TEST( SegmQueue_HP_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_256_padding )
- CPPUNIT_TEST( SegmQueue_HP_mutex_256_padding )
- CPPUNIT_TEST( SegmQueue_HP_shuffle_256_padding )
- CPPUNIT_TEST( SegmQueue_HP_stat_256_padding )
- CPPUNIT_TEST( SegmQueue_HP_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding_bigdata )
-
- CPPUNIT_TEST( SegmQueue_DHP )
- CPPUNIT_TEST( SegmQueue_DHP_mutex )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle )
- CPPUNIT_TEST( SegmQueue_DHP_stat )
- CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_256_padding )
- CPPUNIT_TEST( SegmQueue_DHP_mutex_256_padding )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle_256_padding )
- CPPUNIT_TEST( SegmQueue_DHP_stat_256_padding )
- CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding_bigdata )
- CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding_bigdata )
- CPPUNIT_TEST_SUITE_END()
- };
-
-} // namespace queue
-
-#endif // CDSTEST_HDR_INTRUSIVE_SEGMENTED_QUEUE_H
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_segmented_queue.h"
-#include <cds/intrusive/segmented_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::lock_type < std::mutex >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_cacheline_padding()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = cds::opt::cache_line_padding };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< cds::opt::cache_line_padding >
- ,cds::opt::lock_type < std::mutex >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_256_padding()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = 256 };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_256_padding()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< 256 >
- ,cds::opt::lock_type < std::mutex >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_256_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- , cds::opt::padding< 256 >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_256_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- , cds::opt::padding< 256 >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_cacheline_padding_bigdata()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = cds::opt::cache_line_padding };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding_bigdata()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< cds::opt::cache_line_padding >
- ,cds::opt::lock_type < std::mutex >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding_bigdata()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding_bigdata()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, big_item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_segmented_queue.h"
-#include <cds/intrusive/segmented_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::lock_type < std::mutex >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_cacheline_padding()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = cds::opt::cache_line_padding };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::lock_type < std::mutex >
- ,cds::opt::padding< cds::opt::cache_line_padding >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::padding< cds::opt::cache_line_padding >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_cacheline_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< cds::opt::cache_line_padding >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_256_padding()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = 256 };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_256_padding()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::lock_type < std::mutex >
- ,cds::opt::padding< 256 >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_256_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::padding< 256 >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_256_padding()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< 256 >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_cacheline_padding_bigdata()
- {
- struct queue_traits : public cds::intrusive::segmented_queue::traits
- {
- typedef Disposer disposer;
- enum { padding = cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only };
- };
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding_bigdata()
- {
- struct queue_traits : public
- cds::intrusive::segmented_queue::make_traits <
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::lock_type < std::mutex >
- , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
- > ::type
- {};
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding_bigdata()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
- ,cds::opt::permutation_generator< cds::opt::v::random_shuffle_permutation<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrIntrusiveSegmentedQueue::SegmQueue_HP_stat_cacheline_padding_bigdata()
- {
- typedef cds::intrusive::SegmentedQueue< cds::gc::HP, big_item,
- cds::intrusive::segmented_queue::make_traits<
- cds::intrusive::opt::disposer< Disposer >
- , cds::opt::padding< cds::opt::cache_line_padding | cds::opt::padding_tiny_data_only >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- ,cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/tsigas_cycle_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test2<X>(); }
-
- namespace {
- struct item {
- int nVal;
- int nDisposeCount;
-
- item()
- : nDisposeCount(0)
- {}
- };
-
- struct traits_TsigasCycleQueue_static : public cds::intrusive::tsigas_queue::traits
- {
- typedef co::v::static_buffer< int, 1024 > buffer;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- typedef co::v::sequential_consistent memory_model;
- };
- typedef ci::TsigasCycleQueue< item, traits_TsigasCycleQueue_static > TsigasCycleQueue_static;
-
- struct traits_traits_TsigasCycleQueue_static_ic : public traits_TsigasCycleQueue_static
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef ci::TsigasCycleQueue< item, traits_traits_TsigasCycleQueue_static_ic > TsigasCycleQueue_static_ic;
-
- class TsigasCycleQueue_dyn
- : public ci::TsigasCycleQueue< item,
- typename ci::tsigas_queue::make_traits<
- co::buffer< co::v::dynamic_buffer< int > >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- >
- {
- typedef ci::TsigasCycleQueue< item,
- typename ci::tsigas_queue::make_traits<
- co::buffer< co::v::dynamic_buffer< int > >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- > base_class;
- public:
- TsigasCycleQueue_dyn()
- : base_class( 1024 )
- {}
- };
-
- class TsigasCycleQueue_dyn_ic
- : public ci::TsigasCycleQueue< item,
- typename ci::tsigas_queue::make_traits<
- co::buffer< co::v::dynamic_buffer< int > >
- ,ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- ,co::item_counter< cds::atomicity::item_counter >
- >::type
- >
- {
- typedef ci::TsigasCycleQueue< item,
- typename ci::tsigas_queue::make_traits<
- co::buffer< co::v::dynamic_buffer< int > >
- , ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::item_counter< cds::atomicity::item_counter >
- >::type
- > base_class;
- public:
- TsigasCycleQueue_dyn_ic()
- : base_class( 1024 )
- {}
- };
- }
-
- TEST(TsigasCycleQueue_static)
- TEST(TsigasCycleQueue_static_ic)
- TEST(TsigasCycleQueue_dyn)
- TEST(TsigasCycleQueue_dyn_ic)
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
-
-namespace queue {
-
-#define TEST(X) void IntrusiveQueueHeaderTest::test_##X() { test2<X>(); }
-
- namespace {
- struct item {
- int nVal;
- int nDisposeCount;
-
- item()
- : nDisposeCount(0)
- {}
- };
-
- struct traits_VyukovMPMCCycleQueue_static : public ci::vyukov_queue::traits
- {
- typedef co::v::static_buffer< int, 1024 > buffer;
- typedef IntrusiveQueueHeaderTest::faked_disposer disposer;
- typedef co::v::sequential_consistent memory_model;
- };
- typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_static > VyukovMPMCCycleQueue_static;
-
- struct traits_VyukovMPMCCycleQueue_static_ic : public traits_VyukovMPMCCycleQueue_static
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_static_ic > VyukovMPMCCycleQueue_static_ic;
-
- struct traits_VyukovMPMCCycleQueue_dyn :
- public ci::vyukov_queue::make_traits <
- co::buffer< co::v::dynamic_buffer< int > >,
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- >::type
- {};
- class VyukovMPMCCycleQueue_dyn
- : public ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn >
- {
- typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn > base_class;
-
- public:
- VyukovMPMCCycleQueue_dyn()
- : base_class( 1024 )
- {}
- };
-
- struct traits_VyukovMPMCCycleQueue_dyn_ic :
- public ci::vyukov_queue::make_traits <
- ci::opt::disposer< IntrusiveQueueHeaderTest::faked_disposer >
- , co::item_counter< cds::atomicity::item_counter >
- >::type
- {};
- class VyukovMPMCCycleQueue_dyn_ic
- : public ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn_ic >
- {
- typedef ci::VyukovMPMCCycleQueue< item, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
- public:
- VyukovMPMCCycleQueue_dyn_ic()
- : base_class( 1024 )
- {}
- };
- }
-
- TEST(VyukovMPMCCycleQueue_static)
- TEST(VyukovMPMCCycleQueue_static_ic)
- TEST(VyukovMPMCCycleQueue_dyn)
- TEST(VyukovMPMCCycleQueue_dyn_ic)
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/moir_queue.h>
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::MoirQueue_DHP()
- {
- typedef cds::container::MoirQueue< cds::gc::DHP, int > test_queue;
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_Counted()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_relax()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_Counted_relax()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_seqcst()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_Counted_seqcst()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_relax_align()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 16 >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_Counted_relax_align()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 32 >
- >::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_seqcst_align()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding < cds::opt::no_special_padding >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_DHP_Counted_seqcst_align()
- {
- typedef cds::container::MoirQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding < cds::opt::cache_line_padding >
- > ::type
- > test_queue;
- test_ic< test_queue >();
- }
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/moir_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::MoirQueue_HP()
- {
- typedef cds::container::MoirQueue< cds::gc::HP, int > test_queue;
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_Counted()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_relax()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_Counted_relax()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_seqcst()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_Counted_seqcst()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_relax_align()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 16 >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_Counted_relax_align()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 32 >
- >::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_seqcst_align()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding < cds::opt::no_special_padding >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MoirQueue_HP_Counted_seqcst_align()
- {
- typedef cds::container::MoirQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding < cds::opt::cache_line_padding >
- > ::type
- > test_queue;
- test_ic< test_queue >();
- }
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/dhp.h>
-#include <cds/container/msqueue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::MSQueue_DHP()
- {
- typedef cds::container::MSQueue< cds::gc::DHP, int > test_queue;
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_Counted()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_relax()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_Counted_relax()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_seqcst()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_Counted_seqcst()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_relax_align()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 16 >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_Counted_relax_align()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 32 >
- >::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_seqcst_align()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding < cds::opt::no_special_padding >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_DHP_Counted_seqcst_align()
- {
- typedef cds::container::MSQueue < cds::gc::DHP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding < cds::opt::cache_line_padding >
- > ::type
- > test_queue;
- test_ic< test_queue >();
- }
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/gc/hp.h>
-#include <cds/container/msqueue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::MSQueue_HP()
- {
- typedef cds::container::MSQueue< cds::gc::HP, int > test_queue;
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_Counted()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_relax()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_Counted_relax()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::relaxed_ordering >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_seqcst()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_Counted_seqcst()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model < cds::opt::v::sequential_consistent >
- > ::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_relax_align()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 16 >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_Counted_relax_align()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- , cds::opt::padding < 32 >
- >::type
- > test_queue;
-
- test_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_seqcst_align()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding < cds::opt::no_special_padding >
- > ::type
- > test_queue;
-
- test_no_ic< test_queue >();
- }
-
- void HdrTestQueue::MSQueue_HP_Counted_seqcst_align()
- {
- typedef cds::container::MSQueue < cds::gc::HP, int,
- typename cds::container::msqueue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::memory_model< cds::opt::v::sequential_consistent>
- , cds::opt::padding < cds::opt::cache_line_padding >
- > ::type
- > test_queue;
- test_ic< test_queue >();
- }
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/container/optimistic_queue.h>
-#include <cds/gc/dhp.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::OptimisticQueue_DHP()
- {
- test_no_ic<cds::container::OptimisticQueue< cds::gc::DHP, int > >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_Counted()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- test_ic<cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_relax()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::opt::v::relaxed_ordering memory_model;
- };
- test_no_ic<cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_Counted_relax()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::relaxed_ordering memory_model;
- };
- test_ic <
- cds::container::OptimisticQueue< cds::gc::DHP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_seqcst()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_Counted_seqcst()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_relax_align()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 16 >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_Counted_relax_align()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 32 >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_seqcst_align()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::no_special_padding >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_DHP_Counted_seqcst_align()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::DHP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- >
- >();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/container/optimistic_queue.h>
-#include <cds/gc/hp.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
-
- void HdrTestQueue::OptimisticQueue_HP()
- {
- test_no_ic<cds::container::OptimisticQueue< cds::gc::HP, int > >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_Counted()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- test_ic<cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_relax()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::opt::v::relaxed_ordering memory_model;
- };
- test_no_ic<cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_Counted_relax()
- {
- struct queue_traits : public cds::container::optimistic_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::relaxed_ordering memory_model;
- };
- test_ic <
- cds::container::OptimisticQueue< cds::gc::HP, int, queue_traits > >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_seqcst()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_Counted_seqcst()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_relax_align()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 16 >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_Counted_relax_align()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::relaxed_ordering>
- ,cds::opt::padding< 32 >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_seqcst_align()
- {
- test_no_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::no_special_padding >
- >::type
- >
- >();
- }
-
- void HdrTestQueue::OptimisticQueue_HP_Counted_seqcst_align()
- {
- test_ic<
- cds::container::OptimisticQueue< cds::gc::HP, int,
- typename cds::container::optimistic_queue::make_traits<
- cds::opt::item_counter< cds::atomicity::item_counter >
- ,cds::opt::memory_model< cds::opt::v::sequential_consistent>
- ,cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- >
- >();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CDSTEST_HDR_QUEUE_H
-#define CDSTEST_HDR_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/details/defs.h>
-
-namespace queue {
-
- //
- // Test queue operation in single thread mode
- //
- class HdrTestQueue: public CppUnitMini::TestCase
- {
- protected:
- template <class Queue>
- void test_no_ic()
- {
- Queue q;
- test_with( q );
- test_emplace( q );
- }
-
- template <class Queue>
- void test_with( Queue& q )
- {
- int it;
- int nPrev;
-
- // push/pop
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.enqueue( 1 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push( 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 ) ; // no queue's item counter!
-#endif
-
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ) );
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.dequeue( it ) );
- CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.empty() );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue( it ) );
- CPPUNIT_ASSERT( it == nPrev ) ; // it must not be changed!
- }
-
- // push_with/pop_with
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.enqueue_with( []( int& dest ) { dest = 1; } ));
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push_with( []( int& dest ) { dest = 10; } ));
- CPPUNIT_ASSERT( !q.empty() );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 ); // no queue's item counter!
-#endif
-
- it = -1;
- CPPUNIT_ASSERT( q.pop_with( [&it]( int src ) { it = src; } ));
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.dequeue_with( [&it]( int src ) { it = src; } ));
- CPPUNIT_ASSERT( it == 10 );
-#ifndef _DEBUG
- CPPUNIT_ASSERT( q.size() == 0 );
-#endif
- CPPUNIT_ASSERT( q.empty() );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue_with( [&it]( int src ) { it = src; } ));
- CPPUNIT_ASSERT( it == nPrev ); // it must not be changed!
- }
- }
-
- template <class Queue>
- void test_emplace( Queue& q )
- {
- int it;
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.emplace( static_cast<int>( i * 42 )) );
- CPPUNIT_ASSERT( !q.empty() );
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ));
- CPPUNIT_ASSERT( it == static_cast<int>( i * 42 ));
- CPPUNIT_ASSERT( q.empty() );
- }
- }
-
- template <class Queue>
- void test_ic()
- {
- Queue q;
- test_ic_with( q );
- test_emplace_ic( q );
- }
-
- template <class Queue>
- void testFCQueue()
- {
- Queue q;
- test_ic_with( q );
- }
-
- template <class Queue>
- void test_ic_with( Queue& q )
- {
- int it;
- int nPrev;
-
- // push/pop
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.enqueue( 1 ) );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.push( 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 2 );
-
- it = -1;
- CPPUNIT_ASSERT( q.pop( it ) );
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.dequeue( it ) );
- CPPUNIT_ASSERT( it == 10 );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue( it ) );
- CPPUNIT_ASSERT( it == nPrev ) ; // it must not be changed!
-
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- }
-
- // push_with/pop_with
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.enqueue_with( []( int& dest ) { dest = 1; } ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.push_with( []( int& dest ) { dest = 10; } ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 2 );
-
- it = -1;
- CPPUNIT_ASSERT( q.pop_with( [&it]( int src ) { it = src; } ) );
- CPPUNIT_ASSERT( it == 1 );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.dequeue_with( [&it]( int src ) { it = src; } ) );
- CPPUNIT_ASSERT( it == 10 );
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.empty() );
- it += 2009;
- nPrev = it;
- CPPUNIT_ASSERT( !q.dequeue_with( [&it]( int src ) { it = src; } ) );
- CPPUNIT_ASSERT( it == nPrev ); // it must not be changed!
-
- CPPUNIT_ASSERT( q.size() == 0 );
- CPPUNIT_ASSERT( q.empty() );
- }
- }
-
- template <class Queue>
- void test_emplace_ic( Queue& q )
- {
- int it = 0;
- for ( size_t i = 0; i < 3; ++i ) {
- CPPUNIT_ASSERT( q.emplace( (int) i * 10 ) );
- CPPUNIT_ASSERT( !q.empty() );
- CPPUNIT_ASSERT( q.size() == 1 );
- CPPUNIT_ASSERT( q.pop( it ));
- CPPUNIT_ASSERT( it == (int) i * 10 );
- CPPUNIT_ASSERT( q.empty() );
- CPPUNIT_ASSERT( q.size() == 0 );
- }
- }
-
- template <class Queue>
- void test_bounded_no_ic()
- {
- Queue q;
- test_with( q );
- test_emplace( q );
-
- CPPUNIT_ASSERT( q.empty() );
- size_t nCapacity = q.capacity();
- for ( size_t i = 0; i < nCapacity; ++i ) {
- CPPUNIT_CHECK_EX( q.push( static_cast<int>(i) ), "capacity=" << nCapacity << ", i=" << i );
- }
- // The queue is full
- CPPUNIT_CHECK( !q.empty() );
- CPPUNIT_ASSERT( !q.push_with( [nCapacity]( int& itm ) { itm = static_cast<int>(nCapacity); } ) );
- int n = -1;
- CPPUNIT_CHECK( q.pop(n) );
- CPPUNIT_CHECK( n == 0 );
- CPPUNIT_ASSERT( q.push( static_cast<int>(nCapacity) ) );
- CPPUNIT_ASSERT( !q.push( static_cast<int>(nCapacity) ) );
- }
-
- template <class Queue>
- void test_bounded_ic()
- {
- Queue q;
- test_ic_with( q );
- test_emplace_ic( q );
-
- CPPUNIT_ASSERT( q.empty() );
- size_t nCapacity = q.capacity();
- for ( size_t i = 0; i < nCapacity; ++i ) {
- CPPUNIT_CHECK_EX( q.push( static_cast<int>(i) ), "capacity=" << nCapacity << ", i=" << i );
- }
- // The queue is full
- CPPUNIT_CHECK( !q.empty() );
- CPPUNIT_CHECK( q.size() == nCapacity );
- CPPUNIT_ASSERT( !q.push_with( [nCapacity]( int& itm ) { itm = static_cast<int>(nCapacity); } ));
- int n = -1;
- CPPUNIT_CHECK( q.pop( n ) );
- CPPUNIT_CHECK( n == 0 );
- CPPUNIT_ASSERT( q.push( static_cast<int>(nCapacity) ) );
- CPPUNIT_CHECK( q.size() == nCapacity );
- CPPUNIT_ASSERT( !q.push( static_cast<int>(nCapacity) ) );
- CPPUNIT_CHECK( q.size() == nCapacity );
- }
-
- public:
- void MSQueue_HP();
- void MSQueue_HP_relax();
- void MSQueue_HP_seqcst();
- void MSQueue_HP_relax_align();
- void MSQueue_HP_seqcst_align();
- void MSQueue_HP_Counted();
- void MSQueue_HP_Counted_relax();
- void MSQueue_HP_Counted_seqcst();
- void MSQueue_HP_Counted_relax_align();
- void MSQueue_HP_Counted_seqcst_align();
-
- void MSQueue_DHP();
- void MSQueue_DHP_relax();
- void MSQueue_DHP_seqcst();
- void MSQueue_DHP_relax_align();
- void MSQueue_DHP_seqcst_align();
- void MSQueue_DHP_Counted();
- void MSQueue_DHP_Counted_relax();
- void MSQueue_DHP_Counted_seqcst();
- void MSQueue_DHP_Counted_relax_align();
- void MSQueue_DHP_Counted_seqcst_align();
-
- void MoirQueue_HP();
- void MoirQueue_HP_relax();
- void MoirQueue_HP_seqcst();
- void MoirQueue_HP_relax_align();
- void MoirQueue_HP_seqcst_align();
- void MoirQueue_HP_Counted();
- void MoirQueue_HP_Counted_relax();
- void MoirQueue_HP_Counted_seqcst();
- void MoirQueue_HP_Counted_relax_align();
- void MoirQueue_HP_Counted_seqcst_align();
-
- void MoirQueue_DHP();
- void MoirQueue_DHP_relax();
- void MoirQueue_DHP_seqcst();
- void MoirQueue_DHP_relax_align();
- void MoirQueue_DHP_seqcst_align();
- void MoirQueue_DHP_Counted();
- void MoirQueue_DHP_Counted_relax();
- void MoirQueue_DHP_Counted_seqcst();
- void MoirQueue_DHP_Counted_relax_align();
- void MoirQueue_DHP_Counted_seqcst_align();
-
- void OptimisticQueue_HP();
- void OptimisticQueue_HP_relax();
- void OptimisticQueue_HP_seqcst();
- void OptimisticQueue_HP_relax_align();
- void OptimisticQueue_HP_seqcst_align();
- void OptimisticQueue_HP_Counted();
- void OptimisticQueue_HP_Counted_relax();
- void OptimisticQueue_HP_Counted_seqcst();
- void OptimisticQueue_HP_Counted_relax_align();
- void OptimisticQueue_HP_Counted_seqcst_align();
-
- void OptimisticQueue_DHP();
- void OptimisticQueue_DHP_relax();
- void OptimisticQueue_DHP_seqcst();
- void OptimisticQueue_DHP_relax_align();
- void OptimisticQueue_DHP_seqcst_align();
- void OptimisticQueue_DHP_Counted();
- void OptimisticQueue_DHP_Counted_relax();
- void OptimisticQueue_DHP_Counted_seqcst();
- void OptimisticQueue_DHP_Counted_relax_align();
- void OptimisticQueue_DHP_Counted_seqcst_align();
-
- void BasketQueue_HP();
- void BasketQueue_HP_relax();
- void BasketQueue_HP_seqcst();
- void BasketQueue_HP_relax_align();
- void BasketQueue_HP_seqcst_align();
- void BasketQueue_HP_Counted();
- void BasketQueue_HP_Counted_relax();
- void BasketQueue_HP_Counted_seqcst();
- void BasketQueue_HP_Counted_relax_align();
- void BasketQueue_HP_Counted_seqcst_align();
-
- void BasketQueue_DHP();
- void BasketQueue_DHP_relax();
- void BasketQueue_DHP_seqcst();
- void BasketQueue_DHP_relax_align();
- void BasketQueue_DHP_seqcst_align();
- void BasketQueue_DHP_Counted();
- void BasketQueue_DHP_Counted_relax();
- void BasketQueue_DHP_Counted_seqcst();
- void BasketQueue_DHP_Counted_relax_align();
- void BasketQueue_DHP_Counted_seqcst_align();
-
- void RWQueue_default();
- void RWQueue_mutex();
- void RWQueue_ic();
- void RWQueue_ic_mutex();
- void RWQueue_padding();
-
- void TsigasCycleQueue_static();
- void TsigasCycleQueue_static_ic();
- void TsigasCycleQueue_dyn();
- void TsigasCycleQueue_dyn_ic();
-
- void VyukovMPMCCycleQueue_static();
- void VyukovMPMCCycleQueue_static_ic();
- void VyukovMPMCCycleQueue_dyn();
- void VyukovMPMCCycleQueue_dyn_ic();
-
- CPPUNIT_TEST_SUITE( HdrTestQueue )
- CPPUNIT_TEST(MSQueue_HP);
- CPPUNIT_TEST(MSQueue_HP_relax);
- CPPUNIT_TEST(MSQueue_HP_seqcst);
- CPPUNIT_TEST(MSQueue_HP_relax_align);
- CPPUNIT_TEST(MSQueue_HP_seqcst_align);
- CPPUNIT_TEST(MSQueue_HP_Counted);
- CPPUNIT_TEST(MSQueue_HP_Counted_relax);
- CPPUNIT_TEST(MSQueue_HP_Counted_seqcst);
- CPPUNIT_TEST(MSQueue_HP_Counted_relax_align);
- CPPUNIT_TEST(MSQueue_HP_Counted_seqcst_align);
-
- CPPUNIT_TEST(MSQueue_DHP);
- CPPUNIT_TEST(MSQueue_DHP_relax);
- CPPUNIT_TEST(MSQueue_DHP_seqcst);
- CPPUNIT_TEST(MSQueue_DHP_relax_align);
- CPPUNIT_TEST(MSQueue_DHP_seqcst_align);
- CPPUNIT_TEST(MSQueue_DHP_Counted);
- CPPUNIT_TEST(MSQueue_DHP_Counted_relax);
- CPPUNIT_TEST(MSQueue_DHP_Counted_seqcst);
- CPPUNIT_TEST(MSQueue_DHP_Counted_relax_align);
- CPPUNIT_TEST(MSQueue_DHP_Counted_seqcst_align);
-
- CPPUNIT_TEST(MoirQueue_HP);
- CPPUNIT_TEST(MoirQueue_HP_relax);
- CPPUNIT_TEST(MoirQueue_HP_seqcst);
- CPPUNIT_TEST(MoirQueue_HP_relax_align);
- CPPUNIT_TEST(MoirQueue_HP_seqcst_align);
- CPPUNIT_TEST(MoirQueue_HP_Counted);
- CPPUNIT_TEST(MoirQueue_HP_Counted_relax);
- CPPUNIT_TEST(MoirQueue_HP_Counted_seqcst);
- CPPUNIT_TEST(MoirQueue_HP_Counted_relax_align);
- CPPUNIT_TEST(MoirQueue_HP_Counted_seqcst_align);
-
- CPPUNIT_TEST(MoirQueue_DHP);
- CPPUNIT_TEST(MoirQueue_DHP_relax);
- CPPUNIT_TEST(MoirQueue_DHP_seqcst);
- CPPUNIT_TEST(MoirQueue_DHP_relax_align);
- CPPUNIT_TEST(MoirQueue_DHP_seqcst_align);
- CPPUNIT_TEST(MoirQueue_DHP_Counted);
- CPPUNIT_TEST(MoirQueue_DHP_Counted_relax);
- CPPUNIT_TEST(MoirQueue_DHP_Counted_seqcst);
- CPPUNIT_TEST(MoirQueue_DHP_Counted_relax_align);
- CPPUNIT_TEST(MoirQueue_DHP_Counted_seqcst_align);
-
- CPPUNIT_TEST(OptimisticQueue_HP);
- CPPUNIT_TEST(OptimisticQueue_HP_relax);
- CPPUNIT_TEST(OptimisticQueue_HP_seqcst);
- CPPUNIT_TEST(OptimisticQueue_HP_relax_align);
- CPPUNIT_TEST(OptimisticQueue_HP_seqcst_align);
- CPPUNIT_TEST(OptimisticQueue_HP_Counted);
- CPPUNIT_TEST(OptimisticQueue_HP_Counted_relax);
- CPPUNIT_TEST(OptimisticQueue_HP_Counted_seqcst);
- CPPUNIT_TEST(OptimisticQueue_HP_Counted_relax_align);
- CPPUNIT_TEST(OptimisticQueue_HP_Counted_seqcst_align);
-
- CPPUNIT_TEST(OptimisticQueue_DHP);
- CPPUNIT_TEST(OptimisticQueue_DHP_relax);
- CPPUNIT_TEST(OptimisticQueue_DHP_seqcst);
- CPPUNIT_TEST(OptimisticQueue_DHP_relax_align);
- CPPUNIT_TEST(OptimisticQueue_DHP_seqcst_align);
- CPPUNIT_TEST(OptimisticQueue_DHP_Counted);
- CPPUNIT_TEST(OptimisticQueue_DHP_Counted_relax);
- CPPUNIT_TEST(OptimisticQueue_DHP_Counted_seqcst);
- CPPUNIT_TEST(OptimisticQueue_DHP_Counted_relax_align);
- CPPUNIT_TEST(OptimisticQueue_DHP_Counted_seqcst_align);
-
- CPPUNIT_TEST(BasketQueue_HP);
- CPPUNIT_TEST(BasketQueue_HP_relax);
- CPPUNIT_TEST(BasketQueue_HP_seqcst);
- CPPUNIT_TEST(BasketQueue_HP_relax_align);
- CPPUNIT_TEST(BasketQueue_HP_seqcst_align);
- CPPUNIT_TEST(BasketQueue_HP_Counted);
- CPPUNIT_TEST(BasketQueue_HP_Counted_relax);
- CPPUNIT_TEST(BasketQueue_HP_Counted_seqcst);
- CPPUNIT_TEST(BasketQueue_HP_Counted_relax_align);
- CPPUNIT_TEST(BasketQueue_HP_Counted_seqcst_align);
-
- CPPUNIT_TEST(BasketQueue_DHP);
- CPPUNIT_TEST(BasketQueue_DHP_relax);
- CPPUNIT_TEST(BasketQueue_DHP_seqcst);
- CPPUNIT_TEST(BasketQueue_DHP_relax_align);
- CPPUNIT_TEST(BasketQueue_DHP_seqcst_align);
- CPPUNIT_TEST(BasketQueue_DHP_Counted);
- CPPUNIT_TEST(BasketQueue_DHP_Counted_relax);
- CPPUNIT_TEST(BasketQueue_DHP_Counted_seqcst);
- CPPUNIT_TEST(BasketQueue_DHP_Counted_relax_align);
- CPPUNIT_TEST(BasketQueue_DHP_Counted_seqcst_align);
-
- CPPUNIT_TEST( TsigasCycleQueue_static )
- CPPUNIT_TEST( TsigasCycleQueue_static_ic )
- CPPUNIT_TEST( TsigasCycleQueue_dyn )
- CPPUNIT_TEST( TsigasCycleQueue_dyn_ic )
-
- CPPUNIT_TEST( VyukovMPMCCycleQueue_static )
- CPPUNIT_TEST( VyukovMPMCCycleQueue_static_ic )
- CPPUNIT_TEST( VyukovMPMCCycleQueue_dyn )
- CPPUNIT_TEST( VyukovMPMCCycleQueue_dyn_ic )
-
- CPPUNIT_TEST( RWQueue_default)
- CPPUNIT_TEST( RWQueue_mutex )
- CPPUNIT_TEST( RWQueue_ic )
- CPPUNIT_TEST( RWQueue_ic_mutex )
- CPPUNIT_TEST( RWQueue_padding )
-
- CPPUNIT_TEST_SUITE_END();
-
- };
-} // namespace queue
-
-#endif // #ifndef CDSTEST_HDR_QUEUE_H
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_intrusive_msqueue.h"
-#include "hdr_intrusive_segmented_queue.h"
-#include "hdr_queue.h"
-#include "hdr_fcqueue.h"
-#include "hdr_segmented_queue.h"
-
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrTestQueue, s_HdrTestQueue );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrFCQueue, s_Queue_TestHeader ); //TODO must be removed after refactoring
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrSegmentedQueue, s_HdrSegmentedQueue );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::IntrusiveQueueHeaderTest, s_IntrusiveQueueHeaderTest );
-CPPUNIT_TEST_SUITE_REGISTRATION_( queue::HdrIntrusiveSegmentedQueue, s_HdrIntrusiveSegmentedQueue );
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/container/rwqueue.h>
-#include <mutex>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
- void HdrTestQueue::RWQueue_default()
- {
- test_no_ic< cds::container::RWQueue< int > >();
- }
-
- void HdrTestQueue::RWQueue_mutex()
- {
- struct queue_traits : public cds::container::rwqueue::traits
- {
- typedef std::mutex lock_type;
- };
-
- test_no_ic< cds::container::RWQueue< int, queue_traits > >();
- }
-
- void HdrTestQueue::RWQueue_ic()
- {
- struct queue_traits : public cds::container::rwqueue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- };
-
- test_ic< cds::container::RWQueue< int, queue_traits > >();
- }
-
- void HdrTestQueue::RWQueue_ic_mutex()
- {
- struct queue_traits : public cds::container::rwqueue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef std::mutex lock_type;
- };
-
- test_ic< cds::container::RWQueue< int, queue_traits > >();
- }
-
- void HdrTestQueue::RWQueue_padding()
- {
- struct queue_traits : public cds::container::rwqueue::traits
- {
- enum { padding = 16 };
- };
-
- test_no_ic< cds::container::RWQueue< int, queue_traits > >();
- }
-
-}
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
-#define CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
-
-#include "cppunit/cppunit_proxy.h"
-#include <cds/intrusive/details/base.h>
-#include "size_check.h"
-
-namespace queue {
-
- class HdrSegmentedQueue: public CppUnitMini::TestCase
- {
- struct item {
- size_t nVal;
-
- item() {}
- item( size_t v ): nVal(v) {}
- item( size_t nMajor, size_t nMinor ): nVal( nMajor * 16 + nMinor ) {}
- };
-
- struct other_item {
- size_t nVal;
- };
-
- template <typename Queue>
- void test()
- {
- for ( size_t nQuasiFactor = 2; nQuasiFactor <= 256; ++nQuasiFactor ) {
- CPPUNIT_MSG( "QuasiFactor=" << nQuasiFactor << "..." );
- test_qf<Queue>( nQuasiFactor );
- }
- }
-
- template <typename Queue>
- void test_qf( size_t nQuasiFactor )
- {
- typedef typename Queue::value_type value_type;
-
- static size_t const c_nItemCount = 1000;
-
- {
- Queue q( nQuasiFactor );
- CPPUNIT_CHECK( q.quasi_factor() == cds::beans::ceil2(nQuasiFactor) );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
- // push/enqueue
- for ( size_t i = 0; i < c_nItemCount; ++i ) {
- if ( i & 1 ) {
- CPPUNIT_ASSERT( q.push(item(i)) );
- }
- else {
- CPPUNIT_ASSERT( q.enqueue(item(i)) );
- }
- CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
- CPPUNIT_CHECK( !q.empty() );
- }
-
- // pop/dequeue
- size_t nCount = 0;
- while ( !q.empty() ) {
- value_type v;
- if ( nCount & 1 ) {
- CPPUNIT_ASSERT( q.pop( v ) );
- }
- else {
- CPPUNIT_ASSERT( q.dequeue( v ));
- }
-
- int nSegment = int( nCount / q.quasi_factor() );
- int nMin = nSegment * int(q.quasi_factor());
- int nMax = nMin + int(q.quasi_factor()) - 1;
- CPPUNIT_CHECK_EX( nMin <= static_cast<int>(v.nVal) && static_cast<int>( v.nVal ) <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
- ++nCount;
- CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
- }
- CPPUNIT_CHECK( nCount == c_nItemCount );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
-
-
- // push/pop with functor
- for ( size_t i = 0; i < c_nItemCount; ++i ) {
- other_item itm;
- itm.nVal = i;
- if ( i & 1 ) {
- CPPUNIT_ASSERT( q.push_with( [&itm]( item& dest ) { dest.nVal = itm.nVal; } ));
- }
- else {
- CPPUNIT_ASSERT( q.enqueue_with( [&itm]( item& dest ) { dest.nVal = itm.nVal; } ));
- }
- CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
- CPPUNIT_CHECK( !q.empty() );
- }
-
- {
- other_item v;
-
- nCount = 0;
- size_t nFuncCount = 0;
- while ( !q.empty() ) {
- if ( nCount & 1 ) {
- CPPUNIT_ASSERT( q.pop_with( [&v, &nFuncCount]( item& src ) {v.nVal = src.nVal; ++nFuncCount; } ));
- }
- else {
- CPPUNIT_ASSERT( q.dequeue_with( [&v, &nFuncCount]( item& src ) {v.nVal = src.nVal; ++nFuncCount; } ));
- }
-
- // It is possible c_nItemCount % quasi_factor() != 0
- // In this case the segment cannot be calculated here
- size_t nMin = nCount > q.quasi_factor() ? nCount - q.quasi_factor() : 0;
- size_t nMax = nCount + q.quasi_factor();
- CPPUNIT_CHECK_EX( nMin <= v.nVal && v.nVal <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
- ++nCount;
- CPPUNIT_CHECK( nFuncCount == nCount );
- CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
- }
- CPPUNIT_CHECK( nCount == c_nItemCount );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
- }
-
- //emplace
- {
- size_t nMajor = 0;
- size_t nMinor = 0;
- for ( size_t i = 0; i < c_nItemCount; ++i ) {
- CPPUNIT_CHECK( q.emplace( nMajor, nMinor ));
- if ( nMinor == 15 ) {
- ++nMajor;
- nMinor = 0;
- }
- else
- ++nMinor;
- CPPUNIT_CHECK( !q.empty() );
- }
- CPPUNIT_CHECK( misc::check_size( q, c_nItemCount ));
-
- nCount = 0;
- while ( !q.empty() ) {
- value_type v;
- if ( nCount & 1 ) {
- CPPUNIT_ASSERT( q.pop( v ) );
- }
- else {
- CPPUNIT_ASSERT( q.dequeue( v ));
- }
-
- size_t nMin = nCount > q.quasi_factor() ? nCount - q.quasi_factor() : 0;
- size_t nMax = nCount + q.quasi_factor();
- CPPUNIT_CHECK_EX( nMin <= v.nVal && v.nVal <= nMax, nMin << " <= " << v.nVal << " <= " << nMax );
-
- ++nCount;
- CPPUNIT_CHECK( misc::check_size( q, c_nItemCount - nCount ));
- }
- CPPUNIT_CHECK( nCount == c_nItemCount );
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
- }
-
- // pop from empty queue
- {
- value_type v;
- v.nVal = c_nItemCount + 1;
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_ASSERT( !q.pop( v ));
- CPPUNIT_CHECK( q.empty() );
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
- CPPUNIT_CHECK( v.nVal == c_nItemCount + 1 );
- }
-
- // clear
- for ( size_t i = 0; i < c_nItemCount; ++i ) {
- if ( i & 1 ) {
- CPPUNIT_ASSERT( q.push(item(i)) );
- }
- else {
- CPPUNIT_ASSERT( q.enqueue(item(i)) );
- }
- CPPUNIT_CHECK( misc::check_size( q, i + 1 ));
- CPPUNIT_CHECK( !q.empty() );
- }
-
- q.clear();
- CPPUNIT_CHECK( misc::check_size( q, 0 ));
- CPPUNIT_CHECK( q.empty() );
- }
- }
-
- void SegmQueue_HP();
- void SegmQueue_HP_mutex();
- void SegmQueue_HP_shuffle();
- void SegmQueue_HP_stat();
- void SegmQueue_HP_cacheline_padding();
- void SegmQueue_HP_mutex_cacheline_padding();
- void SegmQueue_HP_shuffle_cacheline_padding();
- void SegmQueue_HP_stat_cacheline_padding();
-
- void SegmQueue_DHP();
- void SegmQueue_DHP_mutex();
- void SegmQueue_DHP_shuffle();
- void SegmQueue_DHP_stat();
- void SegmQueue_DHP_cacheline_padding();
- void SegmQueue_DHP_mutex_cacheline_padding();
- void SegmQueue_DHP_shuffle_cacheline_padding();
- void SegmQueue_DHP_stat_cacheline_padding();
-
- CPPUNIT_TEST_SUITE(HdrSegmentedQueue)
- CPPUNIT_TEST( SegmQueue_HP )
- CPPUNIT_TEST( SegmQueue_HP_mutex )
- CPPUNIT_TEST( SegmQueue_HP_shuffle )
- CPPUNIT_TEST( SegmQueue_HP_stat )
- CPPUNIT_TEST( SegmQueue_HP_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_mutex_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_shuffle_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_HP_stat_cacheline_padding )
-
- CPPUNIT_TEST( SegmQueue_DHP )
- CPPUNIT_TEST( SegmQueue_DHP_mutex )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle )
- CPPUNIT_TEST( SegmQueue_DHP_stat )
- CPPUNIT_TEST( SegmQueue_DHP_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_mutex_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_shuffle_cacheline_padding )
- CPPUNIT_TEST( SegmQueue_DHP_stat_cacheline_padding )
- CPPUNIT_TEST_SUITE_END()
-
- };
-} // namespace queue
-
-#endif //#ifndef CDSTEST_HDR_QUEUE_SEGMENTED_QUEUE_H
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_segmented_queue.h"
-#include <cds/container/segmented_queue.h>
-#include <cds/gc/dhp.h>
-
-namespace queue {
-
- void HdrSegmentedQueue::SegmQueue_DHP()
- {
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item > queue_type;
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_mutex()
- {
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
- cds::container::segmented_queue::make_traits<
- cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_shuffle()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
- };
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_stat()
- {
- struct queue_traits : public
- cds::container::segmented_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- , cds::opt::stat < cds::container::segmented_queue::stat<> >
- > ::type
- {};
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_cacheline_padding()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- enum { padding = cds::opt::cache_line_padding };
- };
-
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding()
- {
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
- cds::container::segmented_queue::make_traits<
- cds::opt::lock_type< std::mutex >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
- enum { padding = cds::opt::cache_line_padding };
- };
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding()
- {
- struct queue_traits : public
- cds::container::segmented_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- , cds::opt::stat < cds::container::segmented_queue::stat<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- > ::type
- {};
- typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_segmented_queue.h"
-#include <cds/container/segmented_queue.h>
-#include <cds/gc/hp.h>
-
-namespace queue {
-
- void HdrSegmentedQueue::SegmQueue_HP()
- {
- typedef cds::container::SegmentedQueue< cds::gc::HP, item > queue_type;
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_mutex()
- {
- typedef cds::container::SegmentedQueue< cds::gc::HP, item,
- cds::container::segmented_queue::make_traits<
- cds::opt::lock_type< std::mutex >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_shuffle()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
- };
- typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_stat()
- {
- struct queue_traits : public
- cds::container::segmented_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- , cds::opt::stat < cds::container::segmented_queue::stat<> >
- > ::type
- {};
- typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_cacheline_padding()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- enum { padding = cds::opt::cache_line_padding };
- };
-
- typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_mutex_cacheline_padding()
- {
- typedef cds::container::SegmentedQueue< cds::gc::HP, item,
- cds::container::segmented_queue::make_traits<
- cds::opt::lock_type< std::mutex >
- , cds::opt::padding< cds::opt::cache_line_padding >
- >::type
- > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_shuffle_cacheline_padding()
- {
- struct queue_traits : public cds::container::segmented_queue::traits
- {
- typedef cds::atomicity::item_counter item_counter;
- typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
- enum { padding = cds::opt::cache_line_padding };
- };
- typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
- void HdrSegmentedQueue::SegmQueue_HP_stat_cacheline_padding()
- {
- struct queue_traits : public
- cds::container::segmented_queue::make_traits <
- cds::opt::item_counter< cds::atomicity::item_counter >
- , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
- , cds::opt::stat < cds::container::segmented_queue::stat<> >
- , cds::opt::padding< cds::opt::cache_line_padding >
- > ::type
- {};
- typedef cds::container::SegmentedQueue< cds::gc::HP, item, queue_traits > queue_type;
-
- test<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "hdr_queue.h"
-#include <cds/container/tsigas_cycle_queue.h>
-
-namespace queue {
-
- void HdrTestQueue::TsigasCycleQueue_static()
- {
- struct queue_traits : public cds::container::tsigas_queue::traits
- {
- typedef cds::opt::v::static_buffer< int, 1024 > buffer;
- typedef cds::opt::v::sequential_consistent memory_model;
- };
- typedef cds::container::TsigasCycleQueue< int, queue_traits > queue_type;
-
- test_bounded_no_ic<queue_type>();
- }
-
- void HdrTestQueue::TsigasCycleQueue_static_ic()
- {
- struct queue_traits : public cds::container::tsigas_queue::traits
- {
- typedef cds::opt::v::static_buffer< int, 1024 > buffer;
- typedef cds::atomicity::item_counter item_counter;
- };
- typedef cds::container::TsigasCycleQueue< int, queue_traits > queue_type;
-
- test_bounded_ic<queue_type>();
- }
- void HdrTestQueue::TsigasCycleQueue_dyn()
- {
- class queue_type
- : public cds::container::TsigasCycleQueue< int,
- typename cds::container::tsigas_queue::make_traits<
- cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- >::type
- >
- {
- typedef cds::container::TsigasCycleQueue< int,
- typename cds::container::tsigas_queue::make_traits<
- cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- >::type
- > base_class;
- public:
- queue_type()
- : base_class( 1024 )
- {}
- };
-
- test_bounded_no_ic<queue_type>();
- }
- void HdrTestQueue::TsigasCycleQueue_dyn_ic()
- {
- class queue_type
- : public cds::container::TsigasCycleQueue< int,
- typename cds::container::tsigas_queue::make_traits<
- cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- , cds::opt::item_counter< cds::atomicity::item_counter >
- >::type
- >
- {
- typedef cds::container::TsigasCycleQueue< int,
- typename cds::container::tsigas_queue::make_traits<
- cds::opt::buffer< cds::opt::v::dynamic_buffer< int > >
- , cds::opt::item_counter< cds::atomicity::item_counter >
- >::type
- > base_class;
- public:
- queue_type()
- : base_class( 1024 )
- {}
- };
-
- test_bounded_ic<queue_type>();
- }
-
-} // namespace queue
+++ /dev/null
-/*
- This file is a part of libcds - Concurrent Data Structures library
-
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
-
- Source code repo: http://github.com/khizmax/libcds/
- Download: http://sourceforge.net/projects/libcds/files/
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <cds/container/vyukov_mpmc_cycle_queue.h>
-
-#include "queue/hdr_queue.h"
-
-namespace queue {
- namespace{
- struct traits_VyukovMPMCCyclicQueue_static : public cds::container::vyukov_queue::traits
- {
- typedef cds::opt::v::static_buffer<int, 1024> buffer;
- };
- struct traits_VyukovMPMCCyclicQueue_static_ic : public traits_VyukovMPMCCyclicQueue_static
- {
- typedef cds::atomicity::item_counter item_counter;
- };
- }
- void HdrTestQueue::VyukovMPMCCycleQueue_static()
- {
- typedef cds::container::VyukovMPMCCycleQueue< int, traits_VyukovMPMCCyclicQueue_static > queue_type;
-
- test_bounded_no_ic< queue_type >();
- }
-
- void HdrTestQueue::VyukovMPMCCycleQueue_static_ic()
- {
- typedef cds::container::VyukovMPMCCycleQueue< int, traits_VyukovMPMCCyclicQueue_static_ic > queue_type;
- test_bounded_ic< queue_type >();
- }
-
- void HdrTestQueue::VyukovMPMCCycleQueue_dyn()
- {
- class queue_type : public cds::container::VyukovMPMCCycleQueue < int >
- {
- typedef cds::container::VyukovMPMCCycleQueue < int > base_class;
- public:
- queue_type() : base_class( 1024 ) {}
- };
- test_bounded_no_ic< queue_type >();
- }
-
- void HdrTestQueue::VyukovMPMCCycleQueue_dyn_ic()
- {
- class queue_type :
- public cds::container::VyukovMPMCCycleQueue < int,
- typename cds::container::vyukov_queue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- >
- {
- typedef cds::container::VyukovMPMCCycleQueue < int,
- typename cds::container::vyukov_queue::make_traits <
- cds::opt::item_counter < cds::atomicity::item_counter >
- > ::type
- > base_class;
- public:
- queue_type() : base_class( 1024 ) {}
- };
- test_bounded_ic< queue_type >();
- }
-
-}