// Path: src/main/java/com/timgroup/karg/keywords/Keyword.java
// public interface Keyword<T> extends KeywordArgumentsLens<T> {
// 
//     KeywordArguments metadata();
//     KeywordArgument of(T value);
//     T from(KeywordArguments keywordArguments);
//     T from(KeywordArguments keywordArguments, T defaultValue);
//     
// }
// 
// Path: src/main/java/com/timgroup/karg/keywords/KeywordArgument.java
// public class KeywordArgument {
//     
//     private final Keyword<?> keyword;
//     private final Object value;
// 
//     public static <T> KeywordArgument value(Keyword<? super T> keyword, T value) {
//         return new KeywordArgument(keyword, value);
//     }
//     
//     private <T> KeywordArgument(Keyword<? super T> name, T value) {
//         this.keyword = name;
//         this.value = value;
//     }
//     
//     public Keyword<?> keyword() {
//         return keyword;
//     }
//     
//     public Object value() {
//         return value;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((keyword == null) ? 0 : keyword.hashCode());
//         result = prime * result + ((value == null) ? 0 : value.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         KeywordArgument other = (KeywordArgument) obj;
//         if (!keyword.equals(other.keyword)) {
//             return false;
//         }
//         if (value == null) {
//             if (other.value != null) {
//                 return false;
//             }
//         } else if (!value.equals(other.value)) {
//             return false;
//         }
//         return true;
//     }
// 
// }


import org.junit.Test;
import com.timgroup.karg.keywords.Keyword;
import com.timgroup.karg.keywords.KeywordArgument;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
package com.timgroup.karg.keywords;





public class KeywordArgumentTest {

    @SuppressWarnings("unchecked")
    @Test public void
    bindsAKeywordToAValue() {
        Keyword<String> name = Keywords.newKeyword();
// Path: src/main/java/com/timgroup/karg/keywords/Keyword.java
// public interface Keyword<T> extends KeywordArgumentsLens<T> {
// 
//     KeywordArguments metadata();
//     KeywordArgument of(T value);
//     T from(KeywordArguments keywordArguments);
//     T from(KeywordArguments keywordArguments, T defaultValue);
//     
// }
// 
// Path: src/main/java/com/timgroup/karg/keywords/KeywordArgument.java
// public class KeywordArgument {
//     
//     private final Keyword<?> keyword;
//     private final Object value;
// 
//     public static <T> KeywordArgument value(Keyword<? super T> keyword, T value) {
//         return new KeywordArgument(keyword, value);
//     }
//     
//     private <T> KeywordArgument(Keyword<? super T> name, T value) {
//         this.keyword = name;
//         this.value = value;
//     }
//     
//     public Keyword<?> keyword() {
//         return keyword;
//     }
//     
//     public Object value() {
//         return value;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + ((keyword == null) ? 0 : keyword.hashCode());
//         result = prime * result + ((value == null) ? 0 : value.hashCode());
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         KeywordArgument other = (KeywordArgument) obj;
//         if (!keyword.equals(other.keyword)) {
//             return false;
//         }
//         if (value == null) {
//             if (other.value != null) {
//                 return false;
//             }
//         } else if (!value.equals(other.value)) {
//             return false;
//         }
//         return true;
//     }
// 
// }


// Path: src/test/java/com/timgroup/karg/keywords/KeywordArgumentTest.java
import org.junit.Test;
import com.timgroup.karg.keywords.Keyword;
import com.timgroup.karg.keywords.KeywordArgument;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;

package com.timgroup.karg.keywords;





public class KeywordArgumentTest {

    @SuppressWarnings("unchecked")
    @Test public void
    bindsAKeywordToAValue() {
        Keyword<String> name = Keywords.newKeyword();
        KeywordArgument bound = KeywordArgument.value(name, "Hello");