From: "Verma, Shally" <Shally.Verma@cavium.com>
To: Pablo de Lara <pablo.de.lara.guarch@intel.com>,
"dev@dpdk.org" <dev@dpdk.org>
Cc: "fiona.trahe@intel.com" <fiona.trahe@intel.com>,
"lee.daly@intel.com" <lee.daly@intel.com>,
"ahmed.mansour@nxp.com" <ahmed.mansour@nxp.com>,
"Gupta, Ashish" <Ashish.Gupta@cavium.com>,
"Gupta, Ashish" <Ashish.Gupta@cavium.com>
Subject: Re: [dpdk-dev] [PATCH v4 1/5] test/compress: add initial unit tests
Date: Mon, 14 May 2018 08:29:03 +0000 [thread overview]
Message-ID: <CY4PR0701MB3634F4571ADCD15D4895763DF09C0@CY4PR0701MB3634.namprd07.prod.outlook.com> (raw)
In-Reply-To: <20180504102218.30672-2-pablo.de.lara.guarch@intel.com>
>-----Original Message-----
>From: Pablo de Lara [mailto:pablo.de.lara.guarch@intel.com]
>Sent: 04 May 2018 15:52
>To: dev@dpdk.org
>Cc: fiona.trahe@intel.com; lee.daly@intel.com; Verma, Shally <Shally.Verma@cavium.com>; ahmed.mansour@nxp.com; Gupta,
>Ashish <Ashish.Gupta@cavium.com>; Pablo de Lara <pablo.de.lara.guarch@intel.com>; Gupta, Ashish <Ashish.Gupta@cavium.com>;
>Verma, Shally <Shally.Verma@cavium.com>
>Subject: [PATCH v4 1/5] test/compress: add initial unit tests
>
>This commit introduces the initial tests for compressdev,
>performing basic compression and decompression operations
>of sample test buffers, using the Zlib library in one direction
>and compressdev in another direction, to make sure that
>the library is compatible with Zlib.
>
>Due to the use of Zlib API, the test is disabled by default,
>to avoid adding a new dependency on DPDK.
>
>Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
>Signed-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>
>Signed-off-by: Shally Verma <shally.verma@caviumnetworks.com>
>Acked-by: Lee Daly <lee.daly@intel.com>
>---
> config/common_base | 5 +
> test/test/Makefile | 9 +
> test/test/meson.build | 8 +
> test/test/test_compressdev.c | 725 +++++++++++++++++++++++
> test/test/test_compressdev_test_buffer.h | 295 +++++++++
> 5 files changed, 1042 insertions(+)
> create mode 100644 test/test/test_compressdev.c
> create mode 100644 test/test/test_compressdev_test_buffer.h
>
//snip
>+ * Compresses and decompresses buffer with compressdev API and Zlib API
>+ */
>+static int
>+test_deflate_comp_decomp(const char *test_buffer,
>+ struct rte_comp_xform *compress_xform,
>+ struct rte_comp_xform *decompress_xform,
>+ enum rte_comp_op_type state,
>+ enum zlib_direction zlib_dir)
>+{
>+ struct comp_testsuite_params *ts_params = &testsuite_params;
>+ int ret_status = -1;
>+ int ret;
>+ struct rte_mbuf *comp_buf = NULL;
>+ struct rte_mbuf *uncomp_buf = NULL;
>+ struct rte_comp_op *op = NULL;
>+ struct rte_comp_op *op_processed = NULL;
>+ void *priv_xform = NULL;
>+ uint16_t num_deqd;
>+ unsigned int deqd_retries = 0;
>+ char *data_ptr;
>+
>+ /* Prepare the source mbuf with the data */
>+ uncomp_buf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
>+ if (uncomp_buf == NULL) {
>+ RTE_LOG(ERR, USER1,
>+ "Source mbuf could not be allocated "
>+ "from the mempool\n");
>+ goto exit;
>+ }
>+
>+ data_ptr = rte_pktmbuf_append(uncomp_buf, strlen(test_buffer) + 1);
>+ snprintf(data_ptr, strlen(test_buffer) + 1, "%s", test_buffer);
>+
>+ /* Prepare the destination mbuf */
>+ comp_buf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
>+ if (comp_buf == NULL) {
>+ RTE_LOG(ERR, USER1,
>+ "Destination mbuf could not be allocated "
>+ "from the mempool\n");
>+ goto exit;
>+ }
>+
>+ rte_pktmbuf_append(comp_buf,
>+ strlen(test_buffer) * COMPRESS_BUF_SIZE_RATIO);
>+
>+ /* Build the compression operations */
>+ op = rte_comp_op_alloc(ts_params->op_pool);
>+ if (op == NULL) {
>+ RTE_LOG(ERR, USER1,
>+ "Compress operation could not be allocated "
>+ "from the mempool\n");
>+ goto exit;
>+ }
>+
>+ op->m_src = uncomp_buf;
>+ op->m_dst = comp_buf;
>+ op->src.offset = 0;
>+ op->src.length = rte_pktmbuf_pkt_len(uncomp_buf);
>+ op->dst.offset = 0;
>+ if (state == RTE_COMP_OP_STATELESS) {
>+ //TODO: FULL or FINAL?
>+ op->flush_flag = RTE_COMP_FLUSH_FINAL;
>+ } else {
>+ RTE_LOG(ERR, USER1,
>+ "Stateful operations are not supported "
>+ "in these tests yet\n");
>+ goto exit;
>+ }
>+ op->input_chksum = 0;
>+
>+ /* Compress data (either with Zlib API or compressdev API */
>+ if (zlib_dir == ZLIB_COMPRESS || zlib_dir == ZLIB_ALL) {
>+ ret = compress_zlib(op,
>+ (const struct rte_comp_xform *)&compress_xform,
[Shally] why are we passing ** here, compress_zlib() input rte_comp_xform*, this will cause a bug here. So, in call to decompress_zlib() below.
Thanks
Shally
>+ DEFAULT_MEM_LEVEL);
>+ if (ret < 0)
>+ goto exit;
>+
>+ op_processed = op;
>+ } else {
>+ /* Create compress xform private data */
>+ ret = rte_compressdev_private_xform_create(0,
>+ (const struct rte_comp_xform *)compress_xform,
>+ &priv_xform);
>+ if (ret < 0) {
>+ RTE_LOG(ERR, USER1,
>+ "Compression private xform "
>+ "could not be created\n");
>+ goto exit;
>+ }
>+
>+ /* Attach xform private data to operation */
>+ op->private_xform = priv_xform;
>+
>+ /* Enqueue and dequeue all operations */
>+ ret = rte_compressdev_enqueue_burst(0, 0, &op, 1);
>+ if (ret == 0) {
>+ RTE_LOG(ERR, USER1,
>+ "The operation could not be enqueued\n");
>+ goto exit;
>+ }
>+ do {
>+ /*
>+ * If retrying a dequeue call, wait for 10 ms to allow
>+ * enough time to the driver to process the operations
>+ */
>+ if (deqd_retries != 0) {
>+ /*
>+ * Avoid infinite loop if not all the
>+ * operations get out of the device
>+ */
>+ if (deqd_retries == MAX_DEQD_RETRIES) {
>+ RTE_LOG(ERR, USER1,
>+ "Not all operations could be "
>+ "dequeued\n");
>+ goto exit;
>+ }
>+ usleep(DEQUEUE_WAIT_TIME);
>+ }
>+ num_deqd = rte_compressdev_dequeue_burst(0, 0,
>+ &op_processed, 1);
>+
>+ deqd_retries++;
>+ } while (num_deqd < 1);
>+
>+ deqd_retries = 0;
>+
>+ /* Free compress private xform */
>+ rte_compressdev_private_xform_free(0, priv_xform);
>+ priv_xform = NULL;
>+ }
>+
>+ enum rte_comp_huffman huffman_type =
>+ compress_xform->compress.deflate.huffman;
>+ RTE_LOG(DEBUG, USER1, "Buffer compressed from %u to %u bytes "
>+ "(level = %u, huffman = %s)\n",
>+ op_processed->consumed, op_processed->produced,
>+ compress_xform->compress.level,
>+ huffman_type_strings[huffman_type]);
>+ RTE_LOG(DEBUG, USER1, "Compression ratio = %.2f",
>+ (float)op_processed->produced /
>+ op_processed->consumed * 100);
>+ op = NULL;
>+
>+ /*
>+ * Check operation status and free source mbuf (destination mbuf and
>+ * compress operation information is needed for the decompression stage)
>+ */
>+ if (op_processed->status != RTE_COMP_OP_STATUS_SUCCESS) {
>+ RTE_LOG(ERR, USER1,
>+ "Some operations were not successful\n");
>+ goto exit;
>+ }
>+ rte_pktmbuf_free(uncomp_buf);
>+ uncomp_buf = NULL;
>+
>+ /* Allocate buffer for decompressed data */
>+ uncomp_buf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
>+ if (uncomp_buf == NULL) {
>+ RTE_LOG(ERR, USER1,
>+ "Destination mbuf could not be allocated "
>+ "from the mempool\n");
>+ goto exit;
>+ }
>+
>+ rte_pktmbuf_append(uncomp_buf, strlen(test_buffer) + 1);
>+
>+ /* Build the decompression operations */
>+ op = rte_comp_op_alloc(ts_params->op_pool);
>+ if (op == NULL) {
>+ RTE_LOG(ERR, USER1,
>+ "Decompress operation could not be allocated "
>+ "from the mempool\n");
>+ goto exit;
>+ }
>+
>+ /* Source buffer is the compressed data from the previous operation */
>+ op->m_src = op_processed->m_dst;
>+ op->m_dst = uncomp_buf;
>+ op->src.offset = 0;
>+ /*
>+ * Set the length of the compressed data to the
>+ * number of bytes that were produced in the previous stage
>+ */
>+ op->src.length = op_processed->produced;
>+ op->dst.offset = 0;
>+ if (state == RTE_COMP_OP_STATELESS) {
>+ //TODO: FULL or FINAL?
>+ op->flush_flag = RTE_COMP_FLUSH_FINAL;
>+ } else {
>+ RTE_LOG(ERR, USER1,
>+ "Stateful operations are not supported "
>+ "in these tests yet\n");
>+ goto exit;
>+ }
>+ op->input_chksum = 0;
>+
>+ /*
>+ * Free the previous compress operation,
>+ * as it is not needed anymore
>+ */
>+ rte_comp_op_free(op_processed);
>+ op_processed = NULL;
>+
>+ /* Decompress data (either with Zlib API or compressdev API */
>+ if (zlib_dir == ZLIB_DECOMPRESS || zlib_dir == ZLIB_ALL) {
>+ ret = decompress_zlib(op,
>+ (const struct rte_comp_xform *)&decompress_xform);
>+ if (ret < 0)
>+ goto exit;
>+
>+ op_processed = op;
>+ } else {
>+ num_deqd = 0;
>+ /* Create decompress xform private data */
>+ ret = rte_compressdev_private_xform_create(0,
>+ (const struct rte_comp_xform *)decompress_xform,
>+ &priv_xform);
>+ if (ret < 0) {
>+ RTE_LOG(ERR, USER1,
>+ "Decompression private xform "
>+ "could not be created\n");
>+ goto exit;
>+ }
>+
>+ /* Attach xform private data to operation */
>+ op->private_xform = priv_xform;
>+
>+ /* Enqueue and dequeue all operations */
>+ ret = rte_compressdev_enqueue_burst(0, 0, &op, 1);
>+ if (ret == 0) {
>+ RTE_LOG(ERR, USER1,
>+ "The operation could not be enqueued\n");
>+ goto exit;
>+ }
>+ do {
>+ /*
>+ * If retrying a dequeue call, wait for 10 ms to allow
>+ * enough time to the driver to process the operations
>+ */
>+ if (deqd_retries != 0) {
>+ /*
>+ * Avoid infinite loop if not all the
>+ * operations get out of the device
>+ */
>+ if (deqd_retries == MAX_DEQD_RETRIES) {
>+ RTE_LOG(ERR, USER1,
>+ "Not all operations could be "
>+ "dequeued\n");
>+ goto exit;
>+ }
>+ usleep(DEQUEUE_WAIT_TIME);
>+ }
>+ num_deqd = rte_compressdev_dequeue_burst(0, 0,
>+ &op_processed, 1);
>+
>+ deqd_retries++;
>+ } while (num_deqd < 1);
>+ }
>+
>+ RTE_LOG(DEBUG, USER1, "Buffer decompressed from %u to %u bytes\n",
>+ op_processed->consumed, op_processed->produced);
>+ op = NULL;
>+ /*
>+ * Check operation status and free source mbuf (destination mbuf and
>+ * compress operation information is still needed)
>+ */
>+ if (op_processed->status != RTE_COMP_OP_STATUS_SUCCESS) {
>+ RTE_LOG(ERR, USER1,
>+ "Some operations were not successful\n");
>+ goto exit;
>+ }
>+ rte_pktmbuf_free(comp_buf);
>+ comp_buf = NULL;
>+
>+ /*
>+ * Compare the original stream with the decompressed stream
>+ * (in size and the data)
>+ */
>+ if (compare_buffers(test_buffer, strlen(test_buffer) + 1,
>+ rte_pktmbuf_mtod(op_processed->m_dst, const char *),
>+ op_processed->produced) < 0)
>+ goto exit;
>+
>+ ret_status = 0;
>+
>+exit:
>+ /* Free resources */
>+ rte_pktmbuf_free(uncomp_buf);
>+ rte_pktmbuf_free(comp_buf);
>+ rte_comp_op_free(op);
>+ rte_comp_op_free(op_processed);
>+
>+ if (priv_xform != NULL)
>+ rte_compressdev_private_xform_free(0, priv_xform);
>+
>+ return ret_status;
>+}
>+
>+static int
>+test_compressdev_deflate_stateless_fixed(void)
>+{
>+ struct comp_testsuite_params *ts_params = &testsuite_params;
>+ const char *test_buffer;
>+ uint16_t i;
>+ struct rte_comp_xform compress_xform;
>+
>+ memcpy(&compress_xform, &ts_params->def_comp_xform,
>+ sizeof(struct rte_comp_xform));
>+ compress_xform.compress.deflate.huffman = RTE_COMP_HUFFMAN_FIXED;
>+
>+ for (i = 0; i < RTE_DIM(compress_test_bufs); i++) {
>+ test_buffer = compress_test_bufs[i];
>+
>+ /* Compress with compressdev, decompress with Zlib */
>+ if (test_deflate_comp_decomp(test_buffer,
>+ &compress_xform,
>+ &ts_params->def_decomp_xform,
>+ RTE_COMP_OP_STATELESS,
>+ ZLIB_DECOMPRESS) < 0)
>+ return TEST_FAILED;
>+
>+ /* Compress with Zlib, decompress with compressdev */
>+ if (test_deflate_comp_decomp(test_buffer,
>+ &compress_xform,
>+ &ts_params->def_decomp_xform,
>+ RTE_COMP_OP_STATELESS,
>+ ZLIB_COMPRESS) < 0)
>+ return TEST_FAILED;
>+ }
>+
>+ return TEST_SUCCESS;
>+}
>+
>+static int
>+test_compressdev_deflate_stateless_dynamic(void)
>+{
>+ struct comp_testsuite_params *ts_params = &testsuite_params;
>+ const char *test_buffer;
>+ uint16_t i;
>+ struct rte_comp_xform compress_xform;
>+
>+ memcpy(&compress_xform, &ts_params->def_comp_xform,
>+ sizeof(struct rte_comp_xform));
>+ compress_xform.compress.deflate.huffman = RTE_COMP_HUFFMAN_DYNAMIC;
>+
>+ for (i = 0; i < RTE_DIM(compress_test_bufs); i++) {
>+ test_buffer = compress_test_bufs[i];
>+
>+ /* Compress with compressdev, decompress with Zlib */
>+ if (test_deflate_comp_decomp(test_buffer,
>+ &compress_xform,
>+ &ts_params->def_decomp_xform,
>+ RTE_COMP_OP_STATELESS,
>+ ZLIB_DECOMPRESS) < 0)
>+ return TEST_FAILED;
>+
>+ /* Compress with Zlib, decompress with compressdev */
>+ if (test_deflate_comp_decomp(test_buffer,
>+ &compress_xform,
>+ &ts_params->def_decomp_xform,
>+ RTE_COMP_OP_STATELESS,
>+ ZLIB_COMPRESS) < 0)
>+ return TEST_FAILED;
>+ }
>+
>+ return TEST_SUCCESS;
>+}
>+
>+static struct unit_test_suite compressdev_testsuite = {
>+ .suite_name = "compressdev unit test suite",
>+ .setup = testsuite_setup,
>+ .teardown = testsuite_teardown,
>+ .unit_test_cases = {
>+ TEST_CASE_ST(generic_ut_setup, generic_ut_teardown,
>+ test_compressdev_deflate_stateless_fixed),
>+ TEST_CASE_ST(generic_ut_setup, generic_ut_teardown,
>+ test_compressdev_deflate_stateless_dynamic),
>+ TEST_CASES_END() /**< NULL terminate unit test array */
>+ }
>+};
>+
>+static int
>+test_compressdev(void)
>+{
>+ return unit_test_suite_runner(&compressdev_testsuite);
>+}
>+
>+REGISTER_TEST_COMMAND(compressdev_autotest, test_compressdev);
>diff --git a/test/test/test_compressdev_test_buffer.h b/test/test/test_compressdev_test_buffer.h
>new file mode 100644
>index 000000000..c0492f89a
>--- /dev/null
>+++ b/test/test/test_compressdev_test_buffer.h
>@@ -0,0 +1,295 @@
>+#ifndef TEST_COMPRESSDEV_TEST_BUFFERS_H_
>+#define TEST_COMPRESSDEV_TEST_BUFFERS_H_
>+
>+/*
>+ * These test buffers are snippets obtained
>+ * from the Canterbury and Calgary Corpus
>+ * collection.
>+ */
>+
>+/* Snippet of Alice's Adventures in Wonderland */
>+static const char test_buf_alice[] =
>+ " Alice was beginning to get very tired of sitting by her sister\n"
>+ "on the bank, and of having nothing to do: once or twice she had\n"
>+ "peeped into the book her sister was reading, but it had no\n"
>+ "pictures or conversations in it, `and what is the use of a book,'\n"
>+ "thought Alice `without pictures or conversation?'\n\n"
>+ " So she was considering in her own mind (as well as she could,\n"
>+ "for the hot day made her feel very sleepy and stupid), whether\n"
>+ "the pleasure of making a daisy-chain would be worth the trouble\n"
>+ "of getting up and picking the daisies, when suddenly a White\n"
>+ "Rabbit with pink eyes ran close by her.\n\n"
>+ " There was nothing so VERY remarkable in that; nor did Alice\n"
>+ "think it so VERY much out of the way to hear the Rabbit say to\n"
>+ "itself, `Oh dear! Oh dear! I shall be late!' (when she thought\n"
>+ "it over afterwards, it occurred to her that she ought to have\n"
>+ "wondered at this, but at the time it all seemed quite natural);\n"
>+ "but when the Rabbit actually TOOK A WATCH OUT OF ITS WAISTCOAT-\n"
>+ "POCKET, and looked at it, and then hurried on, Alice started to\n"
>+ "her feet, for it flashed across her mind that she had never\n"
>+ "before seen a rabbit with either a waistcoat-pocket, or a watch to\n"
>+ "take out of it, and burning with curiosity, she ran across the\n"
>+ "field after it, and fortunately was just in time to see it pop\n"
>+ "down a large rabbit-hole under the hedge.\n\n"
>+ " In another moment down went Alice after it, never once\n"
>+ "considering how in the world she was to get out again.\n\n"
>+ " The rabbit-hole went straight on like a tunnel for some way,\n"
>+ "and then dipped suddenly down, so suddenly that Alice had not a\n"
>+ "moment to think about stopping herself before she found herself\n"
>+ "falling down a very deep well.\n\n"
>+ " Either the well was very deep, or she fell very slowly, for she\n"
>+ "had plenty of time as she went down to look about her and to\n"
>+ "wonder what was going to happen next. First, she tried to look\n"
>+ "down and make out what she was coming to, but it was too dark to\n"
>+ "see anything; then she looked at the sides of the well, and\n"
>+ "noticed that they were filled with cupboards and book-shelves;\n"
>+ "here and there she saw maps and pictures hung upon pegs. She\n"
>+ "took down a jar from one of the shelves as she passed; it was\n"
>+ "labelled `ORANGE MARMALADE', but to her great disappointment it\n"
>+ "was empty: she did not like to drop the jar for fear of killing\n"
>+ "somebody, so managed to put it into one of the cupboards as she\n"
>+ "fell past it.\n\n"
>+ " `Well!' thought Alice to herself, `after such a fall as this, I\n"
>+ "shall think nothing of tumbling down stairs! How brave they'll\n"
>+ "all think me at home! Why, I wouldn't say anything about it,\n"
>+ "even if I fell off the top of the house!' (Which was very likely\n"
>+ "true.)\n\n"
>+ " Down, down, down. Would the fall NEVER come to an end! `I\n"
>+ "wonder how many miles I've fallen by this time?' she said aloud.\n"
>+ "`I must be getting somewhere near the centre of the earth. Let\n"
>+ "me see: that would be four thousand miles down, I think--' (for,\n"
>+ "you see, Alice had learnt several things of this sort in her\n"
>+ "lessons in the schoolroom, and though this was not a VERY good\n"
>+ "opportunity for showing off her knowledge, as there was no one to\n"
>+ "listen to her, still it was good practice to say it over) `--yes,\n"
>+ "that's about the right distance--but then I wonder what Latitude\n"
>+ "or Longitude I've got to?' (Alice had no idea what Latitude was,\n"
>+ "or Longitude either, but thought they were nice grand words to\n"
>+ "say.)\n\n"
>+ " Presently she began again. `I wonder if I shall fall right\n"
>+ "THROUGH the earth! How funny it'll seem to come out among the\n"
>+ "people that walk with their heads downward! The Antipathies, I\n"
>+ "think--' (she was rather glad there WAS no one listening, this\n"
>+ "time, as it didn't sound at all the right word) `--but I shall\n"
>+ "have to ask them what the name of the country is, you know.\n"
>+ "Please, Ma'am, is this New Zealand or Australia?' (and she tried\n"
>+ "to curtsey as she spoke--fancy CURTSEYING as you're falling\n"
>+ "through the air! Do you think you could manage it?) `And what\n"
>+ "an ignorant little girl she'll think me for asking! No, it'll\n"
>+ "never do to ask: perhaps I shall see it written up somewhere.'\n"
>+ " Down, down, down. There was nothing else to do, so Alice soon\n"
>+ "began talking again. `Dinah'll miss me very much to-night, I\n"
>+ "should think!' (Dinah was the cat.) `I hope they'll remember\n"
>+ "her saucer of milk at tea-time. Dinah my dear! I wish you were\n"
>+ "down here with me! There are no mice in the air, I'm afraid, but\n"
>+ "you might catch a bat, and that's very like a mouse, you know.\n"
>+ "But do cats eat bats, I wonder?' And here Alice began to get\n"
>+ "rather sleepy, and went on saying to herself, in a dreamy sort of\n"
>+ "way, `Do cats eat bats? Do cats eat bats?' and sometimes, `Do\n"
>+ "bats eat cats?' for, you see, as she couldn't answer either\n"
>+ "question, it didn't much matter which way she put it. She felt\n"
>+ "that she was dozing off, and had just begun to dream that she\n"
>+ "was walking hand in hand with Dinah, and saying to her very\n"
>+ "earnestly, `Now, Dinah, tell me the truth: did you ever eat a\n"
>+ "bat?' when suddenly, thump! thump! down she came upon a heap of\n"
>+ "sticks and dry leaves, and the fall was over.\n\n";
>+
>+/* Snippet of Shakespeare play */
>+static const char test_buf_shakespeare[] =
>+ "CHARLES wrestler to Frederick.\n"
>+ "\n"
>+ "\n"
>+ "OLIVER |\n"
>+ " |\n"
>+ "JAQUES (JAQUES DE BOYS:) | sons of Sir Rowland de Boys.\n"
>+ " |\n"
>+ "ORLANDO |\n"
>+ "\n"
>+ "\n"
>+ "ADAM |\n"
>+ " | servants to Oliver.\n"
>+ "DENNIS |\n"
>+ "\n"
>+ "\n"
>+ "TOUCHSTONE a clown.\n"
>+ "\n"
>+ "SIR OLIVER MARTEXT a vicar.\n"
>+ "\n"
>+ "\n"
>+ "CORIN |\n"
>+ " | shepherds.\n"
>+ "SILVIUS |\n"
>+ "\n"
>+ "\n"
>+ "WILLIAM a country fellow in love with Audrey.\n"
>+ "\n"
>+ " A person representing HYMEN. (HYMEN:)\n"
>+ "\n"
>+ "ROSALIND daughter to the banished duke.\n"
>+ "\n"
>+ "CELIA daughter to Frederick.\n"
>+ "\n"
>+ "PHEBE a shepherdess.\n"
>+ "\n"
>+ "AUDREY a country wench.\n"
>+ "\n"
>+ " Lords, pages, and attendants, &c.\n"
>+ " (Forester:)\n"
>+ " (A Lord:)\n"
>+ " (First Lord:)\n"
>+ " (Second Lord:)\n"
>+ " (First Page:)\n"
>+ " (Second Page:)\n"
>+ "\n"
>+ "\n"
>+ "SCENE Oliver's house; Duke Frederick's court; and the\n"
>+ " Forest of Arden.\n"
>+ "\n"
>+ "\n"
>+ "\n"
>+ "\n"
>+ " AS YOU LIKE IT\n"
>+ "\n"
>+ "\n"
>+ "ACT I\n"
>+ "\n"
>+ "\n"
>+ "\n"
>+ "SCENE I Orchard of Oliver's house.\n"
>+ "\n"
>+ "\n"
>+ " [Enter ORLANDO and ADAM]\n"
>+ "\n"
>+ "ORLANDO As I remember, Adam, it was upon this fashion\n"
>+ " bequeathed me by will but poor a thousand crowns,\n"
>+ " and, as thou sayest, charged my brother, on his\n"
>+ " blessing, to breed me well: and there begins my\n"
>+ " sadness. My brother Jaques he keeps at school, and\n"
>+ " report speaks goldenly of his profit: for my part,\n"
>+ " he keeps me rustically at home, or, to speak more\n"
>+ " properly, stays me here at home unkept; for call you\n"
>+ " that keeping for a gentleman of my birth, that\n"
>+ " differs not from the stalling of an ox? His horses\n"
>+ " are bred better; for, besides that they are fair\n"
>+ " with their feeding, they are taught their manage,\n"
>+ " and to that end riders dearly hired: but I, his\n"
>+ " brother, gain nothing under him but growth; for the\n"
>+ " which his animals on his dunghills are as much\n"
>+ " bound to him as I. Besides this nothing that he so\n"
>+ " plentifully gives me, the something that nature gave\n"
>+ " me his countenance seems to take from me: he lets\n"
>+ " me feed with his hinds, bars me the place of a\n"
>+ " brother, and, as much as in him lies, mines my\n"
>+ " gentility with my education. This is it, Adam, that\n"
>+ " grieves me; and the spirit of my father, which I\n"
>+ " think is within me, begins to mutiny against this\n"
>+ " servitude: I will no longer endure it, though yet I\n"
>+ " know no wise remedy how to avoid it.\n"
>+ "\n"
>+ "ADAM Yonder comes my master, your brother.\n"
>+ "\n"
>+ "ORLANDO Go apart, Adam, and thou shalt hear how he will\n";
>+
>+/* Snippet of source code in Pascal */
>+static const char test_buf_pascal[] =
>+ " Ptr = 1..DMem;\n"
>+ " Loc = 1..IMem;\n"
>+ " Loc0 = 0..IMem;\n"
>+ " EdgeT = (hout,lin,hin,lout); {Warning this order is important in}\n"
>+ " {predicates such as gtS,geS}\n"
>+ " CardT = (finite,infinite);\n"
>+ " ExpT = Minexp..Maxexp;\n"
>+ " ManT = Mininf..Maxinf; \n"
>+ " Pflag = (PNull,PSoln,PTrace,PPrint);\n"
>+ " Sreal = record\n"
>+ " edge:EdgeT;\n"
>+ " cardinality:CardT;\n"
>+ " exp:ExpT; {exponent}\n"
>+ " mantissa:ManT;\n"
>+ " end;\n"
>+ " Int = record\n"
>+ " hi:Sreal;\n"
>+ " lo:Sreal;\n"
>+ " end;\n"
>+ " Instr = record\n"
>+ " Code:OpType;\n"
>+ " Pars: array[0..Par] of 0..DMem;\n"
>+ " end;\n"
>+ " DataMem= record\n"
>+ " D :array [Ptr] of Int;\n"
>+ " S :array [Loc] of State;\n"
>+ " LastHalve:Loc;\n"
>+ " RHalve :array [Loc] of real;\n"
>+ " end;\n"
>+ " DataFlags=record\n"
>+ " PF :array [Ptr] of Pflag;\n"
>+ " end;\n"
>+ "var\n"
>+ " Debug : (none,activity,post,trace,dump);\n"
>+ " Cut : (once,all);\n"
>+ " GlobalEnd,Verifiable:boolean;\n"
>+ " HalveThreshold:real;\n"
>+ " I : array [Loc] of Instr; {Memory holding instructions}\n"
>+ " End : Loc; {last instruction in I}\n"
>+ " ParN : array [OpType] of -1..Par; {number of parameters for each \n"
>+ " opcode. -1 means no result}\n"
>+ " ParIntersect : array [OpType] of boolean ;\n"
>+ " DInit : DataMem; {initial memory which is cleared and \n"
>+ " used in first call}\n"
>+ " DF : DataFlags; {hold flags for variables, e.g. print/trace}\n"
>+ " MaxDMem:0..DMem;\n"
>+ " Shift : array[0..Digits] of 1..maxint;{array of constant multipliers}\n"
>+ " {used for alignment etc.}\n"
>+ " Dummy :Positive;\n"
>+ " {constant intervals and Sreals}\n"
>+ " PlusInfS,MinusInfS,PlusSmallS,MinusSmallS,ZeroS,\n"
>+ " PlusFiniteS,MinusFiniteS:Sreal;\n"
>+ " Zero,All,AllFinite:Int;\n"
>+ "\n"
>+ "procedure deblank;\n"
>+ "var Ch:char;\n"
>+ "begin\n"
>+ " while (not eof) and (input^ in [' ',' ']) do read(Ch);\n"
>+ "end;\n"
>+ "\n"
>+ "procedure InitialOptions;\n"
>+ "\n"
>+ "#include '/user/profs/cleary/bin/options.i';\n"
>+ "\n"
>+ " procedure Option;\n"
>+ " begin\n"
>+ " case Opt of\n"
>+ " 'a','A':Debug:=activity;\n"
>+ " 'd','D':Debug:=dump;\n"
>+ " 'h','H':HalveThreshold:=StringNum/100;\n"
>+ " 'n','N':Debug:=none;\n"
>+ " 'p','P':Debug:=post;\n"
>+ " 't','T':Debug:=trace;\n"
>+ " 'v','V':Verifiable:=true;\n"
>+ " end;\n"
>+ " end;\n"
>+ "\n"
>+ "begin\n"
>+ " Debug:=trace;\n"
>+ " Verifiable:=false;\n"
>+ " HalveThreshold:=67/100;\n"
>+ " Options;\n"
>+ " writeln(Debug);\n"
>+ " writeln('Verifiable:',Verifiable);\n"
>+ " writeln('Halve threshold',HalveThreshold);\n"
>+ "end;{InitialOptions}\n"
>+ "\n"
>+ "procedure NormalizeUp(E,M:integer;var S:Sreal;var Closed:boolean);\n"
>+ "begin\n"
>+ "with S do\n"
>+ "begin\n"
>+ " if M=0 then S:=ZeroS else\n"
>+ " if M>0 then\n";
>+
>+static const char * const compress_test_bufs[] = {
>+ test_buf_alice,
>+ test_buf_shakespeare,
>+ test_buf_pascal
>+};
>+
>+#endif /* TEST_COMPRESSDEV_TEST_BUFFERS_H_ */
>--
>2.17.0
next prev parent reply other threads:[~2018-05-14 8:29 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-28 14:00 [dpdk-dev] [PATCH 0/5] Initial compressdev " Pablo de Lara
2018-02-28 14:00 ` [dpdk-dev] [PATCH 1/5] compressdev: add const for xform in session init Pablo de Lara
2018-02-28 14:00 ` [dpdk-dev] [PATCH 2/5] test/compress: add initial unit tests Pablo de Lara
2018-02-28 14:00 ` [dpdk-dev] [PATCH 3/5] test/compress: add multi op test Pablo de Lara
2018-02-28 14:00 ` [dpdk-dev] [PATCH 4/5] test/compress: add multi level test Pablo de Lara
2018-02-28 14:00 ` [dpdk-dev] [PATCH 5/5] test/compress: add multi session test Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 0/5] Initial compressdev unit tests Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 1/5] test/compress: add initial " Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 2/5] test/compress: add multi op test Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 3/5] test/compress: add multi level test Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 4/5] test/compress: add multi xform test Pablo de Lara
2018-04-08 14:00 ` [dpdk-dev] [PATCH v2 5/5] test/compress: add invalid configuration tests Pablo de Lara
2018-04-27 14:14 ` [dpdk-dev] [PATCH v3 0/5] Initial compressdev unit tests Pablo de Lara
2018-04-27 14:14 ` [dpdk-dev] [PATCH v3 1/5] test/compress: add initial " Pablo de Lara
2018-05-02 13:44 ` Daly, Lee
2018-05-04 8:49 ` De Lara Guarch, Pablo
2018-04-27 14:14 ` [dpdk-dev] [PATCH v3 2/5] test/compress: add multi op test Pablo de Lara
2018-04-27 14:15 ` [dpdk-dev] [PATCH v3 3/5] test/compress: add multi level test Pablo de Lara
2018-04-27 14:15 ` [dpdk-dev] [PATCH v3 4/5] test/compress: add multi xform test Pablo de Lara
2018-05-02 13:49 ` Daly, Lee
2018-04-27 14:15 ` [dpdk-dev] [PATCH v3 5/5] test/compress: add invalid configuration tests Pablo de Lara
2018-05-01 13:00 ` [dpdk-dev] [PATCH v3 0/5] Initial compressdev unit tests Daly, Lee
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 " Pablo de Lara
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 1/5] test/compress: add initial " Pablo de Lara
2018-05-14 8:29 ` Verma, Shally [this message]
2018-05-14 8:40 ` De Lara Guarch, Pablo
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 2/5] test/compress: add multi op test Pablo de Lara
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 3/5] test/compress: add multi level test Pablo de Lara
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 4/5] test/compress: add multi xform test Pablo de Lara
2018-05-04 10:22 ` [dpdk-dev] [PATCH v4 5/5] test/compress: add invalid configuration tests Pablo de Lara
2018-05-08 15:47 ` [dpdk-dev] [PATCH v4 0/5] Initial compressdev unit tests Trahe, Fiona
2018-05-08 21:26 ` De Lara Guarch, Pablo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CY4PR0701MB3634F4571ADCD15D4895763DF09C0@CY4PR0701MB3634.namprd07.prod.outlook.com \
--to=shally.verma@cavium.com \
--cc=Ashish.Gupta@cavium.com \
--cc=ahmed.mansour@nxp.com \
--cc=dev@dpdk.org \
--cc=fiona.trahe@intel.com \
--cc=lee.daly@intel.com \
--cc=pablo.de.lara.guarch@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).