# Hopefully "fun" problem to solve - matrix of test values

I need some help conceptualizing (and realizing) a matrix of test values.

I want to test all possible permutations for a series of 6 permissions.  Each permission can be true or false.

I think the math is 2^6 or 64 different combinations possible:

1,0,0,0,0,0

would represent granting "Can Create" permission and no permissions on the rest.

1,1,0,0,0,0 would grant CanCreate, CanRead and no on the rest.

I want to cover every combination.

I am looking to create a simple matrix for the combinations, just a CSV file of sorts.

Here is what I have so far, but what is the correct way to do this so that no test values repeat and all combinations are represented?

If I find the answer I'll return here and post it.  Until then I await your answer, gurus!

``````private void buttonGenerateCSV_Click(object sender, EventArgs e)
{
string[] validvals = textBoxValidValues.Text.Split(',');

{
textBoxCSV.Text += hs;
foreach (string s in validvals)
{
textBoxCSV.Text += s;
}
}

}
``````
LVL 5
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

High School Computer Science, Computer Applications, and Mathematics TeachersCommented:
Here's one way:
``````using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void buttonGenerateCSV_Click(object sender, EventArgs e)
{
textBoxCSV.Clear();
Revision rev = new Revision("01", "000000");
while (rev.CurrentRevision.Length == 6)
{
string combo = String.Join(",", rev.CurrentRevision.ToCharArray());
textBoxCSV.AppendText(combo + Environment.NewLine);
rev.NextRevision();
}
}
}

public class Revision
{

private string chars;
private char[] values;

private System.Text.StringBuilder curRevision;

public Revision()
{
this.DefaultRevision();
}

public Revision(string validChars)
{
if (validChars.Length > 0)
{
chars = validChars.ToUpper();
values = chars.ToCharArray();
curRevision = new System.Text.StringBuilder(values[0]);
}
else
{
this.DefaultRevision();
}
}

public Revision(string validChars, string startingRevision)
: this(validChars)
{
curRevision = new System.Text.StringBuilder(startingRevision.ToUpper());
int i = 0;
for (i = 0; i <= curRevision.Length - 1; i++)
{
if (Array.IndexOf(values, curRevision[i]) == -1)
{
curRevision = new System.Text.StringBuilder(values[0]);
break;
}
}
}

private void DefaultRevision()
{
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
values = chars.ToCharArray();
curRevision = new System.Text.StringBuilder(values[0]);
}

public string ValidChars
{
get { return chars; }
}

public string CurrentRevision
{
get { return curRevision.ToString(); }
}

public string NextRevision(int numRevisions = 1)
{
bool forward = (numRevisions > 0);
numRevisions = Math.Abs(numRevisions);
int i = 0;
for (i = 1; i <= numRevisions; i++)
{
if (forward)
{
this.Increment();
}
else
{
this.Decrement();
}
}
return this.CurrentRevision;
}

private void Increment()
{
char curChar = curRevision[curRevision.Length - 1];
int index = Array.IndexOf(values, curChar);
if (index < (chars.Length - 1))
{
index = index + 1;
curRevision[curRevision.Length - 1] = values[index];
}
else
{
curRevision[curRevision.Length - 1] = values[0];
int i = 0;
int startPosition = curRevision.Length - 2;
for (i = startPosition; i >= 0; i += -1)
{
curChar = curRevision[i];
index = Array.IndexOf(values, curChar);
if (index < (values.Length - 1))
{
index = index + 1;
curRevision[i] = values[index];
return;
}
else
{
curRevision[i] = values[0];
}
}
curRevision.Insert(0, values[0]);
}
}

private void Decrement()
{
char curChar = curRevision[curRevision.Length - 1];
int index = Array.IndexOf(values, curChar);
if (index > 0)
{
index = index - 1;
curRevision[curRevision.Length - 1] = values[index];
}
else
{
curRevision[curRevision.Length - 1] = values[values.Length - 1];
int i = 0;
int startPosition = curRevision.Length - 2;
for (i = startPosition; i >= 0; i += -1)
{
curChar = curRevision[i];
index = Array.IndexOf(values, curChar);
if (index > 0)
{
index = index - 1;
curRevision[i] = values[index];
return;
}
else
{
curRevision[i] = values[values.Length - 1];
}
}
curRevision.Remove(0, 1);
if (curRevision.Length == 0)
{
curRevision.Insert(0, values[0]);
}
}
}

}

}
``````

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Web developerAuthor Commented:
Here was my eventual solution:

``````using System;
using System.Linq;
using System.Windows.Forms;

namespace CSharpCodeGenAndSamples
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

{
string binValue = Convert.ToString(dectoconvert, 2);

{
binValue = "0" + binValue;
}

return binValue;
}

private int PowerOf(int num, int basenum)
{
int newnum = num;

for (int i = 1; i < basenum; i++)
{
newnum *= num;
}

return newnum;
}

private string InjectCharsIntoExistingString(string origstring, string chartoinject)
{
int strlen = origstring.Length;

string newstring = "";

for (int i = 0; i < strlen; i++)
{
newstring += origstring[i] + chartoinject;
}

newstring = newstring.Substring(0, newstring.Length - 1);
return newstring;
}

private void ButtonGenerateCsvClick(object sender, EventArgs e)
{
string[] validvals = textBoxValidValues.Text.Split(',');

int countofvalidvals = validvals.Count();

string headercols = headervals.Aggregate("", (current, hs) => current + (hs + ","));

for (int i = 0; i < power; i++)
{
string arrayofbinvals = InjectCharsIntoExistingString(binasstring, ",");

textBoxCSV.Text += arrayofbinvals + Environment.NewLine;
//string[] newarrayofbinvals = arrayofbinvals.Split(',');
}

foreach (string s in validvals)
{
textBoxCSV.Text += s;
{
textBoxCSV.Text += hs;
}
}
}
}
}
``````
Web developerAuthor Commented:
Thank you for the example and for your time spent on this!

Tom
High School Computer Science, Computer Applications, and Mathematics TeachersCommented:
No problem.  Definitely many ways to approach this problem...
###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.