import 'c';
import 'api';

pragma solidity^0.4.10;

contract directTest_fnc {
    OraclizeI c;
    function directTest_fnc(address t) {
        c = OraclizeI(t);
    }
    
    function extCb() external {
        
    }
    // These only work on initial contract deployment
    function query1First() {
        assert(c.query1_fnc(0, 'URL', '', this.extCb, 200000) != 0);
    }
    function query2First() {
        assert(c.query2_fnc(0, 'URL', '', '', this.extCb, 200000) != 0);
    }
    function queryNFirst() {
        assert(c.queryN_fnc(0, 'URL', hex'deadbeef', this.extCb, 200000) != 0);
    }
    // End first
    
    // Provide 0.1 eth per call to these
    function query1() payable {
        assert(c.query1_fnc.value(0.1 ether)(0, 'URL', '', this.extCb, 200000) != 0);
    }
    function query2() payable {
        assert(c.query2_fnc.value(0.1 ether)(0, 'URL', '', '', this.extCb, 200000) != 0);
    }
    function queryN() payable {
        assert(c.queryN_fnc.value(0.1 ether)(0, 'URL', hex'deadbeef', this.extCb, 200000) != 0);
    }
}

contract apiTest_fnc is usingOraclize {
    
    function extCb() external {
        
    }
    
    function apiTest_fnc(address o) {
        oraclize = OraclizeI(o);
    } 
    
    // top up after first call at least
    function topUp() payable {
        
    }
    // These only work on initial contract deployment
    function query1Full() {
        assert(oraclize_query(0, 'URL', '', this.extCb, 200000) != 0);
    }
    function query1Rest() {
        assert(oraclize_query('URL', '', this.extCb) != 0);
        assert(oraclize_query(0, 'URL', '', this.extCb) != 0);
        assert(oraclize_query('URL', '', this.extCb, 200000) != 0);
    }
    function query2Full() {
        assert(oraclize_query(0, 'URL', '', '', this.extCb, 200000) != 0);
    }
    function query2Rest() {
        assert(oraclize_query('URL', '', '', this.extCb) != 0);
        assert(oraclize_query(0, 'URL', '', '', this.extCb) != 0);
        assert(oraclize_query('URL', '', '', this.extCb, 200000) != 0);
      
    }
    function queryNFull() {
        bytes[] memory b = new bytes[](2);
        b[0] = hex'11';
        b[1] = hex'22';
        
        oraclize_query(0, 'URL', b, this.extCb, 200000);
    }
    function queryNRest1() {
        bytes[] memory b = new bytes[](2);
        b[0] = hex'11';
        b[1] = hex'22';
        
        oraclize_query('URL', b, this.extCb);
        oraclize_query(0, 'URL', b, this.extCb);
        oraclize_query('URL', b, this.extCb, 200000);
    }
    function queryNRest2() {
        
        oraclize_query(0, 'URL', [hex'11', hex'22', hex'33', hex'44', hex'55'], this.extCb, 200000);
        oraclize_query('URL', [hex'11', hex'22', hex'33', hex'44', hex'55'], this.extCb);
        oraclize_query(0, 'URL', [hex'11', hex'22', hex'33', hex'44', hex'55'], this.extCb);
        oraclize_query('URL', [hex'11', hex'22', hex'33', hex'44', hex'55'], this.extCb, 200000);
    }
    function queryNFullString() {
        string[] memory s = new string[](2);
        s[0] = 'one';
        s[1] = 'two';
        
        oraclize_query(0, 'URL', s, this.extCb, 200000);
    }
    function queryNRest1String() {
        string[] memory s = new string[](2);
        s[0] = 'one';
        s[1] = 'two';
        
        oraclize_query('URL', s, this.extCb);
        oraclize_query(0, 'URL', s, this.extCb);
        oraclize_query('URL', s, this.extCb, 200000);
    }
    function queryNRest2String() {
        
        oraclize_query(0, 'URL', ['one', 'two', 'three', 'four', 'five'], this.extCb, 200000);
        oraclize_query('URL', ['one', 'two', 'three', 'four', 'five'], this.extCb);
        oraclize_query(0, 'URL', ['one', 'two', 'three', 'four', 'five'], this.extCb);
        oraclize_query('URL', ['one', 'two', 'three', 'four', 'five'], this.extCb, 200000);
    }
}