#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurablePersonNGTest test -pl mnemonic-core -DskipTests=false

# a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurablePersonRefBreakNGTest test -pl mnemonic-core -DskipTests=fal

# a testcase for module "mnemonic-core" that requires 'pmalloc' memory service to pass
mvn -Dtest=NonVolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false

# a testcase for module "mnemonic-core" that requires 'vmem' memory service to pass
mvn -Dtest=VolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false

# a testcase for module "mnemonic-core" that requires 'pmdk_vmem' memory service to pass
mvn -Dtest=PMDKVolatileMemAllocatorNGTest test -pl mnemonic-core -DskipTests=false

# a testcase for module "mnemonic-core" that requires 'vmem memory service to pass
mvn -Dtest=MemClusteringNGTest test -pl mnemonic-core -DskipTests=false

mvn -Dtest=ChunkBufferNGTest test -pl mnemonic-core -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableSinglyLinkedListNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableSinglyLinkedListWithParamHolderNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurablePersonNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableHashMapNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableHashSetNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableArrayNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-collection" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableTreeNGTest  test -pl mnemonic-collections -DskipTests=false

# a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableSinglyLinkedListNGPrintTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false

# a testcase for module "mnemonic-computing-services/mnemonic-utilities-service" that requires 'pmalloc' memory service to pass
mvn -Dtest=DurableSinglyLinkedListNGSortTest test -pl mnemonic-computing-services/mnemonic-utilities-service -DskipTests=false

# a testcase for module "mnemonic-hadoop/mnemonic-hadoop-mapreduce" that requires 'pmalloc' memory service to pass
mvn -Dtest=MneMapreducePersonDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false

mvn -Dtest=MneMapreduceLongDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false

mvn -Dtest=MneMapreduceBufferDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false

mvn -Dtest=MneMapreduceChunkDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false

# a testcase for module "mnemonic-hadoop/mnemonic-hadoop-mapreduce" that requires 'pmalloc' memory service to pass
mvn -Dtest=MneMapredBufferDataTest test -pl mnemonic-hadoop/mnemonic-hadoop-mapreduce -DskipTests=false

# a testcase for module "mnemonic-spark/mnemonic-spark-core" that requires 'pmalloc' memory service to pass
mvn -Dsuites=org.apache.mnemonic.spark.rdd.DurableRDDLongDataSpec test -pl mnemonic-spark/mnemonic-spark-core -DskipTests=false

mvn -Dsuites=org.apache.mnemonic.spark.rdd.DurableRDDChunkDataSpec test -pl mnemonic-spark/mnemonic-spark-core -DskipTests=false

mvn -Dsuites=org.apache.mnemonic.spark.rdd.DurableRDDPersonDataSpec test -pl mnemonic-spark/mnemonic-spark-core -DskipTests=false

mvn -Dsuites=org.apache.mnemonic.spark.rdd.DurableRDDBufferDataSpec test -pl mnemonic-spark/mnemonic-spark-core -DskipTests=false

mvn -Dsuites=org.apache.mnemonic.spark.DurableBufferIODataSpec test -pl mnemonic-spark/mnemonic-spark-core -DskipTests=false

# a testcase for module "mnemonic-memory-services"
mvn -Dtest=JavaVMemServiceImplNGTest test -pl mnemonic-memory-services/mnemonic-java-vmem-service -DskipTests=false
