Add a simple test that demonstrates how to create and manipulate
a list of strings using the string-list.h API.
To see the test, call it by:
./bin-wrappers/test-string-list.c
Signed-off-by: Thiago Farina <redacted>
---
Makefile | 1 +
test-string-list.c | 29 +++++++++++++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)
create mode 100644 test-string-list.c
@@ -0,0 +1,29 @@+#include<stdio.h>+#include<string.h>+#include"string-list.h"++intmain(intargc,constchar**argv)+{+structstring_listlist;+inti;++memset(&list,0,sizeof(structstring_list));++string_list_append(&list,"foo");+string_list_append(&list,"bar");++for(i=0;i<list.nr;i++)+printf("%s\n",list.items[i].string);++print_string_list(&list,"");++inthas_foo=string_list_has_string(&list,"foo");+if(has_foo!=1)+error("List doesn't have foo.");++string_list_clear(&list,0);+if(list.nr>0)+error("List is not clear.");++return0;+}
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:49:29
Hi Thiago,
Thiago Farina wrote:
Add a simple test that demonstrates how to create and manipulate
a list of strings using the string-list.h API.
Quick thoughts:
quoted hunk
--- /dev/null+++ b/test-string-list.c
@@ -0,0 +1,29 @@+#include<stdio.h>
Git programs tend to start with
#include "cache.h"
or
#include "git-compat-util.h"
to get all the portability niceties.
+ print_string_list(&list, "");
+
+ int has_foo = string_list_has_string(&list, "foo");
Whitespace, declaration after statement... (see
Documentation/CodingGuidelines).
+ if (has_foo != 1)
+ error("List doesn't have foo.");
This does not exit with nonzero status when it fails. You probably
wanted
if (bad things)
return error("problems!");
+ string_list_clear(&list, 0);
+ if (list.nr > 0)
+ error("List is not clear.");
To make sure this example remains valid, wouldn't you want to include
a caller in the t/ directory so it can be automatically run? (See
t/README.)
Thoughts separate from the code:
* it is probably worth mentioning Documentation/technical/api-string-list.txt
for people who do not know about it.
* for this to be useful as a test I think one has to sort of believe
that it can break. That is, a test of something this basic (which
is already demonstrated and exercised by code throughout git, after
all) would tend to be especially devious.
* api-string-list.txt does not mention the STRING_LIST_INIT macros
you introduced. Maybe that would be worth improving.
Regards,
Jonathan
On Sun, Sep 5, 2010 at 2:02 AM, Jonathan Nieder [off-list ref] wrote:>
Git programs tend to start with
#include "cache.h"
or
#include "git-compat-util.h"
to get all the portability niceties.
Including it now.
quoted
+ print_string_list(&list, "");
+
+ int has_foo = string_list_has_string(&list, "foo");
Whitespace, declaration after statement... (see
Documentation/CodingGuidelines).
Fixed.
quoted
+ if (has_foo != 1)
+ error("List doesn't have foo.");
This does not exit with nonzero status when it fails. You probably
wanted
if (bad things)
return error("problems!");
Fixed.
quoted
+ string_list_clear(&list, 0);
+ if (list.nr > 0)
+ error("List is not clear.");
To make sure this example remains valid, wouldn't you want to include
a caller in the t/ directory so it can be automatically run? (See
t/README.)
I read it, but I'm not sure how to do this. Maybe you could point me
to an example?
Thoughts separate from the code:
* for this to be useful as a test I think one has to sort of believe
that it can break. That is, a test of something this basic (which
is already demonstrated and exercised by code throughout git, after
all) would tend to be especially devious.
It is basic, so anyone can read it, and say "Oh, I can do this.".
Looking through the code maybe not so easy.
It can be expanded later by anyone to test many other things though.
So, why not? (Is it so bad to not have it at all?).
From: Jonathan Nieder <hidden> Date: 2016-06-15 22:49:30
Hi Thiago,
Thiago Farina wrote:
On Sun, Sep 5, 2010 at 2:02 AM, Jonathan Nieder [off-list ref] wrote:>
quoted
To make sure this example remains valid, wouldn't you want to include
a caller in the t/ directory so it can be automatically run? (See
t/README.)
I read it, but I'm not sure how to do this. Maybe you could point me
to an example?
t0070-fundamental.sh might be a good place to add it.
It can be expanded later by anyone to test many other things though.
I suppose. Edge cases for arguments, sorting, and _DUP versus _NODUP
semantics would be the main thing I would be interested in testing.
Maybe another day.
Thanks,
Jonathan
On Mon, Sep 6, 2010 at 9:07 PM, Jonathan Nieder [off-list ref] wrote:
Hi Thiago,
Thiago Farina wrote:
quoted
On Sun, Sep 5, 2010 at 2:02 AM, Jonathan Nieder [off-list ref] wrote:>
quoted
quoted
To make sure this example remains valid, wouldn't you want to include
a caller in the t/ directory so it can be automatically run? (See
t/README.)
I read it, but I'm not sure how to do this. Maybe you could point me
to an example?
t0070-fundamental.sh might be a good place to add it.
Thanks, added it to there.
quoted
It can be expanded later by anyone to test many other things though.
I suppose. Edge cases for arguments, sorting, and _DUP versus _NODUP
semantics would be the main thing I would be interested in testing.
Reworked into small functions to test string_list functions separated
(using assert to check if the return value of the function is what is
expected).
Please, take another look.